iptablesを使って特定のネットワークアプリケーションをブロックするLeverage OSS(1/2 ページ)

社員がこっそりIMでチャット――会社で許可していないのであれば、IT部門はそうしたトラフィックをブロックするように指示されるかもしれない。そんなとき、iptablesの知識は問題解決の道しるべとなってくれる。

» 2007年11月30日 05時00分 公開
[Sergio-Gonzalez-Duran,Open Tech Press]
SourceForge.JP Magazine

 多くの企業や組織が、社員などによるMSN Messengerなどのチャットプログラムの濫用という生産性にかかわる問題に直面している。そのためチャットプログラムを濫用するユーザーや単にそのようなプログラムが必要ではないユーザーに関してはその種のトラフィックをブロックするようにとの指令を受けるIT部門もある。プロキシサーバでMSN Messengerなどのアプリケーションをブロックすることも可能だが、MSN Messengerは数多くのバージョンが使用されているためプロキシサーバでブロックするのは困難であり、すり抜けてしまうクライアントも一部にあるかもしれない。そこでiptablesを使用すればMSN Messengerのトラフィックをより簡単にブロックすることができる。

 各バージョンのMessengerはそれぞれ異なるヘッダを含むネットワークパケットを送信するため、例えばSquidの場合であれば正規表現を使って URLを基準にアクセス制御を行ない、Linuxマシンを経由するパケットの中にgateway.dllやapplication/x-msn- messengerなどのMSN Messengerの接続と思われるような文字列が含まれていないかどうかを調べて、その種のパケットをブロックするようにSquidに指示する必要がある。

 iptablesでは3つのテーブルを使用してファイアウォールを通過するパケットの処理を行う。3つのテーブルというのはすなわち、パケットを改変するmangle、2つのネットワーク間(LANとインターネットの間など)のアドレス変換を行うnat、そしてパケットのフィルタリングを行うfilterだ。各テーブルには、パケットに対してファイアウォールの通過を許可/ブロック/ログ/リダイレクトするためのルールを記述することができるチェーンがある。オスカー・アンダーソン氏がiptablesチュートリアル1.2.2の中で、ファイアウォールを通過するパケットを最初に処理するのはmangleテーブルの中のPREROUTINGチェーンだと述べているので、ここでパケットのブロックを行うとよいだろう。

 MSN Messengerはサーバの1863ポートに接続する(そのほかのポートについてはインターネットサービス用のポートを参照のこと)。これを踏まえてiptablesファイアウォールの設定に少しルールを追加すればよい。

 まずファイルを作成して、ブロックしたいIPアドレスを記述する。具体的には一行に1つのアドレスを記述して、コメント行には行頭にシャープ(#)をつける(IPアドレスだけを羅列してコメントや空行はなくてもよいが、それでは分かりにくくなってしまうだろう)。

# MSN MessengerをブロックするIPアドレス

# ********************************

# 営業部 第2オフィス

192.168.100.10

# 経理部(全体)

192.168.100.23

192.168.100.24

192.168.100.25

# 製造部A棟

192.168.100.50


 このファイルには好きな名前をつけてよい。ここではip_msnとした。次に以下のようなコマンドを実行する。このコマンドはコメントと空行を削除して、iptablesのルールに追加するアドレスを列挙した一時ファイルを作成する。


grep -v "#" /your/path/ip_msn | sed -e '/^$/d' > /tmp/temp

 ここで、「grep -v」は#で開始していない行を出力する。sedは空行を削除して出力結果を一時ファイル「/tmp/temp」にリダイレクトしている。

 次に短いスクリプトを作成する(なお前記のコマンドもこのスクリプトに含めておくとよいだろう)。このスクリプトは前記の一時ファイルのアドレスをすべて読み取って、iptablesのルールを追加する。


grep -v "#" /your/path/ip_msn | sed -e '/^$/d' > /tmp/temp

while read IP ; do     /sbin/iptables -t mangle -A PREROUTING -s $IP -p tcp --dport 1863 -j REJECT done < /tmp/temp

 iptablesの-tオプションでmangleテーブルを、-AオプションでPREROUTINGチェーンを指定している。また-sオプションで送信元のIPアドレス、-pオプションでTCPパケット、――dportオプションで送信先ポート番号の1863を指定している。ネットワークパケットがこれらすべての基準を満たす場合には、-jオプションによってパケットはブロックされることになる。これらの行をiptablesの設定ファイルの適切な場所に追加すればよい。なおルールは上から下へ順に読まれるため、mangleテーブル用のこれらのルールをどの位置に記述するかは重要だ。例えばこれらのルールの直前にすべてのパケットを許可するというルールがある場合には、ここで新しく追加した部分のコードはマッチするかどうかも試されない。

       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