CentOS7+FreeRADIUS+Catalystで、IEEE802.1x認証を実装してみた
有線/無線LANでユーザ認証をする方法として、IEEE802.1x認証が広く利用されています。
無線LANの設定画面に出てくる「WPA2エンタープライズモード」などが、これにあたります。
家庭用の無線LANであれば、事前に1種類のパスワードを設定しておく「WPA2パーソナルモード」(Pre-Shared Key認証)などで十分ですが、企業の事務所などで多数のユーザが有線/無線LANを共用する場合は、個人別に認証をした方がセキュリティが強固になります。
radiusサーバを使う案件に参加する機会があったのですが、自分は体制的にradius構築に関わることができなかったので、それなら自宅で試してみようと思ったわけです。
今回は、CentOS7によるradiusサーバとCisco Catalystスイッチを組み合わせて、IEEE802.1x認証の環境を自宅ラボに構築してみた話を、備忘録として記事にしました。
目次
- IEEE802.1x/radiusとは?
- 今回の構成
- CentOS7に、FreeRADIUSインストール
- Cisco Catalyst L2スイッチの設定
- クライアント端末(Windows10)の設定
- 動作確認
- まとめ
IEEE802.1x/radiusとは?
IEEE802.1xは、有線/無線LANにおけるユーザ認証の規格です。
元々は有線LANのユーザ認証を想定して作られた規格ですが、無線LANが誕生した当初はセキュリティが不十分であったことから、無線LANにも広く適用されるようになり、現在に至ります。
IEEE802.1xは、以下の3種類の装置で構成されます。
- サプリカント
クライアント側の認証ソフトです。ユーザが使う端末がこれにあたります。 - オーセンティケータ
サプリカントと認証サーバを仲介するスイッチです。ユーザの端末が接続するLANスイッチや、無線アクセスポイントがこれになります。 - 認証サーバ
実際に認証を行うサーバです。radius(らでぃうす)プロトコルを使用します。
こんな感じで認証が行われます。(Wikipediaより引用)
今回の構成
今回は、以下のような構成でシステムを作りました。(超ざっくり)
ユーザの端末と認証サーバは別セグメントにあり、FWでルーティングしています。
FWが、ユーザ向けにIPアドレスを払い出すDHCPサーバを兼ねている構成です。
(FWの細かい設定は、今回のお話とは関係ないので割愛)
自宅の無線アクセスポイントがradius非対応なので、代わりにCisco製スイッチのCatalyst2960に有線LAN接続して、実験してみます。
CentOS7に、FreeRADIUSインストール
それでは、無料で使えるオープンソースのradiusサーバソフト「FreeRADIUS」を、CentOS7に入れていきます。
- サーバにログインして、rootユーザになります。
$ su -
- yumでインストール。
# yum install freeradius freeradius-utils
- 設定ファイルを編集。
# vi /etc/raddb/radiusd.conf
以下の部分を変更。
auth = yes auth_badpass = yes auth_goodpass = yes
authは、認証時のログ出力設定。
auth_badpassは、認証失敗時にログ出力。
auth_goodpassは、認証成功時にログ出力。 - 接続を許可するネットワークを設定。
# vi /etc/raddb/clients.conf
以下を追記。
client localnet1 { ipaddr = 172.16.1.0/24 secret = SECRET }
ipaddrは、radiusサーバへの接続を許可するセグメントを設定。
secretは、L2スイッチとの接続に使うパスワードを指定。あとで同じ値をL2スイッチに設定します。 - ユーザとパスワードを設定。
# vi /etc/raddb/users
認証で使うユーザとパスワードを追記。
(▲▲▲▲にユーザ名、●●●●にパスワードを指定)▲▲▲▲ Cleartext-Password := "●●●●"
- firewalldで、radiusが使うUDP1812番、1813番を開放。
# firewall-cmd --add-port=1812/udp --zone=public --permanent # firewall-cmd --add-port=1813/udp --zone=public --permanent # firewall-cmd --reload
- SELinuxは無効化しておきます。
# vi /etc/selinux/config
以下になっていることを確認。なっていなければ変更して、サーバを再起動して適用します。
SELINUX=disabled
- FreeRADIUSを起動して、自動起動設定。
# systemctl start radiusd # systemctl enable radiusd
Cisco Catalyst L2スイッチの設定
次に、L2スイッチ側の設定をしていきます。
- コンフィギュレーションモードに変更。
# configure terminal (config)#
- AAA(Authentication、Authorization、Accounting)の有効化。
(config)# aaa new-model
- 認証サーバのIPアドレスを設定。
keyは、radiusサーバで設定したパスワードを指定。(config)# radius server aiyabushi-auth01 (config-radius-server)# address ipv4 172.16.1.117 auth-port 1812 acct-port 1813 (config-radius-server)# key SECRET (config-radius-server)# exit (config)#
- 認証サーバグループの設定。
(config)# aaa group server radius group-radius (config-sg-radius)# server name aiyabushi-auth01 (config-sg-radius)# exit (config)#
- IEEE802.1x認証リストの設定。
(config)# aaa authentication dot1x default group group-radius (config)# aaa authorization network default group group-radius
- 認証をグローバルで有効化。
(config)# dot1x system-auth-control
- 対象のポートをアクセスモードにして、認証を有効化させる。
(config)# interface FastEthernet 0/2 (config-if)# switchport mode access (config-if)# switchport access vlan 20 (config-if)# spanning-tree portfast (config-if)# authentication port-control auto (config-if)# exit (config)#
access vlanには、このポートのVLAN番号を指定。
また、このポートには端末を直接接続するので、portfastも有効化。
(ルータやスイッチなど、ループの可能性がある場合は、portfastは無効化しておく) - 設定をスタートアップコンフィグに保存。
(config)# exit # write Building configuration... [OK] #
クライアント端末(Windows10)の設定
これでサーバとスイッチ側の準備ができました。
最後に、ユーザが使用するパソコンの設定を行います。
- 有線LANでIEEE802.1x認証を行う場合は、あらかじめスタートメニュー⇒「Windows管理ツール」⇒「サービス」で、Wired AutoConfigを起動させておきます。
(これが無効だと、有線LANポートのプロパティで「認証」タブが出てきません)
スタートアップの種類を「自動」にして、自動起動にしておくのが良いです。
- 「コントロールパネル」⇒「ネットワークと共有センター」⇒「アダプターの設定の変更」で、対象の有線LANポートのプロパティを開く。
- 「認証」タブをクリックして、「IEEE 802.1X認証を有効にする」をチェック。
ネットワークの認証方法は「Microsoft: 保護された EAP (PEAP)」にして、設定ボタンをクリック。
- 「証明書を検証してサーバーのIDを検証する」のチェックは外す。
認証方法は「セキュリティで保護されたパスワード (EAP-MSCHAP v2)」にして、構成ボタンをクリック。
- 「Windowsのログオン名とパスワードを自動的に使う」のチェックは外して、OKをクリック。
- そのままOKをクリックして、画面を閉じる。
- イーサネットのプロパティ画面で、追加の設定ボタンをクリック。
- 「認証モードを指定する」をチェックして、プルダウンから「ユーザー認証」を選び、資格情報の保存ボタンをクリック。
- radiusサーバで設定したユーザ名とパスワードを設定して、OKボタンをクリック。
- OKボタンを押して行って、設定画面を閉じれば、完了です。
動作確認
全ての準備が出来たので、さっそく試してみましょう!
LANケーブルをスイッチに接続すると、認証が始まります。
もしユーザ名とパスワードが合っていれば、そのまま認証が済みます。
このタイミングでネットワークと通信できるようになるので、DHCPサーバからIPアドレスが端末に払い出されて、ネットが使用できるようになります。
パスワードを間違えていたりしたら、認証が失敗します。
これで、無事に動作確認できました!
radiusサーバの方にも、ログが出力されているはずです。
# cat /var/log/radius/radius.log
Thu Aug 16 01:11:33 2018 : Auth: (0) Login OK: [xxxxxx/xxxxxx] (from client localnet1 port 0) Thu Aug 16 01:11:43 2018 : Auth: (1) Login incorrect (pap: Cleartext password "xxxxxx" does not match "known good" password): [xxxxxx/xxxxxx] (from client localnet1 port 0)
まとめ
以上で、radiusによるIEEE802.1x認証を実現できました。
実際にこれを運用する場合は、ユーザアカウントの管理方法などいろいろ工夫が必要です。ActiveDirectoryなどと連携して一元管理する場合が多いようです。
とりあえず今回は、動くことが確認できたので、良しとしておきます。