linuxサーバのファイアウォールのサービスであるfirewalldは、デフォルトでは拒否ログを出力しません。通信がうまくいかない場合などに拒否ログを確認して、ブロックされていないかを確認するのに必要です。大量のログが出力されるため、システムログと分けて記録するsyslogの設定方法を紹介します。
Linuxサーバのfirewalldのログ出力を有効にする設定
firewalldのログを出力(DENYされたログを出力)する設定は、以下のコマンドを実行します。
# firewall-cmd --set-log-denied=all
# firewall-cmd --get-log-denied
allの代わりに、unicast、broadcast、multicast、off というオプションもあり、broadcastやmulticastのログが多くて嫌な場合は、unicastにすれば見やすくなります。
また」、設定ファイル(/etc/firewalld/firewalld.conf)
の LogDenied
の値を all
に設定することで、ログ出力の設定を有効にすることもできます。
LogDenied=all
ログの出力とは関係がありませんが、firewalld.confによく設定するパラメータとして、ファイルの一番下にあるパラメータで、
AllowZoneDrifting=no
があります。こちらログに「WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.」を記録されないようにするための対処になります。セキュリティーに悪影響を及ぼす可能性があるので、無効(no)にしておいた方が良い設定となります。
上記のいずれも設定後は、以下のreloadコマンドを忘れずに!
# firewall-cmd --reload
firewalldのルールの設定方法については、CentOSのFirewallを無効・停止せず設定する方法に詳しく紹介しておりますので見てください。
標準のログ出力先は/var/log/messagesファイル
シスログのデフォルトの設定では、上記firewalldのログは、/var/log/messagesに出力されます。特にfirewalldでドロップされたログは、「FINAL_REJECT」という文言が付加されてログに記録されることになります。
messageファイルにはシステムの様々なログも記録されており、ここにfirewallのドロップログを一緒に出力すると、重要なログを見落としたり、大量に出力されるので見にくくなったりします。
ですので、firewalldで出力されるログは、別ファイルに記録することをお勧めします。私がいつも実施している方法を次に紹介しますので、マネしてみてください。
シスログとは別ファイルに分けてログを記録する方法
シスログの設定ファイルである /etc/rsyslog.conf に以下を追記します。
:msg, contains, "FINAL_REJECT:" -/var/log/firewalld
& stop
こちらの意味は、シスログのメッセージの中に「FINAL_REJECT」が含まれると、/var/log/firewalldファイルに記録しなさいとなります。「-」は非同期に書き込みを意味しており、大量にログを出力されるのでシステム負荷を考慮してそのようにしています。
2行目の「& stop」はこれ以降に出力しない事を意味しており、具体的には、/var/log/firewalldに記録されたfirewalldのログは、/var/log/messagesには記録されない事になります。
こちらの設定が終了しましたら、rsyslogdのサービスを再起動して、設定を反映させます。
# systemctl restart rsyslog
この後、/var/log/messagesにfirewalldのログが記録されていない事、/var/log/firewalldにfirewalldのログが記録されている事を確認します。
今回はここまでです。最後までお読みいただきありがとうございました。