11.27. ULOGターゲット

ULOG ターゲットは、マッチしたパケットについて、ユーザ空間でのロギングを提供してくれる。パケットがマッチした時、ULOG ターゲットがセットされていると、パケットの情報がパケットそのものと一緒にネットリンクソケットを通じてマルチキャストされる。ユーザ空間のプロセスをいくつでも、いずれかのマルチキャストグループに参加させておけば、それらのパケットを受け取ることができるわけだ。言うなれば、これは iptablesNetfilter だからこそ可能な、より完全で洗練されたロギング機能であり、パケットのログを採ることに関して遙かに優れた機能を備えている。このターゲットを利用すれば、 MySQL をはじめとする様々なデータベースに情報をログすることも可能で、特定のパケットについての検索や、ログのグループ化も朝飯前となる。 ULOGD project page に行けば、 ULOG のユーザ空間アプリケーションも用意されている。

Table 11-21. ULOGターゲットオプション

オプション--ulog-nlgroup
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-nlgroup 2
説明--ulog-nlgroup オプションは、パケットをどのネットリンクグループに送るかを ULOG ターゲットに指示する。ネットリンクグループは 32 あり、単純に 1 から 32 で指定する。ネットリンクグループ 32 へ伝達したいとすれば、単純に --ulog-nlgroup 32 と書けばよい。デフォルトで使われるネットリンクグループは 1 である。
オプション--ulog-prefix
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-prefix "SSH connection attempt: "
説明--ulog-prefix オプションは、ちょうど通常の LOG ターゲットの接頭辞と同じように働く。このオプションにより、すべてのログエントリに、指定したログ接頭辞が付加される。接頭辞の長さは 32文字までで、内容や出所によってログを見分けるのに大変役に立つ。
オプション--ulog-cprange
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-cprange 100
説明--ulog-cprangeULOG ターゲットに対して、パケットのうち何バイトをユーザ空間の ULOG デーモンに送るかを決める。上記のように 100 を指定すると、パケット全体のうちから 100バイトがユーザ空間にコピーされる。そこには、うまくすればヘッダのすべてと、実際のパケットの冒頭のいくらかが含まれているだろう。 0 を指定した場合には、パケットのサイズに関わらず、パケットの頭から終わりまで全部がユーザ空間にコピーされる。デフォルト値は 0 つまりパケット全部だ。
オプション--ulog-qthreshold
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-qthreshold 10
説明--ulog-qthresholdULOG ターゲットに対して、実際にユーザ空間へデータを送るまでに、いくつのパケットをカーネル内でキューイングするかを指示する。例えば上記のように、しきい値 (threshold) を 10 にすると、カーネルは 10個のパケットを蓄積してから、それらをひとつのネットリンク・マルチパートメッセージとしてユーザ空間へ送る。下位互換性の理由からデフォルト値は 1 となっている。以前のユーザ空間のデーモンはマルチパートメッセージが扱えなかった。

Note

Linux カーネル 2.3, 2.4, 2.5, 2.6 で機能する。