HINWEIS: Diese Protokollierungsmethode wird als feste Prioritäten bezeichnet. Dies sind entweder Zahlen oder Namen (1,2,3,4, ..) oder (DEBUG, WARN, INFO usw.).
rsyslog
Wenn Sie zufällig verwenden rsyslog, können Sie einen eigenschaftsbasierten Filter wie folgt erstellen:
In diesem Fall werden Informationen in /var/log/iptablesund auch in gespeichert /var/log/messages. Ich möchte nur eine Kopie dieser Daten iniptables.log
Abid
1
Ich habe meine eigene Antwort hinzugefügt, um auch Abids Frage sowie die fehlende logrotate-Konfiguration zu behandeln. Das "Stop" oder "& ~" verhindert, dass die Nachrichten die Regeln von rsyslog fortsetzen, um auch zu / var / log / messages zu gelangen.
Peter
6
Dies setzt voraus, dass Ihre Firewall bereits Protokolle erstellt, wie es jede vernünftige Firewall tun sollte. Für einige Beispiele ist eine identifizierbare Nachricht erforderlich, z. B. "NETFILTER" im Beispiel von slm.
Erstellen Sie eine Datei in rsyslog.d
vim /etc/rsyslog.d/10-firewall.conf
Dies funktioniert in CentOS 7. Ich weiß nicht, wie ich überprüfen kann, ob es von der Firewall stammt, außer nach IN und OUT zu suchen ... CentOS ist seltsam. Verwenden Sie dies nur, wenn die nächste Version nicht funktioniert.
# into separate file and stop their further processing
if ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Dies funktioniert in CentOS 7 und überprüft auch den Nachrichteninhalt (ersetzen Sie "Shorewall" durch das, was Sie in der Nachricht Ihrer -j LOG-Regel haben):
# into separate file and stop their further processing
if ($msg contains 'Shorewall') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Dies funktioniert in anderen (Ubuntu, Debian, openSUSE). Und das ist der beste Weg, es zu tun. Keine Suche nach Zeichenfolgen in der Nachricht:
# into separate file and stop their further processing
if ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then -/var/log/firewall
& ~
Und hier ist, was eine standardmäßige openSUSE-Maschine hat (was meiner Meinung nach jede Distribution haben sollte und fehlt) (der Unterschied scheint nur "stop" statt "& ~" zu sein; nicht alle Systeme unterstützen beide Syntaxen):
if ($syslogfacility-text == 'kern') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
stop
}
Vergessen Sie für all das nicht auch eine logrotate.d-Datei:
vim /etc/logrotate.d/firewall
enthält:
/var/log/firewall {
rotate 7
size 500k
postrotate
# before using this, run the command yourself to make sure
# it is right... the daemon name may vary
/usr/bin/killall -HUP rsyslogd
endscript
}
Antworten:
Syslog
Schauen Sie in der Manpage nach
iptables
. Es zeigt ein Ziel namensLOG
das tun kann, was Sie wollen.Beispiel
Stellen Sie die Protokollierungsstufe für
LOG
auf 4 ein.Konfigurieren Sie
syslog.conf
diese Nachrichten so, dass sie in eine separate Datei geschrieben werden.Starten Sie syslogd neu.
Debian / Ubuntu
Fedora / CentOS / RHEL
HINWEIS: Diese Protokollierungsmethode wird als feste Prioritäten bezeichnet. Dies sind entweder Zahlen oder Namen (1,2,3,4, ..) oder (DEBUG, WARN, INFO usw.).
rsyslog
Wenn Sie zufällig verwenden
rsyslog
, können Sie einen eigenschaftsbasierten Filter wie folgt erstellen:Fügen Sie dann thils switch zu Ihren iptables-Regeln hinzu, die Sie protokollieren möchten:
Alternativ können Sie die Nachrichten auch mit diesem Eigenschaftsfilter protokollieren:
HINWEIS: Für diese zweite Methode sind keine Änderungen erforderlich
iptables
.Verweise
quelle
/var/log/iptables
und auch in gespeichert/var/log/messages
. Ich möchte nur eine Kopie dieser Daten iniptables.log
Dies setzt voraus, dass Ihre Firewall bereits Protokolle erstellt, wie es jede vernünftige Firewall tun sollte. Für einige Beispiele ist eine identifizierbare Nachricht erforderlich, z. B. "NETFILTER" im Beispiel von slm.
Erstellen Sie eine Datei in rsyslog.d
Dies funktioniert in CentOS 7. Ich weiß nicht, wie ich überprüfen kann, ob es von der Firewall stammt, außer nach IN und OUT zu suchen ... CentOS ist seltsam. Verwenden Sie dies nur, wenn die nächste Version nicht funktioniert.
Dies funktioniert in CentOS 7 und überprüft auch den Nachrichteninhalt (ersetzen Sie "Shorewall" durch das, was Sie in der Nachricht Ihrer -j LOG-Regel haben):
Dies funktioniert in anderen (Ubuntu, Debian, openSUSE). Und das ist der beste Weg, es zu tun. Keine Suche nach Zeichenfolgen in der Nachricht:
Und hier ist, was eine standardmäßige openSUSE-Maschine hat (was meiner Meinung nach jede Distribution haben sollte und fehlt) (der Unterschied scheint nur "stop" statt "& ~" zu sein; nicht alle Systeme unterstützen beide Syntaxen):
Vergessen Sie für all das nicht auch eine logrotate.d-Datei:
enthält:
quelle