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

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

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

Ich möchte diese Informationen separat speichern, damit ich einfach und schnell das Gewünschte extrahieren kann.

Antwort1

Syslog

Schauen Sie sich die Manpage für an iptables. Dort wird ein Ziel namens angezeigt, LOGdas tun kann, was Sie wollen.

Beispiel

  1. Stellen Sie die Protokollierungsstufe auf LOG4 ein.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Konfigurieren Sie syslog.confes so, dass diese Nachrichten 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
    

NOTIZ:Diese Art der Protokollierung nennt man feste Prioritäten. Dabei handelt es sich entweder um 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 diesen Schalter zu Ihren iptables-Regeln hinzu, die Sie protokollieren möchten:

–log-prefix NETFILTER

Alternativ können Sie die Nachrichten auch mit diesem Typ von Eigenschaftenfilter protokollieren:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

NOTIZ:Diese zweite Methode erfordert keine Änderungen an iptables.

Verweise

Antwort2

Dies setzt voraus, dass Ihre Firewall bereits Protokolle erstellt, wie es jede vernünftige Firewall tun sollte. Für einige Beispiele ist eine identifizierbare Meldung erforderlich, wie beispielsweise „NETFILTER“ im Beispiel von slm.

Erstellen Sie eine Datei in rsyslog.d

vim /etc/rsyslog.d/10-firewall.conf

Dies funktioniert unter CentOS 7. Ich weiß nicht, wie ich überprüfen kann, ob es von der Firewall kam, außer durch Suchen nach IN und OUT ... CentOS ist komisch. Verwenden Sie dies nicht, es sei denn, die nächste Version funktioniert nicht.

# 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 prüft auch den Nachrichteninhalt (ersetzen Sie „Shorewall“ durch den Inhalt der Nachricht Ihrer -j LOG-Regel):

# 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 dies ist die beste Vorgehensweise. 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 Standard-openSUSE-Maschine hat (was meiner Meinung nach jede Distribution haben sollte und fehlt) (der Unterschied scheint nur „stop“ anstelle von „& ~“ 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
}

Und vergessen Sie bei alledem nicht, auch eine logrotate.d-Datei anzulegen:

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
}

verwandte Informationen