Wie liste ich IP-Adressen auf, die von iptables blockiert wurden?


16

Um Brute-Force-Angriffe gegen ssh zu verhindern, habe ich einige Iptables-Regeln hinzugefügt ( siehe unten). Die Frage ist: Wie kann ich die gesperrten IP-Adressen auflisten?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

1
iptables -L INPUT -v -nzeigt alle blockierten ip
dynamic

Antworten:


16

Eine Möglichkeit wäre, Ihre verworfenen Pakete mit einer Regel wie der folgenden zu protokollieren:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Fügen Sie das direkt vor der DROPRegel ein. Anschließend können Sie die Syslog-Datei nach "FW_DROPPED" durchsuchen, und die Liste der IP-Adressen wird angezeigt. Die Einträge in der Protokolldatei sehen ungefähr so ​​aus:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Wenn Sie also "SRC =" ausschneiden, werden die verworfenen IPs angezeigt. Sortieren Sie das, indem Sie doppelte Einträge entfernen, und Sie haben Ihre Liste.

Ich habe festgestellt, dass das Iptables-Tutorial die nützlichste Dokumentation für iptables / netfilter ist.


Ja, das ist der Weg, es zu tun.
Brent

Dies würde erfordern, dass Sie Ihre Regeln duplizieren, da Sie sich nicht anmelden und dieselbe Regel ablegen.
David Pashley

3
Es wäre sogar noch besser, wenn er eine Benutzerkette erstellen würde, in der er die fehlerhaften Pakete protokolliert und ablegt. Auf diese Weise werden unnötige Duplikate entfernt. Dies kann folgendermaßen geschehen: iptables -N Angriffe; iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j attackiert; iptables -A Angriffe -j LOG --log-Präfix "FW_DROPPED:"; iptables-A attackiert -j DROP
Cristian Ciupitu

1
Einverstanden. Tabellen / Ketten sind der Weg zu gehen; der springende Punkt der Iptables, wirklich. Ich erstelle separate Tabellen für akzeptierte, stillschweigend abgelegte, hörbar zurückgewiesene, verworfene, vermutete Überschwemmungen, illegale, vermutete Sonden, vermutete Scans, unbekannte Typen und beobachteten Datenverkehr. Meine FWs basieren auf diesem alten Skript (Warnung: Eigenwerbung): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude

1
Das ipt_recent-Modul, auf das ipozgaj und David Pashley verwiesen haben, ist eine ziemlich raffinierte Ergänzung, obwohl es nicht den gleichen Grund liefern kann, warum eine bestimmte IP-Adresse gelöscht wurde (wie Sie es mit verschiedenen --log-Präfix-Einstellungen tun können) oder ein nachverfolgen kann lange Geschichte von Angriffen mit Zeitstempeln. Auf jeden Fall eine gute Idee, beide Techniken im Konzert zu verwenden.
Yukondude


4

Ansehen

/proc/net/ipt_recent/YOURNAME

Dabei ist IHR NAME der Name, den Sie mit der Option --name in Ihrer iptables-Regel verwendet haben.


In einigen Distributionen (z. B. Debian) lautet der gültige Pfad:/proc/net/xt_recent/[list-name]
itachi


1

Was ich zum Beispiel für das Spoofing von Eingabeadressen tue, ist die Definition der Kette SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

dann, um Pakete an diese Kette zu senden, wenn sie gefälscht sind:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Sie können für jede Kategorie von Paketen, die Sie verwerfen oder ablehnen, so etwas tun, um eine Zeile im Syslog zu suchen, und dann regelmäßig nach IP-Adressen aus diesen Protokollzeilen suchen, diese ausschneiden und sortieren.

Die Verwendung einzelner Ketten für jede Kategorie hat den Vorteil, dass Ihre Konfiguration übersichtlicher und das Lesen Ihrer iptablesKonfiguration einfacher wird . Wenn Sie mehr und mehr Regeln hinzufügen, werden Sie froh sein, dass Sie einzelne Ketten für bestimmte unterschiedliche Aktionen verwendet haben.


Wie genau erkennen Sie gefälschte Pakete? Nach meiner Erfahrung ist dies im allgemeinen Fall unmöglich.
MarkR

Das Obige ist nur ein Beispiel. Hier suche ich nach Paketen, die an der INPUT-Kette ankommen, die von einem externen Gerät stammen, aber angeblich von einer in meinem Netzwerk internen IP-Adresse stammen. In diesem Fall kann ich Adress-Spoofing absolut erkennen, aber im Allgemeinen ist das anders.
Eddie

1

"Die Frage ist: Wie kann ich die gesperrten IP-Adressen auflisten?"

Erstellen Sie eine BANNED-Kette:

iptables -N BANNED
iptables -F BANNED

Erstellen Sie eine Protokollierungskette:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Fügen Sie vor den meisten anderen Regeln einen Sprung zu einer gesperrten Kette in der INPUT-Kette hinzu

...
iptables -A INPUT -j BANNED
...

Fügen Sie nun die IP-Adressen zur gesperrten Kette hinzu:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

Sie können es auch wie eine Datenbank mit den Kommentaroptionen verwenden, damit Sie wissen, wann und warum usw. Flock ist wichtig, wenn iptables von vielen Prozessen häufig aktualisiert wird - es scheint, dass in iptables keine Sperre eingebaut ist.

So zeigen Sie die gesperrten Adressen und Regeln in der gesperrten Kette an:

iptables -S BANNED

So zeigen Sie nur sortierte eindeutige IP-Adressen an:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

Auf meinen Servern werden eine Reihe von Daemons ausgeführt, die die Syslog-Dateien und Weblogs prüfen. Wenn also jemand einen bösen Versuch unternimmt, wird die Adresse je nach Art und Schweregrad und Anzahl der vorherigen Angriffe für einige Tage automatisch gesperrt. Die Informationen werden in einer MySQL-Datenbank angemeldet und sind regelmäßig abgelaufen. Die Adressen werden auch über die MySQL-Replikation an alle anderen Computer im Cluster verteilt, damit sie auch geschützt sind und synchron bleiben. Meine Software sucht auch den Besitzer des Netzwerks und schickt eine Beschwerde an den ISP.

Nach 10 Jahren Arbeit hoffe ich, dass es bald allen zur Verfügung steht. Derzeit habe ich ungefähr 1,5 Millionen IP-Adressen und Hunderttausende von E-Mail- und SSH-Angriffen gemeldet, die zur Bereinigung des Netzes beitragen. Wenn mehr es benutzen würden, dann hoffe ich, dass es mehr Auswirkungen haben würde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.