Konfigurieren einer benutzerdefinierten Protokolldatei für iptables

8

Ich versuche, verworfene Pakete in einer benutzerdefinierten Datei zu protokollieren /var/log/messages.

Um dies zu erreichen, habe ich diese beiden Zeilen am Ende meiner Konfigurationsdatei hinzugefügt:

    -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
    -A OUTPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4

Dies funktioniert, weil ich die INPUT- und OUTPUT-Ketten standardmäßig als DROP konfiguriert habe. Wenn das Paket also keine vorherige Regel erfüllt, wird es protokolliert und gelöscht.

Ich kann sie jedoch nicht in einer benutzerdefinierten Datei protokollieren. Sie melden sich erfolgreich an /var/log/messages, aber ich möchte, dass sie angemeldet sind /var/log/iptables.log. Ich habe die Datei /etc/rsyslog.d/iptables.confmit folgendem Inhalt erstellt:

    :msg, contains, "IPTables-INPUT-Dropped: " - /var/log/iptables.log
    & ~

Dann habe ich rsyslog neu gestartet /etc/init.d/rsyslog restartund einige Pakete gesendet, von denen ich wusste, dass sie gelöscht werden würden. Sie sind jedoch nicht in iptables.log angemeldet, sondern werden immer noch angemeldet /var/log/messages.

Welche Konfiguration fehlt?

Gelöst Das Problem ist, dass zwischen - und / kein Leerzeichen stehen sollte

Ay0
quelle
Das sollte funktionieren (ich benutze es). Ich habe es jedoch /etc/rsyslog.confvor anderen Anweisungen, so dass die Nachricht gelöscht wird, bevor etwas anderes sie aufnimmt. Versuchen Sie das und kill -HUP `pidof rsyslogd`. Verlieren Sie möglicherweise das Leerzeichen am Ende der angegebenen Zeichenfolge.
Goldlöckchen
Ich habe die erste Zeile zu rsyslog.conf hinzugefügt, aber es funktioniert immer noch nicht
Ay0

Antworten:

4

Das Problem ist, dass zwischen - und / kein Leerzeichen stehen sollte

Ay0
quelle
2

Dies ist ein alternativer Ansatz ulogd. Ich würde diesen Mechanismus vorschlagen, da er die -m LOGVerwendung des Kernel-Protokollierungsmechanismus stoppt (was den schwerwiegenden Nebeneffekt hat, dass auch Ihr dmesgProtokoll gefüllt wird ).

Zuerst benötigen Sie ulogd, das Sie mit einem bekommen können apt-get install ulogd. Bearbeiten Sie Ihr /etc/ulogd.conf, aktivieren Sie dieses Modul (indem Sie das #am Anfang der Zeile entfernen ):

plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"

und ändern / fügen Sie den Abschnitt hinzu [LOGEMU]:

[LOGEMU]
file="/var/log/iptables.log"
sync=1

Und dann starten Sie Ihre ulogd mit neu /etc/init.d/ulogd restart. Dann statt -j LOGVerwendung -j ULOGauf Ihren iptables - Regeln. Das ULOG-Modul hat kein Konzept, --log-levelsodass Sie diese Optionen entfernen können. Es wird auch --ulog-prefixanstelle von verwendet --log-prefix.

Drav Sloan
quelle
es funktioniert nicht.
Ay0
Haben Sie die ulogd nach dem Hinzufügen des Eintrags neu gestartet? ( /etc/init.d/ulogd restartals Wurzel)
Drav Sloan
ja natürlich. Eigentlich ist es eher ulogd2 als ulogd
Ay0
Ah, Sie brauchen einen weiteren Schritt, um ihn der Antwort hinzuzufügen.
Drav Sloan
Nein, es ist standardmäßig aktiviert.
Ay0
2

Dies kann möglich sein mit:

Nehmen Sie die folgenden Änderungen vor, um iptables-Protokolle in syslog zu deaktivieren /etc/rsyslog.d/50-default.conf:

*.*;auth,authpriv.none;kern.*=!kern.warning             -/var/log/syslog

So melden Sie sich in einer separaten Datei an; anhängen:

kern.=warning -/var/log/iptables.log

dann einmal neu starten syslogund rsyslogund taildie Protokolle

/etc/init.d/rsyslog restart

Es funktioniert in syslogund rsyslogauch

Rahul Patil
quelle
2

Zu Ihrer Information:

& ~ist im neuen rsyslog veraltet, sollten Sie stopstattdessen verwenden.

/etc/rsyslog.d/10-iptables

if ( $msg contains 'IN=' and $msg contains 'OUT=' ) 
then { 
    /var/log/10-iptables.log
    stop
}

/etc/logrotate.d/iptables

/var/log/iptables.log
{
        rotate 30
        daily
        missingok
        notifempty
        delaycompress

        postrotate
                service rsyslog rotate > /dev/null
        endscript
}

Beachten Sie, dass ich das Präfix auf 10 gesetzt habe, um es abzufangen, bevor es die Standardregeln erreicht (50 Standardeinstellungen).

Rabin
quelle
0

Eine funktionierende Lösung mit ulogd

a) Stellen Sie sicher, dass Sie dieses Modul beim Start haben

modprobe nf_log_ipv4
cp /etc/modules /etc/modules.bak
echo nf_log_ipv4 >> /etc/modules

b) Bearbeiten Sie die Datei /etc/ulogd.conf, um diese Plugins zu aktivieren (Kommentar #)

plugin="/usr/lib64/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib64/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib64/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib64/ulogd/ulogd_raw2packet_BASE.so"

Fügen Sie diese Zeile vor dem ersten kommentierten # Stapel hinzu

stack=firewall11:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu11:LOGEMU

und schließlich am Ende der Datei diese Zeilen hinzufügen

[firewall11]
group=11

[emu11]
file="/var/log/iptables.log"
sync=1

c) Jetzt bevorzuge ich die Verwendung der alten Methode des iptables-Skripts anstelle von firewalld. In meinem iptables-Skript verwende ich diese Zeilen für die Protokollierung.

# Log
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A FORWARD -j NFLOG
iptables -A LOGGING -j NFLOG --nflog-prefix "[firewall-drop]:" --nflog-group 11
iptables -A LOGGING -j DROP

d) die letzten Teile

touch /var/log/iptables.log
systemctl restart ulogd

Überprüfen Sie, ob Sie mit diesem Befehl arbeiten

tail -f /var/log/iptables.log

Nach einem Ereignis sollten einige Zeilen angezeigt werden: nmap portscan oder einfach Telnet auf Ihrem Computer (Hoffnung ist deaktiviert oder Firewall).

Elbarna
quelle