• このエントリーをはてなブックマークに追加

前回、LDAPと連携してPEAPによるRadius認証システムを構築したが、次は「認証」のみでなく、特定の端末MACアドレスのみに接続を許可する「MACアドレスフィルタリング」処理も実施したいと思う。

端末のMACアドレスをチェックして、接続の承認/不承認をすることを俗にMACアドレスフィルタリングと呼ぶが、大抵のアクセスポイント(AP)にはこの機能が搭載され簡易的な端末認証として利用されている。通常はこれを使えば良いが、複数のAPを運用している場合はAPごとにMACアドレスを登録することとなり不便である為、Radiusでサプリカント機器のMACアドレスを識別し接続可否を判断させたいと思う。これが出来れば、接続を許可するMACアドレスを一箇所で登録/管理できるので運用上都合が良い。

以下、FreeRadiusでMACアドレスフィルタリングを行うための設定を記載する。前回構築したRadiusサーバに設定追加する流れとなる為、全体の設定を知りたい場合は「認証方式PEAPを使用した無線LAN環境構築」も参照のこと。なお検証に使った環境は下記の通り。

まずは接続を許可(承認)するMACアドレスが記載されたファイル「raddb/authorized_macs」を作成する。

xx-xx-xx-xx-xx-xx
yy-yy-yy-yy-yy-yy
   Reply-Message = "Device with MAC Address %{Calling-Station-Id} authorized for network access"

次はこのMACアドレスリストが記載されたファイルをFreeRadiusに読ませるために、「raddb/modules/files」に下記を追加する。

files authorized_macs {
     key = "%{Calling-Station-Id}"

     usersfile = ${confdir}/authorized_macs
     compat = no
}

これでFreeRadiusはサプリカントからのリクエストにある「Calling-Station-Id」がMACアドレスリストへ登録されているかを評価することが出来るようになる。

次にこの評価結果によって、接続の許可/不許可を決定する分岐処理を前回作成した「raddb/sites-available/wireless」のauthorizeセクションに追加する。(赤字箇所)

authorize {
     rewrite.calling_station_id
     authorized_macs
     if(!ok) {
          reject
     }
     mschap
     eap {
          ok = return
     }
}

上記追加場所の説明をすると、

  1. 「rewrite.calling_station_id」で、サプリカントからのリクエストにある「Calling-Station-Id」のMACアドレス文字列のフォーマットを整形(フォーマット統一)
  2. 「authorized_macs」にて、上記1で整形された「Calling-Station-Id」がMACアドレスリスト(authorized_macsファイル)に記載されているかチェック
  3. 「authorized_macs」のチェック結果を基にif文にて条件分岐させ、リストに無いMACアドレスの場合はRejectする

なお、「rewrite.calling_station_id」の処理は「raddb/policy.conf」で定義されているので一度目を通しておくと良いだろう。

参考サイト:http://wiki.freeradius.org/Mac-Auth

  • このエントリーをはてなブックマークに追加