danishnetのブログ

「デキるネットワークエンジニアになるために。」

はじめてのRadius認証 - ubuntuでfreeRadius

久しぶりの更新になりました。
前メインプロジェクトが山場を越えて、少し落ち着きました。かなり中途半端な内容になりそうですが、ブログの更新がしたくてたまらなくネタを探しておりました笑


今回はRadius認証をテーマに、Radiusサーバは自分で構築したことがなかったので、興味を持ったのと理解を深めるため構築する。
今回はRadius認証の初歩的なところを構築する。構成は至ってシンプルで下記の通り。

 PC---L3SW---ubuntu(LinuxServer)
 
 <<IP構成>>
  【PC】(.1)--192.168.1.0/24--(.254)【L3SW】(.100)--192.168.11.0/24--(.14)【LinuxSerer】

L3SWにログイン時にRadius認証を使用したい。Radius認証のクライアントとサーバですが、
RadiusクライアントはPCではなくL3SWで、ubuntuRadiusサーバとなる。
このPCから入力されたユーザーID/PW情報を元に、L3SWがRadiusクライアントとして
ubuntuにログイン可否を問い合わせてログインしてもいいですよと「認証」をする。
この一連の流れがRadius認証だ。

ubuntu(LinuxServer)に「freeRadius」をインストールして構築します。

L3SWはcatalyst3750(Cisco)を使用、
PCは普通のノートPC(OSはubuntu14.10)を使用した。

今回はインストールしたfreeRadiusでは以下の4つのファイルの設定が必要


  1.radiusd.conf
  2.clients.conf
  3.users
  4.eap.conf

そしてfreeRadiusの機能ではないが、Radius認証に使用する通信ポートをサーバ側で受け付けるべく、iptablesの設定ubuntuに設定する必要があり、
それプラスRadiusクライアント(L3SW:catalyst3750)側のAAA設定も必要となる。

さて概要は以上の通りなので、さっそく1.radiusd.confの設定から順に
見ていくことしよう。


 ☆☆☆☆☆ Radiusサーバ側(ubuntu)の設定 ☆☆☆☆☆

■1.radiusd.conf の設定
Radius認証に使う通信ポートを指定する。

  ※編集前にcopyコマンドなどで同一ディレクトリにバックアップをとっておく。
    danishnet:/etc/freeradius# cd /etc/freeradius
    danishnet:/etc/freeradius# cp radiusd.conf radiusd.conf.org

 (変更前) #port = 0
 (変更後)  port = 1812
Radius認証で使用するポート(サーバ側がRadius認証=Access-Requestを受けるポート)を1812(UDP)に指定する。

(変更前) #auth = no
(変更後)  auth = yes
→ 認証を要求したユーザの認証ログを残す設定

また、他にもLinuxシステムのアカウントと連携させて認証させたい場合の記述や、
認証方法をCHAPにするときの記述などコレをいじる必要がありますが、
今回は初歩的設定なので割愛します。

■2.clients.conf の設定
※編集前にcopyコマンドなどで同一ディレクトリにバックアップをとっておく。
 
danishnet:/etc/freeradius#vi clients.conf

〜略〜

