FreeRadius3のインストール
自己メモ。
前回エントリから丸一年。なにもしてない。。。
freeradius2.0.xでEAP-TLS認証しようとしたらトラストアンカー?だか何だかのエラーがでてにっちもさっちもいかなくなったので、freeradius3をインストールしました。
※このエントリは編集中です。
ソースのダウンロード
ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.10.tar.gz
tar zxvf freeradius-server-3.0.10.tar.gz
./configure
make
make install
修正するコンフィグファイルは
# vi radiusd.conf
# デフォルトでは認証のたびにログに吐き出すわけではないので、
# logセクション内のauthはyesにしておく
log{
....
#auth = no
auth = yes
....
}
# securityセクション内のopensslの脆弱性問題に対応しておく
# 必ず確認すること!
# opensslのバージョン表示オプションでは脆弱性内包バージョンだが、
# 実際には対応ずみのバージョンのため、下記オプションを設定する必要がある。
security{
....
#allow_vulnerable_openssl = no
allow_vulnerable_openssl = yes
....
}
# vi clients.conf
# ここはテストがおわったら削除してもよい
client localhost {
ipaddr = 127.0.0.1
secret = testing123
nastype = other # localhost isn't usually a NAS...
}
# ここで認証元のサーバを指定しておく
client MyHomeClient {
ipaddr = 192.168.0.0
netmask = 16
secret = SECRET
}
# ln -s users mods-config/files/authorized
# mkdir mods-config/files/userlist
# vi users
$INCLUDE /usr/local/etc/raddb/mods-config/files/userlist/users.login
$INCLUDE /usr/local/etc/raddb/mods-config/files/userlist/users.eap
# vi mods-config/files/userlist/users.login
foo Auth-Type := PAP , Cleartext-Password := "bar"
hoge Auth-Type := PAP , MD5-Password := "319f4d26e3c536b5dd871bb2c52e3178"
MD5パスワードを利用する場合は
# echo -n PASSWORD | openssl md5
(stdin)= 319f4d26e3c536b5dd871bb2c52e3178
動作テストとしてデバッグモードで立ち上げる
# radiusd -X
別ターミナルからradtestコマンドで試験する
# radtest foo bar localhost 123 SECRET
このとき、radiusd -X の表示がなにもない場合、iptablesなどFWではじかれている可能性がある。
# vi /etc/sysconfig/iptables
- A INPUT -p udp --dport 1812 -j ACCEPT
デーモンのための設定
ログファイル、PIDファイルの保管場所
# mkdir -p /usr/local/var/log/radius
# mkdir -p /usr/local/var/run/radiusd
起動スクリプトの設置
# cp redhat/freeradius-radiusd-init /etc/init.d/radiusd
# vim /etc/init.d/radiusd
exec=${exec:=/usr/local/sbin/$prog}
config_dir=${config_dir:=/usr/local/etc/raddb}
config=${config:=$config_dir/radiusd.conf}
pidfile=${pidfile:=/usr/local/var/run/$prog/$prog.pid}
lockfile=${lockfile:=/var/lock/subsys/radiusd}
# service radiusd start
# chkconfig radiusd on
cisco機器のログイン認証をRadiusで認証させる
FreeRADIUSとCisco機器を利用したログイン認証 - devwiki
これが元ネタなのですが、整理してかけていません。
Cisco機器のもっとも単純なログイン認証は以下のような設定である。
条件
コンソールパスワード:LOGIN telnetパスワード:LOGIN 特権モードパスワード:SECRET
コンフィグ例
enable secret SECRET line con 0 password LOGIN login line vty 0 4 password LOGIN login
これを以下のようなユーザ認証に変更したい。
条件
CON:line認証 VTY:telnetはvty0-4に割り当てられline認証 VTY:sshはvty5-15に割り当てられRADIUSでのユーザ認証 特権:特権パスワードをRADIUS認証する
コンフィグ例(Cisco機器)
! SSHで接続する場合には、ドメイン名の設定後に、RSAキーを作成する。 ! RSAキーは768ビット以上にしなければSSHv2にすることができない。 ip domain-name prosper2.org crypto key generate rsa The name for the keys will be: R40801.prosper2.org Choose the size of the key modulus in the range of 360 to 4096 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: ← ここで1024を入力する % Generating 1024 bit RSA keys, keys will be non-exportable... [OK] (elapsed time was 1 seconds) ip ssh version 2 ! ユーザ名の設定を行う ! 後述のRADIUSとの疎通が取れなくなった場合には、 ! このユーザ名とパスワードで認証が実施される。 username user01 password PSWDuser01 aaa new-model aaa session-id common ! line認証をdefaultグループにしておく。 ! →新規グループにしようとするとAAAサーバの設定が必要だが、 ! line認証ではAAAサーバを設定しないため、defaultにしか設定できない。 aaa authentication login default line aaa authorization exec default if-authenticated ! Radiusサーバを設定する。 aaa group server radius RadiusForLogin server-private 192.168.10.251 auth-port 1812 acct-port 1813 timeout 1 retransmit 1 key RADIUSKEY ! イネーブル認証にRadiusサーバを設定する。 aaa authentication enable default group RadiusForLogin enable ! ログイン認証にRadiusサーバを設定する。 aaa authentication login AuthenForLogin group RadiusForLogin local-case aaa authorization exec AuthorForLogin group RadiusForLogin if-authenticated ! コンソールはline認証とする line con 0 password LOGIN login authentication default ! コンソールにもRADIUS認証させたい場合には以下とする。 aaa authorization console line con 0 login authentication AuthenForLogin authorization exec AuthorForLogin ! telnetで着信したものはvty0-4に割り当てる ! vty0-4はline認証とする line vty 0 4 password LOGIN login authentication default transport input telnet ! sshで着信したものはvty5-15に割り当てる ! vty5-15はRADIUS認証、RADIUS認可とする。 line vty 5 15 login authentication AuthenForLogin authorization exec AuthorForLogin transport input ssh
コンフィグ例(FreeRadiusの/etc/raddb/users)
user Auth-Type := PAP , MD5-Password := "xxxx" $enab15$ Auth-Type := PAP , MD5-Password := "xxxx" admin Auth-Type := PAP , MD5-Password := "xxxx" Service-Type := NAS-Prompt-User , Cisco-AVPair := "shell:priv-lvl=15"
解説
Radiusアトリビュートとして以下を渡すと、権限レベル15でログインすることとなる。 権限レベル15とは特権モードのことである。 Service-Type := NAS-Prompt-User , Cisco-AVPair := "shell:priv-lvl=15" ただし、RADIUSによる認可を行うには、以下コマンドにて 「認証された場合に、認可を有効にする」ことをする必要がある。 aaa authorization exec AuthorForLogin group RadiusForLogin if-authenticated PAPの場合はパスワードをusersファイルに書き込まなければならないが、平文での保存が 精神衛生上よろしくない場合には、ハッシュ値での保存が可能である。 ハッシュ値は以下のコマンドで算出可能。 $ echo -n PASSWORD | openssl md5
動作確認
======== telnet ======== $ telnet r40801 Trying 192.168.100.254... Connected to r40801. Escape character is '^]'. User Access Verification Password: R40801>show privi Current privilege level is 1 R40801>en Password: R40801#show privi Current privilege level is 15 R40801#exit Connection closed by foreign host. Radiusログ Mon Mar 23 23:07:01 2015 : Auth: Login OK: [$enab15$/XXXXXX] (from client MyHome port 6 cli 192.168.10.251)
======== ssh ======== $ ssh admin@r40801 Password: R40801#show privi Current privilege level is 15 R40801#exit Connection to r40801 closed. $ Radiusログ Mon Mar 23 23:07:15 2015 : Auth: Login OK: [admin/XXXXXX] (from client MyHome port 12)
よしとする。
RADIUSサーバに登録されたMAC認証用のMACアドレスで機器ログインできてしまう問題
macアドレス認証をやらせているradiusサーバに機器ログイン認証もやらせている場合、macアドレスをuid/pwdとしてログインできることが判明。参照するデータベースが同じだから仕方ないっちゃ仕方ないよな。
— bashaway (@bashaway) 2015, 3月 17
というわけで調べてみた。
以下FreeRadiusをデバッグモード(radiusd -X)で起動したもののうち
Access-Requestのパートだけを抜き出すと、ちょっと違いが。
MACアドレスバイパスの場合
rad_recv: Access-Request packet from host 192.168.10.181 port 1645, id=15, length=157
User-Name = "000f1fce0c64"
User-Password = "000f1fce0c64"
Service-Type = Call-Check
Framed-MTU = 1500
Called-Station-Id = "00-1E-BD-F6-54-02"
Calling-Station-Id = "00-0F-1F-CE-0C-64"
Message-Authenticator = 0x8b565748593bbc11719a25c438bc064f
NAS-Port-Type = Ethernet
NAS-Port = 50002
NAS-Port-Id = "FastEthernet0/2"
NAS-IP-Address = 192.168.10.181
MACアドレスでログインした場合
rad_recv: Access-Request packet from host 192.168.10.181 port 1645, id=18, length=76
User-Name = "000f1fce0c64"
User-Password = "000f1fce0c64"
NAS-Port = 1
NAS-Port-Id = "tty1"
NAS-Port-Type = Virtual
NAS-IP-Address = 192.168.10.181
というわけで、とりあえず "NAS-Port-Type = Ethernet" をチェックアイテムに含めてみる。
000f1fce0c64 Cleartext-Password := "000f1fce0c64"
↓
000f1fce0c64 Cleartext-Password := "000f1fce0c64" , NAS-Port-Type == Ethernet
すると、ログ上でuserファイルにマッチしていた
[files] users: Matched entry 000f1fce0c64 at line 7
という行が消え、
[files] users: Matched entry DEFAULT at line 1
のみが確認でした。つまり条件にマッチしていないのでREJECTされている。
よしとする。