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

前回の投稿「FreeRadiusによる無線LAN端末のMACアドレスフィルタリング」では、接続承認する端末のMACアドレスをローカルのテキストファイルに書いていたが、今度は管理しやすい様にDBへMACアドレス登録して、FreeRadiusにはそのDBを参照させる様にしたいと思う。

検証環境は下記の通り。

まずは必要なパッケージをインストールします。

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」で起動すると登録した機器だけ接続できることが確認できます。

参考サイト:

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