single.php

Letztes Update am

Erweitert Sommer 2019: IPTABLES ist ein Programm zur Administration von Firewalls, ist schon im Linux-Kern verankert und muss also nicht gesondert installiert werden. Mit iptables werden Hacker und Spammer vom Zugriff auf den Server ausgeschlossen.

Hacker Attacken blockieren

Alle IP-Adressen in den IPTABLES mitsamt Zeilennummern anzeigen, die momentan gesperrt sind

iptables -L INPUT -n --line-numbers

Ports, die nicht gebraucht werden, von vorn herein sperren oder einen Port für eine IP-Adresse sperren

          +-- Regel am Ende anhängen         +-- Abweisen ohne Meldung
          |                                  |
iptables -A INPUT -p tcp --dport telnet -j DROP


          +-- Regel an Position 22 einfügen
          |
iptables -I INPUT 22 -s 200.87.0.0/16 -p tcp --destination-port ssh -j DROP
                             |
                             +-- für ganzen IP-Bereich sperren

Zugriffe für ganze Nummernkreise sperren

Eine einzelne IP-Adresse zu sperren macht wenig Sinn, denn Hacker kommen mit einer ganzen Batterie von gehackten Rechnern und greifen mit 10, 20 und noch mehr IP-Adressen an. Bei Angriffen aus China oder anderen Ländern, aus denen wir unter Garantie keine interessierten Besucher, sondern überwiegend Hackversuche erwarten, kann gleich ein ganzer IP-Nummernkreis ausgeschlossen werden.

iptables -A INPUT -s xxx.xxx.xxx.0/24 -j DROP
iptables -A INPUT -s xxx.xxx.0.0/16 -j DROP
iptables -A INPUT -s xxx.0.0.0/8 -j DROP

Fail2Ban

IPTABLES ist erst einmal Handarbeit: Die IP-Adresse der Angreifer aus den Log-Dateien fischen und sperren. Automatisch geht das mit Fail2Ban:

maxfailures = 3 
bantime = 900 
findtime = 600

Per Voreinstellung entdeckt Fail2Ban drei missglückte Login-Versuche seitens einer IP innerhalb von 600 Sekunden (findtime). Die IP-Adresse wird automatisch für 900 Sekunden gesperrt.

System: fail2ban and iptables

2019: Das große Botnetz mit mehr als 3000 IP-Adressen

Das gilt natürlich auch für WordPress-Plugins wie WordFence. Die aktuelle (Juli 2019) Angriffswelle eines Botnetz wird zwar scheinbar von WordFence anhand des Browser-Strings erkannt, aber WordFence blockiert den Angreifer nur für eine bestimmte Zeitspanne.

Allerdings sind die angreifenden Bots auch nicht dumm: Sie greifen nicht mit einer IP an, sondern mit 50, 100 und jetzt im Sommer 2019 mit über 3000 IP-Adressen an. Dieses Botnetz läßt sich viel Zeit zwischen zwei Login-Versuchen von einer individuellen IP, um der Fail2Ban-Falle zu entgehen. Wenn ein Angreifer ein solches Netz von IPs befehligt, bringt Fail2Ban nur bedingten Schutz. Ein regelmäßiger Blick in die Logdateien und weiträumiges Ausschließen per IPTABLES ist eine zusätzliche Sicherungsmaßnahme.

Ein leerer Referrer-String und immer derselbe Browserstring:

"-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Und ein aktueller Browserstring Anfang 2021 – ebenfalls mit einem leeren Referrer-String:

"-" "Mozilla/5.0(Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"

Ban Hackers listet Angreifer mit ihrer IP und dem Browserstring.

IPTABLES

-p, -- protocolDie Regel (TCP, UDP usw)
-s, -- sourceKann eine Adresse, ein Netzwerkname, ein Hostname usw. sein
-d, -- destinationKann eine Adresse, ein Netzwerkname, ein Hostname usw. sein
-j, -- jumpAufgabe der Regel, z.B. was tun, wenn ein Paket erwischt wird
-g, --goto chainAusführung wird in einer Kette (Chain) fortgesetzt
-i, --in-interfaceBenennt das Interface, von dem die Pakete empfangen werden.
-o, --out-interfaceName des Interface, das die Pakete sendet.
-f, --fragmentRegel wird nur auf das zweite und weitere Fragmente von fragmentierten Paketen angewendet
-c, --set-countersInitialisiert das Paket und einen Byte Counter der Regel

