FreeRadiusによる無線LAN端末のMACアドレスフィルタリング (DB連携版)
-
Author: uncho
前回の投稿「FreeRadiusによる無線LAN端末のMACアドレスフィルタリング」では、接続承認する端末のMACアドレスをローカルのテキストファイルに書いていたが、今度は管理しやすい様にDBへMACアドレス登録して、FreeRadiusにはそのDBを参照させる様にしたいと思う。
検証環境は下記の通り。
- OS:Fedora15
- 認証サーバ:Radius (freeradius-2.1.12-2)
- Database:MySQL (mysql-5.5.23-1)
- 無線AP:APPLE AirMac Extremeベースステーション MD031J/A
まずは必要なパッケージをインストールします。
yum install mysql-server freeradius-mysql
MACアドレスを格納するDBのテーブルを作成します。作成するSQL文は下記の通り。下記内容をファイルに保存してmysqlに読み込ませます。
CREATE DATABASE radius;
CREATE USER 'radius'@'localhost';
SET PASSWORD FOR 'radius'@'localhost' = PASSWORD('radpass');
GRANT SELECT ON radius.* TO 'radius'@'localhost';
use radius;
CREATE TABLE mactable (
id int(11) NOT NULL auto_increment,
macaddr char(17) NOT NULL default '',
device varchar(64) default '',
modified_date timestamp default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE (macaddr)
) ;
mysqlへ読み込ませるには、
mysql -u root -p < dbcreate.sql
DB「radius」のテーブル「mactable」へ接続を許可するMACアドレスを登録します。登録するMACアドレスのフォーマットは英字は小文字であること。またセパレート記号はハイフン「−」であること。
mysql -u root -p
use radius;
insert into mactable values (null, "xx-xx-xx-xx-xx-xx", "iPhone", null);
なお、登録内容を間違った場合は「update」文で修正する。
update mactable set macaddr = "yy-yy-yy-yy-yy-yy" where id = 1;
登録内容の確認方法は、
select * from mactable;
DBに登録されたMACアドレスと接続してきた端末のMACアドレスを比較し、接続可否を決定する処理を前回作成した「/etc/raddb/sites-available/wireless」の「authorize」セクションへ追加/修正する。追記箇所は下記赤字のところ。「reject」の下にある「sql」だが、認証処理はこの環境では「ldap」を使っており「sql」は本来必要は無いのだが、コレがないとif文にあるSQLが実行されないので仕方なく実行されることがない「reject」直下のこの場所へ追加した。
authorize {
rewrite.calling_station_id
if("%{sql:SELECT COUNT(*) FROM `mactable` WHERE macaddr = '%{Calling-Station-Id}'}" == 0) {
reject
sql
}
mschap
eap
ldap
}
最後にmysqlへの接続設定が書かれている「raddb/sql.conf」をRadiusが読み込む様に、「raddb/radius.conf」の下記箇所のコメントを外す。なお、DB作成時にユーザID/パスワード等を変えた場合は「raddb/sql.conf」内の修正も必要となる。
$INCLUDE sql.conf
これですべての準備が整ったのでFreeRadiusをデバックモード「radiusd -X」で起動すると登録した機器だけ接続できることが確認できます。
参考サイト:
- http://wiki.freeradius.org/Mac-Auth
- http://wiki.freeradius.org/Rlm_sql#SQL-xlat
- http://www.nognog.com/techmemo/FreeRADIUS_MySQL_HOWTO.php