iptablesでいこう(4.パケットをQUEUEする)

パケットを扱う自作スクリプトを作る

更新履歴
[ 2002.02.09 ] [ 2002.02.22 ]サンプルを移しました。 [ 2002.04.06 ]古い内容修正


パケットをユーザー空間に持ってきて、自分のプログラムでパケットを解析したり、アラートを発したりすることができる。IDS のようなことをさせるにはこの手法を用いることになる(開発元ではそのような使いかたを推奨していないことに注意)が、これは容易に楽しいものが作れて、工夫次第でかなりのことができる可能性があるだろう。


■ QUEUE ■

まず、iptables で QUEUE ターゲットを使用できるようにする。詳しくは iptables のマニュアルを読んでほしいが、QUEUE ターゲットというのが、パケットをカーネルから借りてきてユーザー空間で扱えるようにするターゲットである。このためには ip_queue モジュールを利用可にしなくてはならない。カーネルでサポートしていなければ再構築する。


■ 実際には ■

ユーザー空間で扱うっつーのは具体的にはどーゆーことなのよ、ったくもう!マニュアルや HOWTO にも具体的に書いてないし、だからわざわざあんたんとこに来たんだけど、まさか他とおんなじじゃねーだろーな、おい、どーなんだ!

と思ってる方がいたらスマン。あれ、なんでオレがあやまらにゃならんのだ。ちゃんと書きますよ。そーいうサイトですからねココ。

ということで、理屈は飛ばして具体例を書いときましょう。

最も簡単で万人向きなのは perlipq を使うやり方です。perlipq とは QUEUE されたパケットを扱うための perl モジュールで、サンプルスクリプトがついているので、このサンプルをテンプレートにして、簡単に自分で開発できます。もちろん これも C の API を呼んでいるわけなので、C で書けるヒトは C で書いてもよいのですが、ここでは perlipq をご紹介。


■ perlipq の導入■

perlipq は[ ここ ] から入手します。perl モジュールによくある
% perl Makefile.PL

% make

% make test (心配ならやる。やるなら添付の説明を読んでから)

# make install
という流れで導入できます。また、NetPacket という perl モジュールもあったほうがよいので、こいつも導入します。サンプルでも使用しています。 CPAN でも srpm でもなんでもいいので、とにかく導入しておきます。

大体これで準備完了です。
例:

iptables -INPUT -p tcp --dport 80 --tcp-flags ACK ACK -m --string string "test.html" -j QUEUE

とかいうことにしておきます。

さて、perlipq を展開したディレクトリにある dumper.pl passer.pl passer6.pl あたりが
サンプルです。 dumper.pl を使ってみましょう。NetPacket モジュールが必要です。
そのディレクトリで

perl dumper.pl

とします。そして、他のホストからブラウザとかで このホストの test.html 
(べつにファイルは無くてもよし)とかにアクセスすれば、パケットの中身が
標準出力にダンプされるはずです。QUEUEターゲットの使い方がなんとなくわ
かりましたか?



おそらく、QUEUEターゲットを使ってしたいことといえば、パケットにマッチした 場合のフックを作りたい、というのが大勢だと思いますが、 Nimda ホスト情報収集とか、ウィルスメールアラームとか、可動式フィルタとか、 簡単に実現できます。サンプルを公開してるので、テンプレート的に使ってみて ください。
■ しまケロ作成のサンプル ■

[ 不正リクエストのログ ](スナップショット)
[ ソース等 ]


トップページ