ACCEPT

Zuerst das Rein und Raus auf Port 80 (http) und 443 (https) generell akzeptieren.

iptables -I INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

-I fügt die Regel am Anfang ein, statt sie mit -A am Ende einzufügen.

Bestimmte IP-Adressen zum Login durchlassen – einloggen müssen sich die IP-Adressen natürlich dennoch.

iptables -I INPUT 3 -p tcp -s xxx.xxx.xxx.xxx --dport 22 -j ACCEPT

Portnummer oder Service

Wird der Port oder der Service in iptables nicht aufgeführt, werden alle Ports für die IP oder den IP-Bereich gesperrt. Wenn die Liste der gesperrten IP-Adressen länger wird, führt die Prüfung zu längeren Verbindungszeiten auch für Port 80. Also setzt man besser den Port oder den Service in die iptables-Regel ein:

iptables -A INPUT -s 216.212.240.141 -p tcp --destination-port 25 -j DROP

sperrt Port 25 (Email) für den Spammer auf der IP-Adresse.

iptables -I INPUT -s 192.168.1.100 -p tcp --dport ssh -j REJECT

sperrt ssh (einloggen) für die angeführte IP-Adresse

Einlog-Versuche auf SMTP Port 465 können z.B. so aussehen:

SSL_accept error from mail.shealytruck.com[64.53.45.177]: lost connection

Controll Network Traffic

Multiport: Port 25 und Port 465 mit einer Anweisung sperren

iptables -A INPUT -s 64.53.45.177 -p tcp -m multiport --dports smtp,ssmtp -j DROP

oder via Portnummern

iptables -A INPUT -s 204.79.180.0/24 -p tcp -m multiport --dports 25,465,587,143,993,110,995 -j DROP

<

Zugriff auf einen IP-Bereich

iptables -A INPUT -m iprange --src-range 74.125.229.164-74.125.229.174 -j DROP

Hereinkommende HTTP-Anfragen erlauben

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

25 Most Frequently Used Linux IPTables Rules Examples

DROP oder REJECT

Werden Pakete mit REJECT verworfen, beendet TCP die Verbindung und lässt den Absender wissen, dass die Verbindung fehlgeschlagen ist.
Das Ablehnen mit DROP hingegen gibt keine Informationen zurück, sondern hält den Absender für mindestens 100 Sekunden fest.

IPTABLES Regel löschen

iptables -D INPUT 4

um Regel no. 4 zu löschen. Vorher den Index mit iptables -L INPUT -n –line-numbers abfragen.

iptables-Regeln können auch über die IP gelöscht werden. Die Regel muss konform zur vorangegangenen Regel für das Einsetzen gehen.

          +-- Append - setzt die Regel
          |
iptables -A INPUT -s 107.174.236.78 -p tcp --destination-port 25 -j DROP

iptables -D INPUT -s 107.174.236.78 -p tcp --destination-port 25 -j DROP
          |
          +-- Delete – löscht die Regel

IPTABLES speichern und wiederherstellen

iptables-save > dateiname
iptables-restore dateiname oder iptables-restore -c < dateiname

IPTABLES leeren

iptables -F

Das Sperren einzelner IPs und selbst von großen Nummernkreisen ist eine kurzfristige Lösung, denn Angriffe kommen nicht von einer einzelnen IP, auch nicht aus einem Nummernkreis, sondern die Gefahr rührt aus den Bot-Netzen, die mit 50, 100 oder noch mehr IP-Nummern eine statische Liste von IPs ins Abseits setzen.

Iptables Recent

Recent, ein Modul von IPTABLES, zählt TCP-Verbindungsversuche und kann eine IP blockieren, wenn eine bestimmte Zahl von Verbindungen innerhalb einer bestimmten Zeit beobachtet wird. Allerdings kann Recent nicht zwischen erfolgreichen und nicht erfolgreichen Versuchen unterscheiden.

Drei Versuche innerhalb von 60 Sekunden kann man z.B. erlauben und alles darüber als einen Brute Force-Angriff ansehen. Aber selbst mit zwei Versuchen pro Minute kann ein Angreifer immer noch fast 3000 Passwörter pro Tag testen. Bei SSH-Zugriffen könnte ein Limit von 30 Versuchen innerhalb von 24 Stunden bessere Dienste leisten, aber diese Strategie kann einen Überraschungsangriff nicht abfangen, denn es dauert einen Tag, bis Recent die IP sperrt.

