dmesg mit Firewall-Protokollen überflutet

dmesg mit Firewall-Protokollen überflutet

In meinen iptables habe ich eine Regel, die verlorene Pakete protokolliert:

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

Und in /etc/rsyslog.confhabe ich eine weitere Regel, die diese Protokolle an eine dedizierte Datei sendet /var/log/firewall.log.

:msg, contains, "FW: "                    -/var/log/firewall.log
& ~

Dieser & ~löscht die Logs sofort, damit diese keine Überflutung syslogoder Überflutung anderer Logdateien verursachen.

Dies funktioniert gut, außer dass es dmesgmit diesen Firewall-Protokollen (aber nicht /var/log/dmesgmit der Ausgabe des Befehls dmesg) überflutet wird.

Gibt es eine Möglichkeit, die Anzeige dieser Protokolle zu verhindern dmesg?

Antwort1

Sie können das NFLOGZiel stattdessen verwenden 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.

Alles was Sie brauchen, ist ein nfnetlink_logleistungsfähiges Protokollierungsprogramm. Nachrichten werden dorthin gesendet und der Benutzerprozess entscheidet, ob das Paket protokolliert wird oder nicht.

LOGSie könnten auch versuchen, die Regel auf einen bestimmten Schwellenwert zu beschränken :

-A INPUT -i eth0 -m limit --limit 10/minutes -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP

Dies würde im Durchschnitt 10 Pakete pro Minute protokollieren. Sie können dies natürlich an Ihre Bedürfnisse anpassen.

Antwort2

Wenn Sie die Protokollebene mit dem folgenden Befehl auf 7 gesetzt haben:

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

Dann können Sie diese Nachrichten einfach herausfiltern, indem Sie den Schwellenwert der Ebene an dmesg übergeben:

dmesg --level=err,warn

Antwort3

Es kann mit der Protokollebene zusammenhängen, die Sie in iptables verwenden. Wenn ich es aus der rsyslog-Dokumentation verstehe, lauten die Protokollebenen: „Die Priorität ist eines der folgenden Schlüsselwörter in aufsteigender Reihenfolge: debug, info, notice, warning, warn (dasselbe wie warning), err, error (dasselbe wie err), crit, alert, emerg, panic (dasselbe wie emerg).“ Wie wäre es, wenn Sie versuchen würden, die Protokollebene in iptables anhand ihres Namens anzugeben, also „notice“. Das geschieht mir recht, wenn ich poste, ohne es zu prüfen, denn ich denke jetzt, dass das überhaupt nicht das Problem ist. Ich habe ein ähnliches Schema wie das oben beschriebene implementiert und habe das gleiche Problem. Mein CentOS 7-Kernel ist v3.10.0 und seit v3.5 scheint die Kernelprotokollierung über /dev/kmsg zu erfolgen und ich nehme an, dass dmesg seine Eingaben irgendwie von dort erhält.

Antwort4

Warum interessiert Sie das? dmesgist ein Low-Level-Tool zum Drucken aktueller Kernel-Meldungen, und Sie haben den Kernel aufgefordert, verlorene Pakete zu protokollieren.

Konfigurieren Sie das Syslog-System Ihres Systems so, dass iptables-Meldungen in einer separaten Protokolldatei von anderen Kernel-Meldungen protokolliert werden, und verwenden Sie die von ihm geschriebenen Protokolldateien anstelle von dmesg.

verwandte Informationen