私のiptablesには、ドロップされたパケットをログに記録するルールがあります。
-A INPUT -i eth0 -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP
/etc/rsyslog.conf
には、これらのログを専用ファイル/var/log/firewall.log
に送信する別のルールがあります。
:msg, contains, "FW: " -/var/log/firewall.log
& ~
& ~
はログをすぐに削除するため、syslog
またはその他のログファイルがフラッディングすることはありません。
これは、dmesg
をそれらのファイアウォールログ(/var/log/dmesg
ではなく、コマンドdmesg
の出力)でフラッディングすることを除いて、うまく機能します。
これらのログがdmesg
に表示されないようにする方法はありますか?
NFLOG
の代わりにLOG
ターゲットを使用できます。
NFLOG
This target provides logging of matching packets. When this target is set for a
rule, the Linux kernel will pass the packet to the loaded logging backend to log the
packet. This is usually used in combination with nfnetlink_log as logging backend,
which will multicast the packet through a netlink socket to the specified multicast
group. One or more userspace processes may subscribe to the group to receive the
packets. Like LOG, this is a non-terminating target, i.e. rule traversal continues
at the next rule.
必要なのはnfnetlink_log
対応のロギングプログラム。メッセージがそこに送られ、ユーザースペースプロセスがパケットをログに記録するかどうかを決定します。
LOG
ルールを特定のしきい値に制限することもできます。
-A INPUT -i eth0 -m limit --limit 10/minutes -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP
これにより、平均して1分あたり10パケットが記録されます。もちろん、必要に応じてこれを調整できます。
次のコマンドでログレベルを7に設定した場合:
-A INPUT -i eth0 -j LOG --log-prefix "FW: " --log-level 7
次に、レベルのしきい値をdmesgに渡すことにより、これらのメッセージをフィルターで除外できます。
dmesg --level=err,warn
Iptablesで使用しているログレベルに関連している可能性があります。 rsyslogのドキュメントから理解できるように、ログレベルは次のとおりです。クリティカル、アラート、emerg、パニック(emergと同じ)。」名前、つまり「通知」を使用してiptablesでログレベルを指定しようとするとどうなりますか。まあ、私は今それがまったく問題ではないと思うので、チェックせずに投稿するのにぴったりです。上記と同様のスキームを実装したところ、同じ問題が発生しました。私のcentos 7カーネルはv3.10.0です。v3.5以降、カーネルのロギングは/ dev/kmsgを使用して行われているようで、dmesgが何らかの方法でそこから入力を取得していると思います。