Security Tips
 

未登録機器のイーサネット接続をブロック - ip-sentinel

りょうわあきら
2004/8/4

 不正な持ち込みPCを何とかして、検出や排除をできないか。LANのデファクトとなったイーサネットは、基本的に接続時の認証やアクセス制限ができないネットワークである。物理的な差込口にアクセスすれば、誰でも自由に通信できてしまう。DHCPなどで自動的なIPアドレス割り当てをしている場合はなおさらである。

 LANへの無断接続をなんとかブロックしたいという場合に、役に立つかもしれないツールがip-sentinelである。ip-sentinelは、MACアドレスをIPアドレスと対応させるプロトコルであるARPを巧みに用いることで、MACアドレスベースでネットワークにつながる機器の通信を制限するツールである。

 ip-sentinelがハブにつながる機器の通信を制限する仕組みは次のとおりである。

(1)不正ホストMがip-sentinelによって制限対象となっているIPアドレス「192.168.0.1」を使って、ネットワークに参加しようとする。

(2)既にネットワークに存在するホストA(192.168.0.2)がこのホストMと通信しようとすると、ホストAはARPリクエスト“who-has 192.168.0.1”を送出する。

(3)不正ホストMは“M is-at ...”というARP応答を送出し、自身のMACアドレスをAに通知する。

(4)この時、ip-sentinelは(2)におけるリクエストをチェックしており、不正ホストMの代わりにでたらめなMACアドレス「aa:aa:aa:aa:aa:aa」を使い、“M is-at aa:aa:aa:aa:aa:aa”を数回送出する。

ip-sentinelにより生成されるでたらめなMACアドレスは、既存アドレスと重複しないものが生成される。またMAC floodingにならないよう32個程度に抑えられるようになっている

(5)ホストAは両方の応答を受信し、そして最後に受信した応答を格納することになる。

(6)ip-sentinelのARP応答は不正ホストMの応答より遅れることになるので、ホストAはMのMACアドレスを「aa:aa:aa:aa:aa:aa」だと認識してしまう。このため不正ホストMは既存のホストAと通信を開始することができなくなる。

 実際には、最近のWindowsなどでは(6)の段階でアドレスの衝突を検出して、そのアドレスが利用できなくなるだろう。

ip-sentinelの仕組み

 ではip-sentinelの使い方を解説したい。ip-sentinelは次のサイトから入手できる。

ip-sentinel
http://www-user.tu-chemnitz.de/~ensc/ip-sentinel/

 ソースを展開してコンパイルする。

$ bzip2 -d -c ip-sentinel-0.9.tar.bz2 |tar xvf -
$ cd ip-sentinel-0.9
$ configure
...
$ make
...
$ make check
...
===================
All 14 tests passed
===================
...

 make checkでテストが正常に終わればコンパイルはうまくいっているはずだ。インストールするにはこのままmake installしてもよいが、checkinstallを使用してRPMパッケージ化してインストールすることもできる。また、同梱されているSPECファイルを使用してもいいだろう。

 make installした場合、実行ファイルは/usr/local/sbin/ip-sentinelとしてインストールされる。ip-sentinelはchrootに対応しているので、実行前に適当なユーザー/グループとディレクトリを作成し、その中に設定ファイルを作成しておく。例えば、ユーザー:ip-sentinal、グループ:ip-sentinel、ディレクトリ:/usr/local/ip-sentinalなどだ。

 特定のIP/MACアドレスを持つ機器以外からの接続を拒否する設定は次のようになる。

/usr/local/ip-sentinal/ips.cfg
0.0.0.0/0            # 基本的に全てのIPアドレスを拒否
10.0.0.10@!a:a:a:a:a:a      # IP:10.0.0.10かつMAC:a:a:a:a:a:aの機器を許可
10.0.0.{100,110}@!b:b:b:b:b:b  # IP:10.0.0.100または10.0.0.110で
                  MAC:a:a:a:a:a:aの機器を許可
10.0.0.{150-153}@!c:c:c:c:c:c  # IP:10.0.0.150-10.0.0.153で
                  MAC:c:c:c:c:c:cの機器を許可

 設定ファイルの記述方法の詳細は、ip-sentinalのmanページを参照してほしい。設定ファイルを作成後、次のようにip-sentinelを起動する。

# su
# /usr/local/sbin/ip-sentinel -u ip-sentinel -g ip-sentinel \
 -r /usr/local/ip-sentinel \
 -c /ips.cfg \
 -l /usr/local/ip-sentinel/ips.log \
 -e /usr/local/ip-sentinel/ips.err \
 --direction BOTH eth0
#

 正常に起動していれば、未登録端末のブロックが開始される。動作状況については、-lオプションで指定したログファイルに次のように記録される。

/usr/local/ip-sentinel/ips.log
1072554502.616087: (Re)reading blacklist.
1072554504.418484: 10.0.0.254/a:a:a:a:a:a -> 10.0.0.153/0:0:0:0:0:0 [de:ad:be:ef:0:ae]
1072554526.883050: 10.0.0.254/a:a:a:a:a:a -> 10.0.0.152/0:0:0:0:0:0 [de:ad:be:ef:0:ad]

 ブロック動作が確認でき、登録済み機器の通信状況に影響が出ていないことが確認できたら、起動スクリプトに登録するなどしておけばいい。ソースにはsysv-init用の起動スクリプトサンプルが付属しているので、それらを用いてもいい。

 なお、ip-sentinelはその性質上、誤った設定でネットワークに接続すると同一ブロードキャストセグメントにおいて大規模なネットワーク障害を発生させてしまう。実際に使用する前には入念なテストが必要なことはいうまでもない。また、ARPという仕組みを使用している以上、MACアドレス詐称を行った不正接続 についてまでは対応できない。本格的な接続制限を行いたい場合には、認証VLAN などの導入が必要だ。こうした仕組みを十分理解した上で有効活用していただき たい。

Security Tips Index



Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間