Nur eine neue SSH-Verbindung pro IP innerhalb von 5 Sek zulassen

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name sshattack
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 5 --hitcount 2 -j DROP

recent zählt TCP-Verbindungsversuche mit und blockiert ab einem Schwellwert weitere Angriffe von einer IP-Adresse.

  • –set schreibt die IP-Adresse einer Verbindung auf Port 22 mit einem Zeitstempel in die Proc-Datei /proc/net/ipt_recent/DEFAULT.
  • –update fügt einen weiteren Zeitstempel ein und prüft, ob zwei Zeitstempel innerhalb der letzten 60 Sekunden liegen.

iptables zeitlich begrenzen

Das geht nicht. Stattdessen kann man sich behelfen mit

iptables -I INPUT -s 85.25.226.171 -j DROP
echo "iptables -D INPUT -s 85.25.226.171 -j DROP" | at @10pm

oder einen Kommentar setzen und die Regeln von Zeit zu Zeit prüfen, ob die IP (z.B. bei Spam von einer IP-Adresse) wieder zugelassen werden soll:

iptables -A INPUT -s 85.25.226.171 -p tcp --destination-port 25 -j DROP -m comment --comment "2016-11 PlusServerAG"

Iptables bei Email-Attacken einsetzen

Ich sehe zunehmend Brute-Force-Email-Attacken, die dem Server eine große Last auferlegen. Die Versuche, Zugriff auf Emailkonten zu erlangen, können nicht ohne weiteres mit dem gleichen Schema abgefangen werden. Während sich reguläre Benutzer via SSH eher selten innerhalb kurzer Zeitfenster einloggen, holen die meisten Benutzer ihre Emails in Abständen von 5 Minuten ab.

Emailangriffe ausbremsen

iptables -A INPUT -p tcp --dport 25 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 180 --hitcount 3 -j DROP

Vielleicht lieber nicht nur für Port 25, sondern gleich

iptables -A INPUT -p tcp -m multiport --dports 25,110,143,993,995 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp -m multiport --dports 25,110,143,993,995 -m state --state NEW -m recent --update --seconds 180 --hitcount 3 -j DROP

Wird –name nicht angegeben, wird automatisch in DEFAULT geloggt.

Mit cat /proc/net/ipt_recent/DEFAULT bzw. /proc/net/xt_recent/DEFAULT prüft man, ob schon wer gefangen wurde.

src=217.160.252.130 ttl: 118 last_seen: 35221479277 oldest_pkt: 3 35216241084, 35221479277, 35221479277

Dabei kommen Login-Versuche und Mail-Attacken immer noch durch – klar, der erste und zweite Versuch. Und obendrein: Angreifer benutzen Bot-Netze mit einer ganzen Reihe von IP-Adressen und jede IP hat zwei Versuche frei. Mail-Attacken lassen sich nicht wirkungsvoll mit IPTABLES abwehren, allenfalls vielleicht ein wenig mildern.

klondike-firewall

SSH vor brute-force-Angriffen schützen

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

Explain Shell schön gemacht
cidr / vlsm supernet calculator IP-Bereich berechnen
Quelle Block SSH Brute Force Attacks with IPTables
Quelle IPTables für CentOS

How to block unwanted IP addresses on Linux efficiently IP sets sind ein Kernel Feature, das mehrere unabhängige IP-Adressen, Mac-Adressen und selbst Portnummern kodiert und speichert.

Block SSH Brute Force Attacks with IPTables
How to Block SSH and FTP Access to Specific IP and Network Range in Linux
Prüfen, ob eine IP bereits auf einer Blacklist steht

Am Rande

Wenn ich feststelle, dass meine IP-Adresse in einer Blacklist auftaucht, Postfix pausieren mit

postfix stop

ein paar Sekunden warten

mailq

und den user / host zu finden.

Geht aber auch in Plesk: Tools and Settings / Mail Mailserver Settings / Mail Queue

Links zu Hacker ausschließen – Ban

Ban Hackers listet wöchentlich Angreifer auf seine Webseite mit Browserstring und IP

Proxydocker IP-Suche

db ripe