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)

よしとする。