web-dev-qa-db-ja.com

ファイアウォールログでいっぱいになったdmesg

私の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に表示されないようにする方法はありますか?

8
Martin Vegter

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パケットが記録されます。もちろん、必要に応じてこれを調整できます。

4
Andreas Wiese

次のコマンドでログレベルを7に設定した場合:

-A INPUT -i eth0       -j   LOG  --log-prefix "FW: " --log-level 7

次に、レベルのしきい値をdmesgに渡すことにより、これらのメッセージをフィルターで除外できます。

dmesg --level=err,warn
0
peak

Iptablesで使用しているログレベルに関連している可能性があります。 rsyslogのドキュメントから理解できるように、ログレベルは次のとおりです。クリティカル、アラート、emerg、パニック(emergと同じ)。」名前、つまり「通知」を使用してiptablesでログレベルを指定しようとするとどうなりますか。まあ、私は今それがまったく問題ではないと思うので、チェックせずに投稿するのにぴったりです。上記と同様のスキームを実装したところ、同じ問題が発生しました。私のcentos 7カーネルはv3.10.0です。v3.5以降、カーネルのロギングは/ dev/kmsgを使用して行われているようで、dmesgが何らかの方法でそこから入力を取得していると思います。

0
VaughanR