読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

RADIUS をテストするには

Cisco Linux Network Radius

RADIUS サーバの構築後にテストを実施する際、「実際に RADIUS クライアントとして設定したネットワーク機器やサーバへ SSH ログインし、RADIUS サーバで上手く認証されるか?を確認する」ことは、もちろん可能です。しかし、他にも(実際のログイン処理では無く)『テストコマンドで RADIUS 認証の挙動を確認する』方法があります。まずはテストコマンドで動作を確認し、上手くいったら実際のログインテストを試す… というのが最もスマートだと思います。メジャーなところでは以下のような方法があります。

  1. FreeRADIUS 付属の radtest を使う
  2. Cisco IOStest aaa を使う

今回はこれらの RADIUS のテスト方法について記載してみます。RADIUS サーバには MikroTik の RouterOS を使いました。

FreeRADIUS 付属の radtest でテストする

radtest は FreeRADIUS に付属している為、まずは FreeRADIUS をインストールします。今回は Ubuntu 上で作業しています。

apt-get -y install freeradius

radtest の基本的な構文は以下の通りです。

radtest USERNAME PASSWORD DST-ADDRESS SRC-PORT SHARED-SECRET

項目の意味は以下の通りです。

項目 意味
USERNAME 認証したいユーザ名を入力します
PASSWORD パスワードを入力します
DST-ADDRESS 認証させる RADIUS サーバのアドレスを入力します
SRC-PORT 送信元ポート番号を入力します
SHARED-SECRET 共有シークレットを入力します。共有シークレットは RADIUS クライアントとサーバ間で一致している必要があります

その他に以下のオプションも利用可能です。

オプション 意味
-t 認証方式を指定します。pap / chap mschap から選択可能です
-x デバッグログを出力します
-4 RADIUS サーバへの接続に IPv4 アドレスを利用します
-6 RADIUS サーバへの接続に IPv6 アドレスを利用します

認証成功時のログ出力例

認証成功時のログ出力例は以下の通りです。「Access-Accept」が返ってきているのが分かります。

# radtest USER1 PASSWORD1 192.168.1.1 12345 SECRET
Sending Access-Request of id 194 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 192.168.1.1 port 1812, id=194, length=26
	Acct-Interim-Interval = 60

RADIUS サーバ側にクライアントの登録が無い場合のログ出力例

RADIUS サーバ側にクライアントの登録が無い場合、RADIUS サーバはレスポンスそのものを返しません。よって、以下のように「no response」となり、認証に失敗します。

# radtest USER1 PASSWORD1 192.168.1.1 12345 SECRET
Sending Access-Request of id 171 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
Sending Access-Request of id 171 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
Sending Access-Request of id 171 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
radclient: no response from server for ID 171 socket 3

RADIUS サーバとクライアント間で共有シークレットが不一致な場合のログ出力例

共有シークレットとは RADIUS サーバとクライアント間で一致させておく必要のある、いわばパスワードのようなものです。これが不一致な場合、以下のように「Access-Reject」を受信し、認証に失敗します。更に「Received Access-Reject packet from home server 192.168.1.1 port 1812 with invalid signature! (Shared secret is incorrect.)」と表示され、共有シークレットが誤っている可能性を示唆されるのでトラブルシューティング時の参考になります。

# radtest USER1 PASSWORD1 192.168.1.1 12345 SECRET
Sending Access-Request of id 133 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 192.168.1.1 port 1812, id=133, length=38
rad_verify: Received Access-Reject packet from home server 192.168.1.1 port 1812 with invalid signature!  (Shared secret is incorrect.)
Sending Access-Request of id 133 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 192.168.1.1 port 1812, id=133, length=38
rad_verify: Received Access-Reject packet from home server 192.168.1.1 port 1812 with invalid signature!  (Shared secret is incorrect.)
Sending Access-Request of id 133 to 192.168.1.1 port 1812
	User-Name = "USER1"
	User-Password = "PASSWORD1"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 12345
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 192.168.1.1 port 1812, id=133, length=38

Cisco IOS の test aaa でテストする

前提として、Cicso には以下の設定がされているものとします。

aaa new-model
!
aaa authentication login default group radius
!
interface GigabitEthernet0/1
 ip address 192.168.1.2 255.255.255.0
 no shutdown
!
radius server RADIUS-SERVER
 address ipv4 192.168.1.1 auth-port 1812 acct-port 1813
 key SECRET
!
line vty 0 4
 transport input telnet ssh
!
end

test aaa の基本的な構文は以下の通りです。

test aaa group radius USERNAME PASSWORD port DST-PORT new-code

項目の意味は以下の通りです。

項目 意味
USERNAME RADIUS サーバで認証させるユーザ名を入力します
PASSWORD パスワードを入力します
DST-PORT 宛先ポート番号を入力します。1812/UDP が一般的です

認証成功時のログ出力例

認証に成功した場合のログ出力例は以下の通りです。

Router# test aaa group radius USER1 PASSWORD1 port 1812 new-code
User successfully authenticated

USER ATTRIBUTES

acct-interval        0   60 (0x3C)

debug コマンドを併用すると、より詳細なログを出力出来ます。debug radiusRADIUS 関連のデバッグ機能を有効化出来ます。

Router# debug radius
Radius protocol debugging is on
Radius protocol brief debugging is off
Radius protocol verbose debugging is off
Radius packet hex dump debugging is off
Radius packet protocol debugging is on
Radius elog debugging debugging is off
Radius packet retransmission debugging is off
Radius server fail-over debugging is off