#client 192.168.0.0/16 {
#    secret        = testing123-2
#    shortname    = private-network-2
#}
-----上記例にならってココを追加------
client 192.168.11.100/32 {
    secret      = Cisco123
    shortname   = private-network-1
-------------------------------------
→今回はRadiusクライアントとしてL3SW(192.168.11.100)しかいないため/32で設定しているが
  実環境では192.168.1.0/24など認証エリア設計に合わせて変更が必要。
  shortnameは任意の値(何でもいい)らしい。
  ☆1>ここでsecretの値であるCisco123が共有鍵となるので重要です。後に出てくる
        Radiusクライアント(L3SW)側でもこれを共通鍵とする設定が必要なためです。

■3.users の設定
ログイン可能なユーザーを事前にRadiusサーバ側で登録設定しておく必要がある。
その登録をこのusersファイルにする。

danishnet:/etc/freeradius#vi users

〜略〜

#"John Doe"    Cleartext-Password := "hello"
#        Reply-Message = "Hello, %{User-Name}"
-----上記例にならってココを追加------
Radanish        Cleartest-Password := "hello"
         Reply-Message = "I allow you to login !! Hello , %{User-Name}"
-------------------------------------
#
→平文でユーザー名:Radanish パスワード:hello でユーザー登録。
  Reply-Messageはなんだろう?といま設定しながらやっている。某サイトで

このテキストが存在する場合、その文字列が access accept パケットで戻されます。

とあったので、Access Acceptで「I allow you to login !! Hello , Radanish」ってメッセージが返る?成功時のワクワクを期待してこんなMessageにした。


■4.eap.conf の設定
EAPを使った認証(EAP-TTLS、EAP-PEAPなど)の設定を行います。

danishnet:/etc/freeradius#vi eap.conf

〜略〜

----------------------ココを追加---------------------------------------------
eap {
 
                default_eap_type =peap
                timer_expire     = 60
                ignore_unknown_eap_types = yes
                cisco_accounting_username_bug = no
                max_sessions = 4096
 
                  tls {
            
            certdir = ${confdir}/certs
            cadir = ${confdir}/certs
            private_key_password = whatever
            private_key_file = ${certdir}/server.key
            certificate_file = ${certdir}/server.pem
            CA_file = ${cadir}/ca.pem
            dh_file = ${certdir}/dh
            random_file = /dev/urandom
            CA_path = ${cadir}
            cipher_list = "DEFAULT"
 
            make_cert_command = "${certdir}/bootstrap"
 
            cache {
                  enable = no
                  lifetime = 24 # hours        
                  max_entries = 255
            }
            verify {
            
            }
        }
 
        ttls {
            default_eap_type = mschapv2
                copy_request_to_tunnel = yes
            use_tunneled_reply = yes
        }
 
        peap {
            default_eap_type = mschapv2
        }
        mschapv2 {
        }
    }
                mschap {
                  authtype = MS-CHAP
                  use_mppe = yes
                  require_encryption = yes
                  require_strong = yes
               }
----------------------------------------------------------------------------

そして1〜4.の設定を反映させるためにfreeRadiusを再起動します。
# /etc/init.d/freeradius restart

ではサーバ側の最後の設定としてRadius認証の通信ポートを開けるべく
iptableの設定をします。通常、1812(Authentication),1813(Accounting)を
使用するため、この2つを開けます。(Authenticationとは今回使用するアクセス管理の事、
Accountingとはコマンド/接続時間/イベントなどログが記録できる機能の事。)

-------iptableの設定-----------------
danishnet:/etc/freeradius# iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 1812:1813 -j ACCEPT
danishnet:/etc/freeradius#
danishnet:/etc/freeradius# iptables  --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  192.168.1.0/24       anywhere             udp dpts:radius:radius-acct
--------------------------------


 ☆☆☆☆☆ Radiusクライアント側(catalyst3750)の設定 ☆☆☆☆☆

次はRadiusクライアント、すなわちcatalyst3750の設定です。

(今回はL3SWを使用しているが、例えば無線APをおいてRadiusで接続認証するときなどにも使用でき、その場合は無線APがRadiusクライアントとなる。 )

IOSの世代が12.台だったので結構古いと思われる。

 

Switch(config)# aaa new-model

Switch(config)# aaa authentication login default group radius

Switch(config) # radius-server host 192.168.11.14 auth-port 1812 acct-port 1813 key Cisco123

 

三つ目のkey Cisco123の部分を上記のclients.confの☆1で書いたように、secret値のCisco123の共有鍵に合わせる必要がある。

 

-----------------------------------------------------------------------------------

さて、ここまで設定して、PCから実際にL3SWへの認証を試みたが。。。。

エラーとなってしまった。。。。

メッセージは下記の通り。現在、解析中。

 

  □calatalystのdebug;

 %RADIUS-4-RADIUS_DEAD: RADIUS server 192.168.11.14:1812,1813 is not responding.

 %RADIUS-4-RADIUS_ALIVE: RADIUS server 192.168.11.14:1812,1813 has returned.

 

 □ubuntutcpdump;

 04:44:42.975922 IP 192.168.11.100.datametrics > 192.168.11.14.radius: RADIUS, Access Request (1), id: 0x09 length: 79
 04:44:42.975960 IP 192.168.11.14 > 192.168.11.100: ICMP 192.168.11.14 udp port radius unreachable, length 115

 

 

Access Requestはubuntuまで届いているようだが、ポートまで到達できていないみたい。

iptablesの設定不備かなぁ。。。。誰かわかったら教えてください(泣)