2
11
2025
ArubaのAPを用いて認証VLANを実装してみる#2(RADIUSサーバとの連携)
認証サーバと連携させてみる
前回の記事では、Aruba APをAruba Instant On サービスで集中管理することによって比較的容易に無線LANシステムを構築可能なことを説明したが、今回は無線LANシステムのセキュリティーを高めるために、RADIUSサーバやLDAPサーバと連携させることによってユーザ認証ベースの無線LANシステムを構築することにする.
ArubaのInstant Onシリーズは専任の情報部門が無いような比較的小規模な会社や組織での利用を想定しているが、業務用のネットワークを構築するために必要な機能は一通り備わっている.業務用のネットワークシステムでは接続可能なデバイスや人間を限定する必要があり、誰が何時どこで何を行ったかということが悪実に掌握できていなければならない.
業務用のネットワークでは、AAA(Authentication:認証, Authorization:認可, Accounting)という基本概念があり、ネットワークスイッチや無線LANのシステムには、このAAAの機能が備わっている.認証によりユーザやデバイスのアイデンティティの正当性を確認した後、そのユーザやデバイスがアクセス可能な範囲や権限を決定する認可を行う.Accountingは日本語では適切な用語がないが、ユーザやデバイスの情報、接続先の情報や時間、リソースの使用量などの情報を取得し記録するという意味で捉えると良いだろう.
このAAAを実現するために業務用ネットワークシステムで古くから利用されているのがRADIUS(Remote Authentication Dial In User Service)サーバで、現在でもネットワークのAAAを司る重要なシステムとして多くの企業や組織で利用されている.ArubaのInstant OnシリーズでもこのRADIUSサーバと連携させることでAAAの機能を実現することができる.
RADIUSはネットワークプロトコルの一種で、かつてのモデムなどによるダイアルアップ接続やISPを利用する際にユーザの認証を行うプロトコルとして今でも使われている.最近のインターネット接続はPPPoEからIPoE方式へと接続方式が変わってしまったので、エンドユーザがIDとパスワードで認証を行う場面は減ってしまったが、RADIUSがネットワークの裏方として重要な役割を担っていることには変わりは無い.
大学や研究機関などに所属している場合は、キャンパス内の無線LANシステムのSSIDに “eduroam” という名前を見かけたことがあるのではないかと思う.この “eduroam” は世界中の大学や研究機関にまたがって展開されているネットワークローミングシステムで、このシステムのバックボーンでは “RADIUS” プロトコルが使われている.
RADIUSプロトコルの存在を一般の人が意識することはないが、会社や組織のネットワーク、インターネットを支えている大変重要なプロトコルであることに留意しておいて欲しい.
大規模な企業や組織では既に何らかのRADIUSサーバが稼働している筈なので、自前のRADIUSサーバを一から構築することはないだろうが、一人情シスさんが活躍するような小さな企業や組織の場合、先ずこのRADIUSサーバの構築から始めなければならないかもしれない.
RADIUSサーバ単独でもArubaのInstant Onでは認証VLANを実装可能であるが、ユーザの情報をRADIUSサーバで管理運用するのは使い勝手が悪いので、ユーザの情報はLDAPサーバ側で管理することとし、RADIUSサーバではユーザの情報はLDAPサーバと連携させるようにすると、ネットワーク機器の管理をRadius、ユーザの管理はLDAPとなりネットワーク運用の利便性が向上する.
FreeRADIUSサーバの構築
RADIUSサーバを構築する方法としては、市販のハードウェア一体型のアプライアンス製品を利用する方法が最も手っ取り早いのだが、何せ機器が高額な上に利用するユーザ数に応じたライセンス料が必要な場合が多いので、これらの機器を導入するのは敷居が高過ぎてあまり現実的ではない.幸いなことに、RADIUSサーバにはオープンソースベースのFreeRADIUSというディストリビューションがあり、世界で一番使われているRADIUSサーバとしてデファクトスタンダード的な位置付けの物だ.
オープンソースベースなのでユーザが自由にカスタマイズして利用することができる.オープンソースでは導入に不安があるというのであればNetwork RADIUSという会社から商用のサポートを受けることが可能なので、RADIUSサーバの選択肢としてはこのFreeRADIUSが一番の選択肢となるだろう.勿論、FreeRADIUSには、コミュニティーサポートのページがあるので、コミュニティーチームからの情報提供も受けられるだろう.
FreeRADIUSの現在の最新安定版のバージョンは V3.2.x で、メジャーなLinuxディストリビューション(Ubuntu, Debian, RockyLinux, RHEL, CentOS)であればにバイナリパッケージの形で提供されている.勿論、ソースコードでも提供されているので、自分でソースコードから自分でコンパイルして利用することも可能だ.
今回は、RockyLinux9用のバイナリパッケージを利用することにする.バイナリパッケージを利用した導入手順のページに従って進めて行けば簡単にインストールできるだろう.
[ NetworkRADIUS社のパブリックPGPキーをインストールする ]
rpm --import 'https://packages.networkradius.com/pgp/packages%40networkradius.com'
[ NetworkRADIUS社のリポジトリ情報を登録 ]
cat <<'__EOF__' >/etc/yum.repos.d/networkradius.repo
[networkradius]
name=NetworkRADIUS-$releasever
baseurl=http://packages.networkradius.com/freeradius-3.2/rocky/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://packages.networkradius.com/pgp/packages%40networkradius.com
__EOF__
[ yum関連のユーティリティーとCRBリポジトリを追加 ]
yum install yum-utils
yum config-manager --enable crb
[ FreeRADIUSをインストール ]
yum install freeradius
[ RADIUS関連のユーティリティーツールをインストール]
dnf install freeradius-utils
[ FreeRADIUSのオプションパッケージをインストール(KRB5, LDAP)]
yum install freeradius-krb5
yum install freeradius-ldap
Rocky Linux9.5上にバイナリパッケージを利用してFreeRADIUS V3.2をインストールする手順
上記のインストール作業が無事終了すると、’/etc/raddb/’ ディレクトリ配下に FreeRADIUSの一連の設定ファイルが配置されているだろう.
[root@auth raddb]# ls -la
total 168
drwxr-xr-x 9 root radiusd 4096 Feb 11 19:00 .
drwxr-xr-x. 88 root root 8192 Feb 11 19:03 ..
drwxrwx--- 3 root radiusd 4096 Feb 11 19:01 certs
-rw-r----- 1 root radiusd 12103 Jan 31 21:36 clients.conf
-rw-r--r-- 1 root radiusd 1420 Jan 31 21:36 dictionary
lrwxrwxrwx 1 root radiusd 30 Jan 31 21:36 hints -> ./mods-config/preprocess/hints
lrwxrwxrwx 1 root radiusd 35 Jan 31 21:36 huntgroups -> ./mods-config/preprocess/huntgroups
drwxr-x--- 2 root radiusd 4096 Feb 11 19:00 mods-available
drwxr-x--- 10 root radiusd 140 Feb 11 19:00 mods-config
drwxr-x--- 2 root radiusd 4096 Feb 11 19:00 mods-enabled
-rw-r----- 1 root radiusd 52 Jan 31 21:36 panic.gdb
drwxr-x--- 2 root radiusd 4096 Feb 11 19:00 policy.d
-rw-r----- 1 root radiusd 30442 Jan 31 21:36 proxy.conf
-rw-r----- 1 root radiusd 40953 Jan 31 21:36 radiusd.conf
-rw-r----- 1 root radiusd 20754 Jan 31 21:36 README.rst
drwxr-x--- 2 root radiusd 4096 Feb 11 19:00 sites-available
drwxr-x--- 2 root radiusd 41 Feb 11 19:00 sites-enabled
-rw-r----- 1 root radiusd 3470 Jan 31 21:36 templates.conf
-rw-r----- 1 root radiusd 8536 Jan 31 21:36 trigger.conf
lrwxrwxrwx 1 root radiusd 29 Jan 31 21:36 users -> ./mods-config/files/authorize
[ 続く...(RadiusサーバとLDAPサーバの環境をProxmox環境で新たに構築することにしたので、一旦中断します) ]

