ulogdで以ってiptablesのログを取得する

OS: Ubuntu Server 18.04 LTS
ulogd2 2.0.5-5

iptablesのログだけをひとところに集めて管理するならulogdが良さそうな様子であった。aptでシュッと入るのでたいへん楽ちんである。

$ sudo apt install ulogd2

デフォルトではふんだんにプラグインを読み込み、XMLで出力したりデータベースへ登録するなど有益な機能を提供する風情であるけれどもちょっと使い熟せそうにないので必要最小限の設定だけを残す。プラグインの設定はまず最初に plugin= の項目を記述してそのあと各々のプラグインの設定を書き記すという順番が肝要であった。順番を守らぬと決してulogdが起動しない。

$ sudo cp -av /etc/ulogd.conf /etc/ulogd.conf.orig
$ sudo vi /etc/ulogd.conf
[global]
logfile="/var/log/ulog/ulogd.log"
loglevel=3

plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_output_SYSLOG.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_raw2packet_BASE.so"

stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU 

[log1]
group=0 

[emu1]
file="/var/log/iptables.log"
sync=1

設定を終えたらulogdがいざこざ無く起動するか確認しておく。起動しなければ journalctl -xe コマンドの出力や設定ファイルで指定したulogdのログ /var/log/ulog/ulogd.log の内容を精査して設定を修正する。

$ sudo systemctl start ulogd.service
$ sudo systemctl status ulogd.service
 ulogd2.service - Netfilter Userspace Logging Daemon
(snip)
Sep 24 16:10:17 server systemd[1]: Started Netfilter Userspace Logging Daemon.

滞りなく起動すればあとはiptablesの設定をする。--nflog-groupはulogd.confで設定したgroupの番号を指定し、--nflog-thresholdではulogdが処理を開始するまでにキューへ溜め込むパケット数を2から50の間で指定する。ulogdのドキュメントには--nflog-qthresholdと記載されている箇所もあるけれどもiptablesへ持ち込むと unknown option "--nflog-qthreshold" と木で鼻を括ったような態度であるから書き損じではないかとおもう。

$ sudo iptables -A INPUT -j NFLOG --nflog-group 0 --nflog-prefix 'iptables:' --nflog-threshold 20
$ tail -f /var/log/iptables.log
Sep 24 16:21:08 ubuntu kernel: [346292.067933] iptables: IN=eth1 OUT= MAC=00:0c:29:61:28:2a:74:03:bd:7f:5b:83:08:00 SRC=91.189.92.20 DST=192.168.0.150 LEN=40 TOS=0x08 PREC=0x00 TTL=42 ID=40114 DF PROTO=TCP SPT=443 DPT=52736 WINDOW=0 RES=0x00 RST URGP=0
(snip)

さらっぴんのiptablesへこの設定だけ放り込むと膨大な量のログで溢れ返って仕舞うから、正常に動作していることが確認できたら一旦設定を削除して改めて本番の設定をおこなうのが良さそうである。

$ sudo iptables -nvxL --line-numbers
Chain INPUT (policy ACCEPT 31 packets, 1936 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1          31     1936 NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            nflog-prefix  "iptables:" nflog-threshold 20
$ sudo iptables -D INPUT 1

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください