Wie kann ich eine /etc/syslog.conf
Datei konfigurieren , um Protokollinformationen iptables
in einer bestimmten Datei zu speichern?
Ich möchte diese Informationen separat speichern, damit ich einfach und schnell extrahieren kann, was ich möchte.
Wie kann ich eine /etc/syslog.conf
Datei konfigurieren , um Protokollinformationen iptables
in einer bestimmten Datei zu speichern?
Ich möchte diese Informationen separat speichern, damit ich einfach und schnell extrahieren kann, was ich möchte.
Antworten:
Schauen Sie in der Manpage nach iptables
. Es zeigt ein Ziel namensLOG
das tun kann, was Sie wollen.
Stellen Sie die Protokollierungsstufe für LOG
auf 4 ein.
# DROP everything and Log it
iptables -A INPUT -j LOG --log-level 4
iptables -A INPUT -j DROP
Konfigurieren Sie syslog.conf
diese Nachrichten so, dass sie in eine separate Datei geschrieben werden.
# /etc/syslog.conf
kern.warning /var/log/iptables.log
Starten Sie syslogd neu.
Debian / Ubuntu
$ sudo /etc/init.d/sysklogd restart
Fedora / CentOS / RHEL
$ sudo /etc/init.d/syslog restart
HINWEIS: Diese Protokollierungsmethode wird als feste Prioritäten bezeichnet. Dies sind entweder Zahlen oder Namen (1,2,3,4, ..) oder (DEBUG, WARN, INFO usw.).
Wenn Sie zufällig verwenden rsyslog
, können Sie einen eigenschaftsbasierten Filter wie folgt erstellen:
# /etc/rsyslog.conf
:msg, contains, "NETFILTER" /var/log/iptables.log
:msg, contains, "NETFILTER" ~
Fügen Sie dann thils switch zu Ihren iptables-Regeln hinzu, die Sie protokollieren möchten:
–log-prefix NETFILTER
Alternativ können Sie die Nachrichten auch mit diesem Eigenschaftsfilter protokollieren:
:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~
HINWEIS: Für diese zweite Methode sind keine Änderungen erforderlich iptables
.
/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
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
}