CentOS 7にiptablesがあります。firewalldが無効になっています。 iptablesイベントをログに記録するにはどうすればよいですか? debianではdmesgオプションですが、centosで設定する方法がわかりません。
すべてのiptablesイベントをログに記録したい。特定のルールではありません。
私にとって最良の解決策を見つけました:警告レベル:
iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4
iptables -A FORWARD -j LOG --log-prefix "BAD_FORWARD: " --log-level 4
iptables -A OUTPUT -j LOG --log-prefix "BAD_OUTPUT: " --log-level 4
デバッグレベル:
iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 7
iptables -A FORWARD -j LOG --log-prefix "BAD_FORWARD: " --log-level 7
iptables -A OUTPUT -j LOG --log-prefix "BAD_OUTPUT: " --log-level 7
ログは次の場所に保存されます。
/var/log/messages
出力例:
Aug 4 13:22:40 centos kernel: BAD_INPUT: IN= OUT=em1 SRC=192.168.1.23 DST=192.168.1.20 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=59228 SEQ=2
Aug 4 13:23:00 centos kernel: BAD_INPUT: IN=em1 OUT= MAC=a2:be:d2:ab:11:af:e2:f2:00:00 SRC=192.168.2.115 DST=192.168.1.23 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=9434 DF PROTO=TCP SPT=58428 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0
パケットがiptables ... -j LOG
ルールに一致すると、カーネルログメッセージが生成されます。 --log-level <level>
オプションを使用してメッセージの重大度レベルを指定できます。ここで、<level>
は、標準のsyslogレベル識別子の1つであるemerg
、alert
、crit
、error
、warning
、notice
、info
またはdebug
。
これらのログメッセージはrsyslog
によって処理されます。重大度レベルが十分に低い場合、rsyslog
はメッセージを完全に破棄する可能性があります。 iptablesログメッセージはカーネルから送信されるため、ログのカテゴリは常にkern
になります。そのため、/etc/rsyslog.conf
を調べて、kern.*
メッセージが処理される最小の重大度レベルと、それらが保存されるログファイルを確認します。次に、iptables -j LOG
ルールに適切な重大度レベルを設定します。
または、iptables ... -j LOG --log-prefix <prefix>
オプションを使用して識別可能なプレフィックスをiptablesメッセージに追加し、次にrsyslog
の高度な機能を使用してiptablesメッセージを別のログファイルに書き込みます。
次のコマンドでロギングを有効にできます(たとえば、INPUTチェーンの場合)。
iptables -A INPUT -j LOG
iptablesは、CentOS 7の/var/log/messages
にイベントを記録します。