iptables

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

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. Zugriffe für ganze Nummernkreise sperren

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
-p, -- protocol Die Regel (TCP, UDP usw)
-s, -- source Kann eine Adresse, ein Netzwerkname, ein Hostname usw. sein
-d, -- destination Kann eine Adresse, ein Netzwerkname, ein Hostname usw. sein
-j, -- jump Aufgabe der Regel, z.B. was tun, wenn ein Paket erwischt wird
-g, --goto chain Ausführung wird in einer Kette (Chain) fortgesetzt
-i, --in-interface Benennt das Interface, von dem die Pakete empfangen werden.
-o, --out-interface Name des Interface, das die Pakete sendet.
-f, --fragment Regel wird nur auf das zweite und weitere Fragmente von fragmentierten Paketen angewendet
-c, --set-counters Initialisiert das Paket und einen Byte Counter der Regel

Controll Network Traffic

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 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

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-Einträge 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