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とは?

IEEE802.1xは、有線/無線LANにおけるユーザ認証の規格です。
元々は有線LANのユーザ認証を想定して作られた規格ですが、無線LANが誕生した当初はセキュリティが不十分であったことから、無線LANにも広く適用されるようになり、現在に至ります。

IEEE802.1xは、以下の3種類の装置で構成されます。

  • サプリカント
    クライアント側の認証ソフトです。ユーザが使う端末がこれにあたります。
  • オーセンティケータ
    サプリカントと認証サーバを仲介するスイッチです。ユーザの端末が接続するLANスイッチや、無線アクセスポイントがこれになります。
  • 認証サーバ
    実際に認証を行うサーバです。radius(らでぃうす)プロトコルを使用します。

こんな感じで認証が行われます。(Wikipediaより引用)

IEEE802.1x認証

今回の構成

今回は、以下のような構成でシステムを作りました。(超ざっくり)

ネットワーク構成

ユーザの端末と認証サーバは別セグメントにあり、FWでルーティングしています。
FWが、ユーザ向けにIPアドレスを払い出すDHCPサーバを兼ねている構成です。
(FWの細かい設定は、今回のお話とは関係ないので割愛)

自宅の無線アクセスポイントがradius非対応なので、代わりにCisco製スイッチのCatalyst2960に有線LAN接続して、実験してみます。

CentOS7に、FreeRADIUSインストール

それでは、無料で使えるオープンソースのradiusサーバソフト「FreeRADIUS」を、CentOS7に入れていきます。

  1. サーバにログインして、rootユーザになります。
    $ su -
  2. yumでインストール。
    # yum install freeradius freeradius-utils
  3. 設定ファイルを編集。
    # vi /etc/raddb/radiusd.conf

    以下の部分を変更。

    auth = yes
    auth_badpass = yes
    auth_goodpass = yes

    authは、認証時のログ出力設定。
    auth_badpassは、認証失敗時にログ出力。
    auth_goodpassは、認証成功時にログ出力。

  4. 接続を許可するネットワークを設定。
    # vi /etc/raddb/clients.conf

    以下を追記。

    client localnet1 {
      ipaddr = 172.16.1.0/24
      secret = SECRET
    }

    ipaddrは、radiusサーバへの接続を許可するセグメントを設定。
    secretは、L2スイッチとの接続に使うパスワードを指定。あとで同じ値をL2スイッチに設定します。

  5.  ユーザとパスワードを設定。
    # vi /etc/raddb/users

    認証で使うユーザとパスワードを追記。
    (▲▲▲▲にユーザ名、●●●●にパスワードを指定)

    ▲▲▲▲ Cleartext-Password := "●●●●"
  6. 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
  7. SELinuxは無効化しておきます。
    # vi /etc/selinux/config

    以下になっていることを確認。なっていなければ変更して、サーバを再起動して適用します。

    SELINUX=disabled
  8. FreeRADIUSを起動して、自動起動設定。
    # systemctl start radiusd
    # systemctl enable radiusd

Cisco Catalyst L2スイッチの設定

次に、L2スイッチ側の設定をしていきます。

  1. コンフィギュレーションモードに変更。
    # configure terminal
    (config)#
  2. AAA(Authentication、Authorization、Accounting)の有効化。
    (config)# aaa new-model
  3. 認証サーバの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)#
  4. 認証サーバグループの設定。
    (config)# aaa group server radius group-radius
    (config-sg-radius)# server name aiyabushi-auth01
    (config-sg-radius)# exit
    (config)#
  5. IEEE802.1x認証リストの設定。
    (config)# aaa authentication dot1x default group group-radius
    (config)# aaa authorization network default group group-radius
  6.  認証をグローバルで有効化。
    (config)# dot1x system-auth-control
  7. 対象のポートをアクセスモードにして、認証を有効化させる。
    (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は無効化しておく)

  8. 設定をスタートアップコンフィグに保存。
    (config)# exit
    # write
    Building configuration...
    [OK]
    #

クライアント端末(Windows10)の設定

これでサーバとスイッチ側の準備ができました。
最後に、ユーザが使用するパソコンの設定を行います。

  1. 有線LANでIEEE802.1x認証を行う場合は、あらかじめスタートメニュー⇒「Windows管理ツール」⇒「サービス」で、Wired AutoConfigを起動させておきます。
    (これが無効だと、有線LANポートのプロパティで「認証」タブが出てきません)
    スタートアップの種類を「自動」にして、自動起動にしておくのが良いです。
    WiredAutoConfig
  2. 「コントロールパネル」⇒「ネットワークと共有センター」⇒「アダプターの設定の変更」で、対象の有線LANポートのプロパティを開く。
  3. 「認証」タブをクリックして、「IEEE 802.1X認証を有効にする」をチェック。
    ネットワークの認証方法は「Microsoft: 保護された EAP (PEAP)」にして、設定ボタンをクリック。
    イーサネットのプロパティ
  4. 「証明書を検証してサーバーのIDを検証する」のチェックは外す。
    認証方法は「セキュリティで保護されたパスワード (EAP-MSCHAP v2)」にして、構成ボタンをクリック。
    保護されたEAPのプロパティ
  5. 「Windowsのログオン名とパスワードを自動的に使う」のチェックは外して、OKをクリック。
    EAP MSCHAPv2のプロパティ
  6. そのままOKをクリックして、画面を閉じる。
  7. イーサネットのプロパティ画面で、追加の設定ボタンをクリック。
    イーサネットのプロパティ
  8. 「認証モードを指定する」をチェックして、プルダウンから「ユーザー認証」を選び、資格情報の保存ボタンをクリック。
    詳細設定
  9. radiusサーバで設定したユーザ名とパスワードを設定して、OKボタンをクリック。
    Windowsセキュリティ 資格情報の保存
  10. 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などと連携して一元管理する場合が多いようです。
とりあえず今回は、動くことが確認できたので、良しとしておきます。

コメントを残す

メールアドレスが公開されることはありません。

関連記事