拒否ログ出力

デフォルトでは拒否ログは出力されません。
(ゾーンによらず)全体で設定するには、--set-log-denied オプションで有効にします。

firewall-cmd --set-log-denied all

iptables -nvL で確認すると、log-level 4 (warning) ですので、syslog の facility.level = kern.warning に記録されます。
/var/log/messages に出力されます。

 

また、ゾーンごとに設定するには、rich rule を使います。
ただし、許可ルールチェイン(IN_public_allow)よりも先にログチェイン(IN_public_log)が評価されるので、許可した場合でもログが記録されます。

(例: TCP 80)
firewall-cmd --zone=public --add-rich-rule='rule port port=80 protocol=tcp log prefix

 

ログ出力先の変更

以下の通り、firewalldでドロップされるログは「prefix "FINAL_REJECT:」がプレフィックスとして付与され/var/log/messagesに出力されます。

[root@server zones]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0
INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0
INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0
LOG        all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID LOG flags 0 level 4 prefix "STATE_INVALID_DROP: "
DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
LOG        all  --  0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 4 prefix "FINAL_REJECT: "
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

 

そのままだとmessagesのログに大量に出力され、ほかのログが埋もれるのでログを別に分けるのがお奨めです。
rsyslogでprefixの文字列をフィルタして、出力先を変えれることで分けられます。

例)
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
:msg, contains, "FINAL_REJECT"                         -/var/log/firewalld.log
& stop

設定例では、/var/log/firewalld.logに出力しています。
ちなみに、「-/var/log/firewalld.log」先頭に「ハイフン(-)」を付けることで非同期での書き込みを指定しています。
こうすることでサーバへの負荷は劇的に下がります。
反面、サーバが停止した直前のログを取り損ねる場合があリます。
そのため、サーバの停止に関わるようなログを取得している場合は注意が必要です。

 

& stop」ログに2重書き込み防止用です。直前のフィルタにマッチしたログを破棄させます。