うちでは無線LANの認証方式にEAP-PEAPを使用しており、アカウント名やパスワードはLDAPで管理しているが、今回LDAPからWindows ServerのActive Directoryへ変更してみました。Active Directoryを使用している企業等ではLDAPよりこちらが便利だと思います。FreeRadiusの設定方法は下記の通り。なおRadiusの今回FreeRadiusのバージョンは「2.1.12-2」(Fedora15)を使用しています。
FreeRadiusからActive Directoryへ認証のリクエストをするには、Sambaのコマンドを使用するので、「samba-winbind」がインストールされていることが条件となる。また、デーモン「winbind」が起動されている必要がある。
yum install samba samba-winbind
chkconfig winbind on
/etc/init.d/winbind start
最初にSambaとkrb5の設定ファイルを変更します。まずは「/etc/samba/smb.conf」を変更。(デフォルトから変更した箇所は赤字)
[ global]
workgroup = AD
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = ads
passdb backend = tdbsam
realm = ad.example.com
password server = ad.example.com
load printers = yes
cups options = raw
次にkerberos(krb5)の設定ファイル「/etc/krb5.conf」を変更。
[ libdefaults]
default_realm = AD.EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[ realms]
AD.EXAMPLE.COM = {
kdc = ad.example.com
admin_server = ad.example.com
}
[ domain_realm]
.ad.example.com = AD.EXAMPLE.COM
ad.example.com = AD.EXAMPLE.COM
次にFreeRadiusの設定変更を行う。radiusdのmschapモジュール設定「/etc/raddb/modules/mschap」の下の方に「ntlm_auth」の行がコメントアウトされているので有効化して「ntlm_auth」コマンドのパスを正しく修正します。(下記例では/usr/bin/ntlm_auth)
ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{ %{Stripped-User-Name}:-%{User-Name:-None}} --challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00}"
Radiusの設定ファイル「/etc/raddb/sites-available/auth-wireless」を新規作成する。(auth-wirelessは任意。変更する場合はファイル内も変更すること)
server auth-wireless {
authorize {
eap
}
authenticate {
eap
}
}
Radiusの設定ファイル「/etc/raddb/sites-available/inner-tunnel」を下記の様に修正する。
server inner-tunnel {
listen {
ipaddr = 127.0.0.1
port = 18120
type = auth
}
authorize {
mschap
eap {
ok = return
}
}
authenticate {
Auth-Type MS-CHAP {
mschap
}
eap
}
}
Radiusの設定ファイル「/etc/raddb/eap.conf」を下記の様に修正する。
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = 4096
tls {
certdir = /etc/pki/tls/certs
cadir = /etc/pki/tls/cert
private_key_password = 'password'
private_key_file = /etc/pki/tls/private/server.key
certificate_file = ${ certdir } /server.crt
CA_file = ${ cadir } /cacert.pem
dh_file = ${ certdir } /dh2048.pem
random_file = /dev/urandom
CA_path = ${ cadir }
cipher_list = "DEFAULT"
cache {
enable = no
lifetime = 24
max_entries = 255
}
verify {
}
}
peap {
default_eap_type = mschapv2
copy_request_to_tunnel = no
use_tunneled_reply = no
virtual_server = "inner-tunnel"
}
mschapv2 {
}
}
Radiusサーバへ認証リクエストしてくるクライアント(例:無線AccessPoint等)を「/etc/raddb/clients.conf」追加します。「virtual_server」には「/etc/raddb/sites-available/auth-wireless」で指定した「auth-wireless」を設定します。
client 192.168.1.1/32 {
secret = testing123
shortname = TEST
virtual_server = auth-wireless
}
新規に定義した「auth-wireless」の設定を有効にするため、「/etc/raddb/sites-enabled」配下にシンボリックリンクを作成する。
cd /etc/raddb/sites-enabled
ln -s ../sites-available/auth-wireless auth-wireless
最後にSambaの下記ディレクトリをradiusdが参照できるようにグループオーナーを変更する。
chgrp radiusd /var/lib/samba/winbindd_privileged
以上で設定は完了となる。あとはRadiusdを通常通り稼働させるか、もしくはデバックモード「radiusd -X」で稼働させ、radtestやeapol_testで認証試験を行なってみる。
今回はEAP-PEAPなので上記設定となりましたが、通常のRadius認証の場合でも、mschapv2を使用していれば応用効くと思います。なお、今回手本としたページ「Configuring Authentication with Active Directory 」もありますのでこちらも参照することおすすめします。