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.conf
habe 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 syslog
oder Überflutung anderer Logdateien verursachen.
Dies funktioniert gut, außer dass es dmesg
mit diesen Firewall-Protokollen (aber nicht /var/log/dmesg
mit der Ausgabe des Befehls dmesg
) überflutet wird.
Gibt es eine Möglichkeit, die Anzeige dieser Protokolle zu verhindern dmesg
?
Antwort1
Sie können das NFLOG
Ziel 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_log
leistungsfähiges Protokollierungsprogramm. Nachrichten werden dorthin gesendet und der Benutzerprozess entscheidet, ob das Paket protokolliert wird oder nicht.
LOG
Sie 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? dmesg
ist 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
.