無線LANのEAP-PEAP認証で、ユーザ毎のMACアドレス制限も行う

会社で来客用および従業員の私物用に無線LANを開放(もちろん業務用のネットワークとは完全に分離している)していたら、監査から「悪用されたときに追跡調査ができるようにせよ」と指摘があった。

共有パスワード(PSK)からユーザ毎の個別パスワード(WPA2 Enterprise + EAP-PEAPなど)に変えるだけでは、ユーザが複数機器で同じパスワードを使いまわしたり、個別パスワードであることを理解せず他の人に教えてしまいかねない。

よってユーザ毎に個別のMACアドレスに限定するような認証システムをFreeRADIUSを用いて構築した。

FreeRADIUS設定

インストール

環境はUbuntu 20.04。aptでFreeRADIUSをインストール。

apt install freeradius

/etc/freeradius/3.0/mods-available/eap

EAP認証に使う内部仮想サーバ(inner-tunnel)に認証リクエストに含まれるMACアドレスなどの情報を渡すため、以下の設定を追加する。

eap {
  ...
  peap {
    ...
    copy_request_to_tunnel = yes
    ...
  }
  ...
}

/etc/freeradius/3.0/users

usersファイルには以下のようにコンマに続けてCalling-Station-Id ==でMACアドレスのフィルタリング条件を追加することで、 パスワードが一致し、かつ、MADアドレスが一致した場合に認証成功するように設定する。

username Cleartext-Password := "password", Calling-Station-Id == "1a-2b-3c-4d-5e-6f"

なお、MACアドレスのフォーマットを統一するために、authorizeセクションにrewrite_calling_station_idを追加するよう参考サイトには書いてあるのだが、 実際に入れたところエラーが発生して認証できなくなったため、そのままにしている。

Calling-Station-IdのMACアドレスのフォーマットはクライアント(スイッチ)によって異なるため、freeradius -Xで実際のリクエストを確認する。

参考