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アドレスで機器ログインできてしまう問題

 というわけで調べてみた。

以下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されている。

 

よしとする。