ufwはiptablesのように複雑な設定を行う必要がないのでとても使いやすいです。今回はそのログについてです。
先日ufwのログレベルをデバッグのためfull
に引き上げると/var/log/ufw.log
に以下のような行が出現するようになりました。
Jan 7 15:36:12 vm3 kernel: [ 5722.897470] [UFW AUDIT] IN=eth0 OUT= MAC=2a:e3:68:02:11:68:9a:7e:ec:2f:9b:0b:08:00 SRC=45.129.33.3 DST=15.131.104.205 LEN=40 TOS=0x00 PREC=0x00 TTL=243 ID=23472 PROTO=TCP SPT=59933 DPT=16122 WINDOW=1024 RES=0x00 SYN URGP=0
Jan 7 15:36:12 vm3 kernel: [ 5722.897478] [UFW BLOCK] IN=eth0 OUT= MAC=2a:e3:68:02:11:68:9a:7e:ec:2f:9b:0b:08:00 SRC=45.129.33.3 DST=15.131.104.205 LEN=40 TOS=0x00 PREC=0x00 TTL=243 ID=23472 PROTO=TCP SPT=59933 DPT=16122 WINDOW=1024 RES=0x00 SYN URGP=0
Jan 7 15:36:12 vm3 kernel: [ 5722.921513] [UFW AUDIT] IN=eth0 OUT= MAC=2a:e3:68:02:11:68:9a:7e:ec:2f:9b:0b:08:00 SRC=201.101.101.130 DST=15.131.104.205 LEN=52 TOS=0x00 PREC=0x00 TTL=49 ID=48905 DF PROTO=TCP SPT=41562 DPT=22 WINDOW=1309 RES=0x00 ACK URGP=0
1,3行目には[UFW AUDIT]
と書かれています。それまでのufwのログレベルがlow
以下の場合は出力されたことはなく、[UFW ALLOW]
や[UFW BLOCK]
のみであり、少し戸惑ったため記事にしてみようと思います。
ALLOW
でもBLOCK
でもなく、AUDIT
?
この記事に来られた方はログを見てこのような疑問を持たれたのだろうと思います。結論から言いますと、AUDIT
はそのどちらでもありません。AUDIT
はiptablesがパケットを認識すると送出されます。
もう少し詳しく
そもそもufwはiptablesを操作するためのコマンドで、ufw自身がパケットを扱うわけではありません。そしてiptablesはlinuxカーネルによるレイヤー3(ip)で動作するファイヤーウォールです。
ufwがiptablesにルールを書き込んでいくとすると当然ufwによってALLOW/BLOCK
として明示的に書き込まれたフィルタに該当しないパケットが出現します。これらも含めてログとして出力する際につけられるprefixがAUDIT
なのです。
ここで注意してほしいのはALLOW/BLOCK
されたパケットに対してもこのログは出力されることです。例えば、上にあるログの1、2行目を見ると[UFW ~]
以降の属性はすべて一致していることがわかると思います。よってこの2つのパケットは実際には同一であると考えることができ、確かにBLOCK
とは別に出力されていることがわかります。
もちろんAUDIT
のみ存在し、ALLOW/BLOCK
がないパケットもありえます。ufwは直接iptablesコマンドによって変更されたルールは感知できなかったりするので、こういったっ場合は直接iptablesを確認するなどする必要があるかもしれません。
ufw的にはiptablesにパケットは確かにやってきたけど、どのように処理したかは「分からない」ということなんですね。
おまけ:ufwの吐くiptablesの設定
試しにsudo iptables -L | grep AUDIT
で該当する設定を探してみましょう。
~$ sudo iptables -L | grep -3 AUDIT
Chain ufw-before-logging-forward (1 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning prefix "[UFW AUDIT] "
Chain ufw-before-logging-input (1 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning prefix "[UFW AUDIT] "
Chain ufw-before-logging-output (1 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning prefix "[UFW AUDIT] "
Chain ufw-before-output (1 references)
target prot opt source destination
---
(省略)
プロトコルやipによらず出力を行っていることがわかります。