とりあえず各種サーバ類を Proxmox 環境に移行した
FreeRADIUSサーバの設定ファイルは ‘etc/raddb’ 配下に置かれているが、FreeRADIUSの構成はとても複雑で様々な機能を内包しているのでFreeRADIUSの機能を説明することは難しい.今回はAruba APで認証VLANを実現するために関係する部分だけの説明に留めることにする.
‘etc/raddb’ 配下の関連ファイルをtreeコマンドでリスティングすると下記のようになっている.
[root@nsauth6 raddb]# tree
.
├── README.rst
├── certs
│ ├── Makefile
│ ├── README
│ ├── bootstrap
│ ├── ca.cnf
│ ├── client.cnf
│ ├── inner-server.cnf
│ ├── passwords.mk
│ ├── server.cnf
│ └── xpextensions
├── clients.conf <=== RADIUSサーバに認証を問い合わせるNW機器(NASクライアント)の設定
├── dictionary <=== RADIUS辞書
├── hints -> ./mods-config/preprocess/hints
├── huntgroups -> ./mods-config/preprocess/huntgroups
├── mods-available
│ ├── README.rst
│ ├── always
│ ├── attr_filter
│ ├── cache
│ ├── cache_eap
│ ├── chap
│ ├── counter
│ ├── cui
│ ├── date
│ ├── detail
│ ├── detail.example.com
│ ├── detail.log
│ ├── dhcp
│ ├── dhcp_sqlippool
│ ├── digest
│ ├── dynamic_clients
│ ├── eap <=== EAP関連の設定ファイル
│ ├── echo
│ ├── etc_group
│ ├── exec
│ ├── expiration
│ ├── expr
│ ├── files
│ ├── idn
│ ├── inner-eap
│ ├── ippool
│ ├── krb5
│ ├── ldap <=== LDAPによる認証を行うための設定ファイル
│ ├── linelog
│ ├── logintime
│ ├── mac2ip
│ ├── mac2vlan
│ ├── mschap <=== Microsoft CHAP 認証を行うための設定ファイル
│ ├── ntlm_auth
│ ├── opendirectory
│ ├── otp
│ ├── pam
│ ├── pap
│ ├── passwd
│ ├── preprocess
│ ├── python
│ ├── python3
│ ├── radutmp
│ ├── realm
│ ├── redis
│ ├── rediswho
│ ├── replicate
│ ├── smbpasswd
│ ├── smsotp
│ ├── soh
│ ├── sometimes
│ ├── sql
│ ├── sqlcounter
│ ├── sqlippool
│ ├── sradutmp
│ ├── unix
│ ├── unpack
│ ├── utf8
│ ├── wimax
│ └── yubikey
├── mods-config
│ ├── README.rst
│ ├── attr_filter
│ │ ├── access_challenge
│ │ ├── access_reject
│ │ ├── accounting_response
│ │ ├── post-proxy
│ │ └── pre-proxy
│ ├── files
│ │ ├── accounting
│ │ ├── authorize <=== ユーザの認証情報定義ファイル
│ │ └── pre-proxy
│ ├── preprocess
│ │ ├── hints
│ │ └── huntgroups
│ └── sql
│ ├── counter
│ ├── cui
│ ├── ippool
│ ├── ippool-dhcp
│ └── main
├── mods-enabled
│ ├── always -> ../mods-available/always
│ ├── attr_filter -> ../mods-available/attr_filter
│ ├── cache_eap -> ../mods-available/cache_eap
│ ├── chap -> ../mods-available/chap
│ ├── date -> ../mods-available/date
│ ├── detail -> ../mods-available/detail
│ ├── detail.log -> ../mods-available/detail.log
│ ├── digest -> ../mods-available/digest
│ ├── dynamic_clients -> ../mods-available/dynamic_clients
│ ├── eap -> ../mods-available/eap
│ ├── echo -> ../mods-available/echo
│ ├── exec -> ../mods-available/exec
│ ├── expiration -> ../mods-available/expiration
│ ├── expr -> ../mods-available/expr
│ ├── files -> ../mods-available/files
│ ├── linelog -> ../mods-available/linelog
│ ├── logintime -> ../mods-available/logintime
│ ├── mschap -> ../mods-available/mschap
│ ├── ntlm_auth -> ../mods-available/ntlm_auth
│ ├── pap -> ../mods-available/pap
│ ├── passwd -> ../mods-available/passwd
│ ├── preprocess -> ../mods-available/preprocess
│ ├── radutmp -> ../mods-available/radutmp
│ ├── realm -> ../mods-available/realm
│ ├── replicate -> ../mods-available/replicate
│ ├── soh -> ../mods-available/soh
│ ├── sradutmp -> ../mods-available/sradutmp
│ ├── unix -> ../mods-available/unix
│ ├── unpack -> ../mods-available/unpack
│ └── utf8 -> ../mods-available/utf8
├── panic.gdb
├── policy.d
│ ├── accounting
│ ├── canonicalization
│ ├── control
│ ├── cui
│ ├── debug
│ ├── dhcp
│ ├── eap
│ ├── filter
│ ├── operator-name
│ └── rfc7542
├── proxy.conf
├── radiusd.conf <=== FreeRADIUSのメイン設定ファイル
├── sites-available
│ ├── README
│ ├── buffered-sql
│ ├── challenge
│ ├── channel_bindings
│ ├── check-eap-tls
│ ├── coa
│ ├── coa-relay
│ ├── control-socket
│ ├── copy-acct-to-home-server
│ ├── decoupled-accounting
│ ├── default <===
│ ├── dhcp
│ ├── dhcp.relay
│ ├── dynamic-clients
│ ├── example
│ ├── inner-tunnel <=== EAP のトンネリング設定
│ ├── originate-coa
│ ├── proxy-inner-tunnel
│ ├── robust-proxy-accounting
│ ├── soh
│ ├── status
│ ├── tls
│ ├── virtual.example.com
│ └── vmps
├── sites-enabled
│ ├── default -> ../sites-available/default
│ └── inner-tunnel -> ../sites-available/inner-tunnel
├── templates.conf
├── trigger.conf
└── users -> ./mods-config/files/authorize
16 directories, 157 files
RADIUSサーバ単独での試験
今回の認証VLANではLDAPによるユーザ認証情報に基づいてユーザを収容するVLANをダイナミックに割り当てることにするが、RADIUSサーバをLDAPと連携させる前に、RADIUSサーバが正常に機能しているかどうか確認するため、先ずはRADIUSサーバ単独で認証VLANを構築してみる.
【 “/etc/raddb/radiusd.conf” 】
千数百行もあるFreeRADIUSのメイン設定ファイルだが、今回はログ関連の設定を一部変更するだけで他の部分には手を付けない.本番運用ではパラメータを見直してチューニングする必要があるが、今回は検証用なのでそのままデフォルトの値とする.
ログ関連の設定は310行目辺りから423行目辺りにあり、認証ログを取得する設定に変更する.
”auth = no” ===> “auth = yes”
”auth_badpass = no” ===> “auth_badpass = yes”
”auth_goodpass = no” ===> “auth_goodpass = yes”
【 “/etc/raddb/clients.conf” 】
RADIUSのクライアントとなる各種ネットワーク装置の情報を定義するファイルで、ここに記された各種ネットワーク機器の正当性をRADIUSサーバが確認するためのものだ.RADIUSサーバはここに記載されたネットワーク機器以外からのリクエストは拒否する必要がある.
デフォルトではRADIUSサーバ自身(localhost)しか受け付けない設定になっている.ここに認証を依頼するネットワーク機器のIPアドレスと秘密のキーワードを登録する.認証を受けるネットワーク機器が少ない場合は個々のネットワーク機器を登録するが、機器の数が多い場合はネットワークセグメント単位でクライアントを定義することも可能だ.
尚、localhostの秘密のキーワードは “testing123” となっているが、これは誰でも知っている暗黙のキーワードなので、初期の動作確認が終わったら秘密のキーワードは変更しておくか無効化することを忘れずに.
client xxx.yyy.zzz.0/24 {
secret = This#1sN0t@Amer1ca
shortname = admin
}
【 “/etc/raddb/users” 】
こちらはRADIUSサーバで認証されるユーザの情報をローカルに設定するファイルで、ここにユーザ情報を記載するとローカル認証を行うことができる.とりあえず簡単なテスト用のユーザIDとパスワードを記載して、RADIUSサーバの初期テストを行うことができる.
デフォルト状態でサンプル例がコメントに記載されているが、ファイルの末尾に次のようなテストアカウントを追記しておく.勿論このテスト用のアカウントは本番閑居では削除することを忘れずに.
rad-test001 Cleartext-Password := "Kikanaide4"
Reply-Message := "Welcome, %{User-Name}" <=== 認証成功時にメッセージを送出(おまけ)
とりあえず "radiusd.conf"と"users" の2つのファイルを設定したら、radtest ツールを用いてRADIUSサーバに対してusersに記載したテストアカウントで認証ができることを確認する.RADIUSサーバの起動オプションに -X を付けて、デバッグモードで起動する.RADIUSサーバの状態に関する詳細な大量のデバッグメッセージが出力され、認証待ち受けモードとなる.
[root@nsauth6 raddb]# radiusd -X <=== デバッグモードで起動
FreeRADIUS Version 3.0.21
Copyright (C) 1999-2019 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE
You may redistribute copies of FreeRADIUS under the terms of the
GNU General Public License
For more information about these matters, see the file named COPYRIGHT
Starting - reading configuration files ...
including dictionary file /usr/share/freeradius/dictionary
including dictionary file /usr/share/freeradius/dictionary.dhcp
including dictionary file /usr/share/freeradius/dictionary.vqp
including dictionary file /etc/raddb/dictionary
including configuration file /etc/raddb/radiusd.conf
including configuration file /etc/raddb/proxy.conf
including configuration file /etc/raddb/clients.conf
...
realm LOCAL {
}
radiusd: #### Loading Clients ####
client localhost {
ipaddr = 127.0.0.1
secret = <<< secret >>>
nas_type = "other"
proto = "*"
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
client localhost_ipv6 {
ipv6addr = ::1
secret = <<< secret >>>
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
Debugger not attached
# Creating Auth-Type = mschap
# Creating Auth-Type = digest
# Creating Auth-Type = eap
# Creating Auth-Type = PAP
# Creating Auth-Type = CHAP
# Creating Auth-Type = MS-CHAP
radiusd: #### Instantiating modules ####
modules {
# Loaded module rlm_always
# Loading module "reject" from file /etc/raddb/mods-enabled/always
always reject {
rcode = "reject"
simulcount = 0
mpp = no
}
...
radiusd: #### Opening IP addresses and Ports ####
listen {
type = "auth"
ipaddr = *
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
type = "acct"
ipaddr = *
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
type = "auth"
ipv6addr = ::
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
type = "acct"
ipv6addr = ::
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
type = "auth"
ipaddr = 127.0.0.1
port = 18120
}
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on proxy address * port 41221
Listening on proxy address :: port 45075
Ready to process requests
RADIUSサーバがデバッグモードで起動したところで、RADIUSサーバ上で別なターミナルを立ち上げRADIUSサーバにSSH等で接続する.この際のユーザアカウントは一般ユーザで構わない."radtest" ツールを用いて、コマンドラインからRADIUSサーバに対して接続テストを行う.認証方式として "PAP"、"CHAP"、"MSCHAP" の何れでも問題なく認証が通る(Accept)されることを確認する.
返答されたメッセージ中に、"Received Access-Accept" というメッセージが含まれていたら認証成功である.尚、認証失敗時は "Received Access-Reject" が返される.合い言葉を間違えるとRADIUSサーバはレスポンスを返さない.
radtestコマンドは、
radtest -t [ pap/chap/mschap ] <userid> <password> <RADIUS IP> <NAS Port Number> <Secret Keyword>
のようにパラメータを指定する.NAS Port Number はRADIUSサーバに送る属性値であるが、この接続テストでは使用しないので、0 〜 2^15 (32767) までの適当な整数値を与えておく.ここでは 0 を指定している.Secret KeywordはNASクライアントとRADIUSサーバ間で予め設定した秘密の合言葉である.
[yasuaki@nsauth6 ~]$ radtest -t pap rad-test001 Kikanaide4 localhost 0 testing123 <=== PAP認証
Sent Access-Request Id 63 from 0.0.0.0:38732 to 127.0.0.1:1812 length 81
User-Name = "rad-test001"
User-Password = "Kikanaide4"
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "Kikanaide4"
Received Access-Accept Id 63 from 127.0.0.1:1812 to 127.0.0.1:38732 length 60
Message-Authenticator = 0x0ff755f3e2b236e465800eec5444d99c
Reply-Message = "Welcome, rad-test001"
[yasuaki@nsauth6 ~]$
[yasuaki@nsauth6 ~]$ radtest -t chap rad-test001 Kikanaide4 localhost 0 testing123 <=== CHAP認証
Sent Access-Request Id 218 from 0.0.0.0:54487 to 127.0.0.1:1812 length 82
User-Name = "rad-test001"
CHAP-Password = 0xe0c066be176e356e5e421e9196ba462d49
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "Kikanaide4"
Received Access-Accept Id 218 from 127.0.0.1:1812 to 127.0.0.1:54487 length 60
Message-Authenticator = 0x8843dd69f1158453c1c02ab216444772
Reply-Message = "Welcome, rad-test001"
[yasuaki@nsauth6 ~]$ radtest -t mschap rad-test001 Kikanaide4 localhost 0 testing123 <=== MSCHAP認証
Sent Access-Request Id 239 from 0.0.0.0:45556 to 127.0.0.1:1812 length 137
User-Name = "rad-test001"
MS-CHAP-Password = "Kikanaide4"
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "Kikanaide4"
MS-CHAP-Challenge = 0x80270fdf45f09515
MS-CHAP-Response = 0x0001000000000000000000000000000000000000000000000000ae5e57b78b94836705f47621f5e6403995b9cafed76870a2
Received Access-Accept Id 239 from 127.0.0.1:1812 to 127.0.0.1:45556 length 124
Message-Authenticator = 0xf918de9b1892b059d41d0274bc27a1a7
Reply-Message = "Welcome, rad-test001"
MS-CHAP-MPPE-Keys = 0x000000000000000006806f77927c9d1123fca37ae6c9d3bf
MS-MPPE-Encryption-Policy = Encryption-Allowed
MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed
[yasuaki@nsauth6 ~]$
[yasuaki@nsauth6 ~]$ radtest -t chap rad-test001 BadPASS localhost 0 testing123 <=== パスワードを間違えた場合
Sent Access-Request Id 96 from 0.0.0.0:49955 to 127.0.0.1:1812 length 82
User-Name = "rad-test001"
CHAP-Password = 0x9d0aa2ae542c0163eead516b869a0d200c
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "BadPASS"
Received Access-Reject Id 96 from 127.0.0.1:1812 to 127.0.0.1:49955 length 60
Message-Authenticator = 0xba91a41506faac34943929ac1dc3ab4e
Reply-Message = "Welcome, rad-test001"
(0) -: Expected Access-Accept got Access-Reject
[yasuaki@nsauth6 ~]$ radtest -t chap rad-test001 Kikanaide4 localhost 0 bad-secret <=== 合い言葉を間違えた場合
Sent Access-Request Id 22 from 0.0.0.0:36903 to 127.0.0.1:1812 length 82
User-Name = "rad-test001"
CHAP-Password = 0x1e18fe1e32797231c7f2bd2ea1f4d63dcc
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "Kikanaide4"
Sent Access-Request Id 22 from 0.0.0.0:36903 to 127.0.0.1:1812 length 82
User-Name = "rad-test001"
CHAP-Password = 0x1e18fe1e32797231c7f2bd2ea1f4d63dcc
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "Kikanaide4"
Sent Access-Request Id 22 from 0.0.0.0:36903 to 127.0.0.1:1812 length 82
User-Name = "rad-test001"
CHAP-Password = 0x1e18fe1e32797231c7f2bd2ea1f4d63dcc
NAS-IP-Address = 172.25.100.6
NAS-Port = 0
Cleartext-Password = "Kikanaide4"
(0) No reply from server for ID 22 socket 3
【 "/etc/raddb/mods-available/mschap" 】
今回は、RADIUS認証プロトコルが使用する認証方式を MS-CHAP方式(Microsoftが独自に実装しているCHAP)を用いることにする.MS-CHAP方式のようなレガシーな認証方式よりももっとセキュアな方式が幾つもあるが、今回はWindowsやMac, Linuxなどのデフォルト環境で互換性の問題が発生しにくいMS-CHAP方式を選択することにした.
MS-CHAPの設定項目は結構あるが、今回はデフォルトの設定から次の3項目を修正した.この辺の設定項目はWindowsやMacなどの実装の違いによっても差が出てくるので、実際に試しながら設定項目の値を変更する必要があるかもしれない.
# -*- text -*-
#
# $Id: 18f600589b67177679b9521feb65b7fbb0200ac2 $
# Microsoft CHAP authentication
#
# This module supports MS-CHAP and MS-CHAPv2 authentication.
# It also enforces the SMB-Account-Ctrl attribute.
#
mschap {
#
# If you are using /etc/smbpasswd, see the 'passwd'
# module for an example of how to use /etc/smbpasswd
# if use_mppe is not set to no mschap will
# add MS-CHAP-MPPE-Keys for MS-CHAPv1 and
# MS-MPPE-Recv-Key/MS-MPPE-Send-Key for MS-CHAPv2
#
#================================================================#
# use_mppe = no
use_mppe = yes
#================================================================#
# if mppe is enabled require_encryption makes
# encryption moderate
#
# if mppe is enabled require_encryption makes
# encryption moderate
#
#================================================================#
# require_encryption = yes
require_encryption = yes
#================================================================#
# require_strong always requires 128 bit key
# encryption
#
#================================================================#
# require_strong = yes
require_strong = yes
#================================================================#
...
【 "/etc/raddb/mods-available/eap" 】
EAP認証方式(所謂802.1x認証)の定義ファイルで、EAP-TLSやEAP-TTLS、EAP-PEAPなどの複数のEAP認証方式をここで設定する.企業などではEAP-TLSなどの、サーバ側とクライアントの双方で証明書を検証する方式が一般的だが、もう少し簡易的なEAP-PEAPなどが使われることもある.EAP-PEAPではサーバ側の証明書だけでクライアント側はユーザのIDやパスワードで認証するので、運用の手間を省くことが可能だ.今回は、実装が簡単なEAP-PEAPを用いることにする.
EAP-PEAPの場合はサーバ証明書が必要になるが、FQDNがインターネットドメインであれば民間のサーバ証明書を導入する方法もあるが、企業などでは自己認証局を運用していて、サーバ証明書やクライアント証明書を独自に発行していることが多いだろう.自己認証局の場合、ユーザ側で自己認証局を信頼させるなどの面倒な手間が必要になるのが難点だ.
今回は家庭内での検証なので、簡易的な自己認証局による証明書(所謂オレオレ証明書)を使うことにする.
自己認証局によってPKI証明書を作成は結構複雑なので、『ArubaのAPを用いて認証VLANを実装してみる#3(自己認証証明書の作成)』で説明することにする.