Schilde hoch: fail2ban und ufw
Mein Server ist täglich unter Beschuss: Ständig versuchen irgendwelche Verbindungen, Passwörter zu knacken und Konten zu nutzen. Eine fehlgeschlagene SSH-Verbindung erzeugt zum Beispiel Logfile-Einträge in /var/log/auth.log
so wie diesen:
Jan 5 00:00:51 www sshd[24083]: Failed password for root from 222.186.15.31 port 46567 ssh2
Mit dem Tool fail2ban kann man diese und andere Logfiles überwachen. Treten innerhalb einer gewissen Zeit eine Anzahl solcher Fehler auf, darf man annehmen, dass es sich nicht um Zufall oder Versehen handelt: Hier probiert jemand. fail2ban
sperrt daraufhin die IP des Angreifers für eine Zeit in der Firewall, sodass überhaupt keine weiteren Versuche mehr möglich sind.
Darüber schreibt fail2ban
selbst auch ein Logfile in /var/log/fail2ban.log
, das dann so ausschaut:
2020-01-08 20:03:03,408 fail2ban.filter [533]: INFO [sshd] Found 222.186.15.31 - 2020-01-08 20:03:03
2020-01-08 20:03:03,550 fail2ban.actions [533]: NOTICE [sshd] Ban 222.186.15.31
...
2020-01-08 20:13:04,697 fail2ban.actions [533]: NOTICE [sshd] Unban 222.186.15.31
Hier wurde also die IP-Adresse 222.186.15.31 aufgrund von mehrfachen Anmeldefehlern gesperrt und nach etwa 10 Minuten wieder freigegeben. Aber wie häufig passiert das? Das kann man sehr schön auf diese Weise herausfinden:
$ sudo awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n
...
12 49.88.112.62
13 218.92.0.212
13 222.186.175.151
13 222.186.175.202
13 222.186.175.215
13 222.186.180.41
13 222.186.180.9
14 222.186.169.194
14 222.186.173.238
14 222.186.175.148
14 222.186.175.217
14 49.88.112.61
14 91.209.54.54
15 222.186.173.183
15 222.186.175.181
15 222.186.180.223
16 104.131.14.14
16 222.186.175.155
16 222.186.180.6
16 96.53.65.154
17 222.186.175.163
17 222.186.180.17
17 222.186.190.2
18 222.186.173.226
18 222.186.42.4
20 222.186.175.161
20 222.186.175.167
22 49.88.112.117
32 222.186.190.17
399 222.186.3.249
Die erste Zahl gibt dabei an, wie häufig die betreffende IP gesperrt wurde. Die letzte Zeile 399 222.186.3.249
bedeutet somit: 399 Mal wurde die IP 222.186.3.249 aufgrund von zuvielen Fehlversuchen für eine Weile gesperrt, und wieder entsperrt. Hier ist eine dauerhaftere Lösung gefragt. Ich versuche also zunächst herauszufinden, woher die Verbindungen kommen.
Im Report oben sind Adressen aus dem Bereich 222.186.x.x häufig. Mit dem Kommando whois
findest du heraus, wem diese IP-Adressen gehören:
$ whois 222.186.3.249
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object
refer: whois.apnic.net
inetnum: 222.0.0.0 - 222.255.255.255
organisation: APNIC
status: ALLOCATED
whois: whois.apnic.net
changed: 2003-02
source: IANA
% [whois.apnic.net]
% Whois data copyright terms http://www.apnic.net/db/dbcopyright.html
% Information related to '222.184.0.0 - 222.191.255.255'
% Abuse contact for '222.184.0.0 - 222.191.255.255' is 'anti-spam@ns.chinanet.cn.net'
inetnum: 222.184.0.0 - 222.191.255.255
netname: CHINANET-JS
descr: CHINANET jiangsu province network
descr: China Telecom
descr: A12,Xin-Jie-Kou-Wai Street
descr: Beijing 100088
country: CN
...
Antwort: Diese IP-Adresse gehört zu einem immerhin 8 /16er-Netze großen Adressbereich, der China Telecom zugeordnet ist. Und viele weitere Adressen aus diesem Bereich spielen in meinem fail2ban-Report oben eine Rolle. Die Adresse 49.88.112.117 gehört zu einem sogar 32 16/er-Netze großen Bereich, der ebenfalls China Telecom gehört. Ein Gefühl sagt mir, dass eine Email an die abuse-Stelle wenig Hilfe bringen wird, also helfe ich mir selbst. Da ich hier auf niemanden Rücksicht nehmen muss, kommen einfach ganze Netzbereiche der China Telecom per Shell-Einzeiler in die Sperrliste der Debian ufw-Firewall.
# Block IPs 222.184.0.0/16 to 222.191.0.0/16
for i in $(seq 184 191); do sudo ufw deny from 222.$i.0.0/16; done
# Block IPs 49.64.0.0/16 to 49.95.0.0/16
for i in $(seq 64 95); do sudo ufw deny from 49.$i.0.0/16; done
Um zu kontrollieren, ob das richtig angenommen wurde, verwende ich den Befehl ufw status
.
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
Anywhere DENY IN 49.64.0.0/16
Anywhere DENY IN 49.65.0.0/16
Anywhere DENY IN 49.66.0.0/16
Anywhere DENY IN 49.67.0.0/16
...
Ein Tipp: Die Reihenfolge der Regeln in ufw ist wichtig. Wer dort also zuerst eine Regel ALLOW IN Anywhere
stehen hat und danach Sperrregeln wie die oben, wird keinen Erfolg haben. Die Reihenfolge der Regeln ist über das ufw-Tool leider nicht direkt zu ändern, am einfachsten bearbeitest du die Datei /etc/ufw/user.rules
mit dem Editor deiner Wahl und lädst ufw danach mit dem Kommando sudo ufw reload
neu.