Wie kann ich die Datei syslog.conf konfigurieren, um iptables-Nachrichten in einer separaten Datei zu protokollieren?

10

Wie kann ich eine /etc/syslog.confDatei konfigurieren , um Protokollinformationen iptablesin einer bestimmten Datei zu speichern?

Ich möchte diese Informationen separat speichern, damit ich einfach und schnell extrahieren kann, was ich möchte.

Ein Gebot
quelle
Verwenden Sie syslog.conf oder rsyslog.conf?
slm

Antworten:

13

Syslog

Schauen Sie in der Manpage nach iptables. Es zeigt ein Ziel namensLOG das tun kann, was Sie wollen.

Beispiel

  1. Stellen Sie die Protokollierungsstufe für LOGauf 4 ein.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Konfigurieren Sie syslog.confdiese Nachrichten so, dass sie in eine separate Datei geschrieben werden.

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. 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.).

rsyslog

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.

Verweise

slm
quelle
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
}
Peter
quelle