IP-Adresse blocken mit UFW

Spammer gehören bestraft! Mit der UFW (Uncomplicated Firewall) eine leichte Übung. Damit kann man IP-Adressen (oder ganze Netzwerke) aussperren.

Läuft UFW überhaupt?

ufw status

Wenn hier Status: inactive kommt, läuft UFW nicht und muß erst gestartet werden. Dies geschieht mit

ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Die UFW wird als Dienst eingerichtet und beim Booten automatisch gestartet.

Disablen mit

ufw disable
Firewall stopped and disabled on system startup

IP-Adresse blockieren

Angenommen, der Feind ist 192.168.169.170, dann geschieht das mit dem Befehl

ufw deny from 192.168.169.170 to any

oder mit Portnummer

ufw deny from 192.168.169.170 to any port 80

Prüfen mit

ufw status numbered

Die generelle Syntax ist

ufw deny proto {tcp|udp} from {IP-Addresse} to any port {Portnummer}

Ein ganzes Subnet blocken

ufw deny proto tcp from 192.168.169.0/24 to any port 22

Regel wieder entfernen

ufw status numbered
ufw delete NUMMER

NUMMER ist die Zahl in eckigen Klammer zu Beginn jeder Zeile, zum Beispiel löschen von Regel № 1:

ufw delete 1
Deleting:
deny from 192.168.169.170 comment 'Spammer blockieren'
Proceed with operation (y|n)? y

Regel an erster Stelle der Kette einfügen

Vermutlich existieren aber bereits verschiedene Regeln in der Kette, wie zum Beispiel “Port 22 und 80 erlaubt”, sodaß die obigen Befehle wirkungslos bleiben werden, da die neuen Regeln hinten angehängt werden.

Die Firewall (iptables) arbeitet nämlich die Regeln zeilenweise ab und bricht nach der ersten Übereinstimmung ab. Wenn es also bereits eine Regel gibt die Port 80 erlaubt, und erst danach eine Regel erstellt wird die die IP-Adresse 192.168.169.170 blockt, so wird ein Angriff auf Port 80 von dieser IP-Adresse funktionieren.

Damit dies aber trotzdem geblockt wird, fügt man die Regel an erster Stelle der Kette ein.

ufw insert 1 deny from 192.168.169.170 comment 'Spammer blockieren'

Prüfen mit

ufw status numbered

ergibt etwas wie

Status: active

To Action From
-- ------ ----
[ 1] Anywhere DENY IN 192.168.169.170       # Spammer blockieren
[ 2] 20/tcp ALLOW IN Anywhere
[ 3] 21/tcp ALLOW IN Anywhere
[ 4] 22/tcp ALLOW IN Anywhere
[ 5] 25/tcp ALLOW IN Anywhere
[ 6] 53/tcp ALLOW IN Anywhere
[ 7] 80/tcp ALLOW IN Anywhere

before.rules

Eine Alternative zu ufw insert ist die Datei before.rules. In dieser Datei werden die Regeln eingetragen, die vor den benutzerdefinierten Regeln greifen sollen.

vi /etc/ufw/before.rules

Nach der Zeile

# End required lines

die Regeln einfügen, z. B.:

# Block spammers 
-A ufw-before-input -s 192.168.169.170 -j DROP

Wir verwenden DROP anstatt REJECT, weil dann der Angreifer keine Rückmeldung von iptables bekommt. Als wie wenn der Port nicht lauschen würde.

Danach die Firewall neu laden

ufw reload

Regeln anzeigen

iptables -L