firewalldをインストールしているリバースプロキシやロードバランサー配下のWebサーバーに HTTPリクエストが届かなかった場合に、firewalldが拒否しているのか、前段のサーバーが止めているのか把握しづらいことがある。

そこでfirewalldが拒否したログを出力するようにして、firewalldが拒否していることを確認できるようにする。

拒否ログの出力

firewalldは通信の接続を拒否した場合、ログは何も出力されない。

拒否した場合のログを残すには以下のコマンドを実行する。

$ sudo firewall-cmd --set-log-denied=all

上記コマンドにより、firewalldは通信の接続を拒否した場合、/var/log/messagesにログを出力するようになる。

Apr 22 04:59:31 ip-10-0-5-27 kernel: FINAL_REJECT: ↲
IN=eth0 OUT= MAC=0a:4b:a0:ec:7e:d7:0a:7a:6b:3e:2a:d1:08:00 ↲
SRC=xxx.xxx.xxx.xxx DST=yyy.yyy.yyy.yyy LEN=64 TOS=0x00 PREC=0x00 ↲
TTL=41 ID=0 DF PROTO=TCP SPT=58663 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0

設定の確認

設定状況を確認するには--get-log-deniedオプションを指定して以下のコマンドを実行する。

$ sudo firewall-cmd --get-log-denied
all

allならログを出力するように設定されている。
offならログを出力しないように設定されている。

拒否ログの出力を停止

拒否ログの出力を停止するには以下のコマンドを実行する。

$ sudo firewall-cmd --set-log-denied=off

設定ファイルで拒否ログの出力を有効にする

設定ファイルでfirewalld起動時に拒否ログの出力を有効にするには/etc/firewalld/firewalld.confLogDeniedの値をallに設定する。

LogDenied=all

上記のように設定しfirewalldを再起動すると有効になる。