再度、test aaa によるテストを実行してみます。デバッグを有効化しているので詳細なログが出力されます。

Router# test aaa group radius USER1 PASSWORD1 port 1812 new-code
User successfully authenticated

USER ATTRIBUTES

acct-interval        0   60 (0x3C)
Router#
*Dec 12 13:10:07.218: RADIUS/ENCODE(00000000):Orig. component type = Invalid
*Dec 12 13:10:07.219: RADIUS/ENCODE(00000000): dropping service type, "radius-server attribute 6 on-for-login-auth" is off
*Dec 12 13:10:07.220: RADIUS(00000000): Config NAS IP: 0.0.0.0
*Dec 12 13:10:07.220: RADIUS(00000000): Config NAS IPv6: ::
*Dec 12 13:10:07.220: RADIUS(00000000): sending
*Dec 12 13:10:07.221: RADIUS/DECODE(00000000): There is no General DB. Want server details may not be specified
*Dec 12 13:10:07.224: RADIUS/ENCODE: Best Local IP-Address 192.168.1.2 for Radius-Server 192.168.1.1
*Dec 12 13:10:07.225: RADIUS(00000000): Send Access-Request to 192.168.1.1:1812 id 1645/26, len 51
*Dec 12 13:10:07.225: RADIUS:  authenticator CC C7 89 EE 9C A5 EA 47 - FB 8A 28 0C 82 86 B5 F9
*Dec 12 13:10:07.226: RADIUS:  User-Password       [2]   18  *
*Dec 12 13:10:07.227: RADIUS:  User-Name           [1]   7   "USER1"
*Dec 12 13:10:07.228: RADIUS:  NAS-IP-Address      [4]   6   192.168.1.2
*Dec 12 13:10:07.228: RADIUS(00000000): Sending a IPv4 Radius Packet
*Dec 12 13:10:07.231: RADIUS(00000000): Started 5 sec timeout
*Dec 12 13:10:07.235: RADIUS: Received from id 1645/26 192.168.1.1:1812, Access-Accept, len 26
*Dec 12 13:10:07.236: RADIUS:  authenticator DC 9E 49 D2 34 7A 4E E0 - 7B FA 41 21 29 2A AB 78
*Dec 12 13:10:07.236: RADIUS:  Acct-Interim-Interva[85]  6   60
*Dec 12 13:10:07.237: RADIUS/DECODE(00000000): There is no General DB. Reply server details may not be recorded
*Dec 12 13:10:07.238: RADIUS(00000000): Received from id 1645/26

パスワード不一致による認証失敗時のログ出力例

誤ったパスワードを入力して認証に失敗した場合のログ出力例は以下の通りです。

Router# test aaa group radius USER1 BAD-PASSWORD port 1812 new-code
User rejected

デバッグを併用しながら意図的に「誤ったパスワードでの RADIUS 認証」を実行すると、以下のようなログが出力されます。「invalid password」というメッセージが見えますので、トラブルシューティングの参考になります。

Router# test aaa group radius USER1 BAD-PASSWORD port 1812 new-code
User rejected

Router#
*Dec 12 13:11:57.375: RADIUS/ENCODE(00000000):Orig. component type = Invalid
*Dec 12 13:11:57.375: RADIUS/ENCODE(00000000): dropping service type, "radius-server attribute 6 on-for-login-auth" is off
*Dec 12 13:11:57.376: RADIUS(00000000): Config NAS IP: 0.0.0.0
*Dec 12 13:11:57.376: RADIUS(00000000): Config NAS IPv6: ::
*Dec 12 13:11:57.376: RADIUS(00000000): sending
*Dec 12 13:11:57.377: RADIUS/DECODE(00000000): There is no General DB. Want server details may not be specified
*Dec 12 13:11:57.382: RADIUS/ENCODE: Best Local IP-Address 192.168.1.2 for Radius-Server 192.168.1.1
*Dec 12 13:11:57.383: RADIUS(00000000): Send Access-Request to 192.168.1.1:1812 id 1645/27, len 51
*Dec 12 13:11:57.383: RADIUS:  authenticator 67 C1 8A FE 6D 1A 49 24 - FB 9C 30 C9 1E CB E7 17
*Dec 12 13:11:57.384: RADIUS:  User-Password       [2]   18  *
*Dec 12 13:11:57.384: RADIUS:  User-Name           [1]   7   "USER1"
*Dec 12 13:11:57.385: RADIUS:  NAS-IP-Address      [4]   6   192.168.1.2
*Dec 12 13:11:57.386: RADIUS(00000000): Sending a IPv4 Radius Packet
*Dec 12 13:11:57.389: RADIUS(00000000): Started 5 sec timeout
*Dec 12 13:11:57.392: RADIUS: Received from id 1645/27 192.168.1.1:1812, Access-Reject, len 38
*Dec 12 13:11:57.393: RADIUS:  authenticator B2 27 F2 EF F5 76 42 25 - DC 96 6F DB 56 55 48 B9
*Dec 12 13:11:57.393: RADIUS:  Reply-Message       [18]  18
*Dec 12 13:11:57.394: RADIUS:   69 6E 76 61 6C 69 64 20 70 61 73 73 77 6F 72 64  [ invalid password]
*Dec 12 13:11:57.394: RADIUS/DECODE(00000000): There is no General DB. Reply server details may not be recorded
*Dec 12 13:11:57.395: RADIUS(00000000): Received from id 1645/27
*Dec 12 13:11:57.395: RADIUS/DECODE: Reply-Message fragments, 16, total 16 bytes