Uncomplicated fail2ban

Da sich im Internet ja, wie hoffentlich hinlänglich bekannt, die diversesten Vollhonks und Nerv-Bots herumtreiben, habe ich für mich beschlossen den ganzen Angriffsversuchen ( oder zumindest Spielkindern ) einen Riegel vorzuschieben. Mein bisheriges Setup basierte auf einer Kombination aus fail2ban und iptables, welches aber nach und nach recht unübersichtlich wurde.
Die Entscheidung dieses Setup nun zu optimieren war also mehr als nur fällig. In diesem Fall ist das Ganze nun als ein Zusammenspiel aus
geworden.
Als erster Schritt wird das entsprechende Paket für ufw installiert:
root@ubuntu-server:~# apt install ufw
Jetzt muss die Firewall vordefiniert werden, um uns nach der Aktivierung nicht komplett auszusperren. In meinem Beispiel ist an eingehenden Ports beziehungsweise Services nur Folgendes relevant, also erlaubt:
- SSH: Port 22
- HTTP: Port 80
- HTTPS: Port 443
Alles Weitere ist per Definition geblockt, weswegen es absolut zwingend ist, diese Freischaltungen jetzt richtig zu setzen – ich kann es nicht oft genug betonen, aus seinem eigenen Server ausgesperrt zu sein ist unangenehm 🙂
Ein Teil der ufw-Konfiguration liegt unter /etc/default/ufw und wird in meinem Fall mit den Standardeinstellungen daherkommen, einzig IPv6 ist bei mir deaktiviert, da ich für meinen Server keinen IPv6-Connect verwende.
IPV6 = no
Nun aber die drei oben bereits benannten Freischaltungen aktivieren, was dann wie folgt aussehen muss:
root@ubuntu-server:~# ufw allow ssh
Rule added
root@ubuntu-server:~# ufw allow http
Rule added
root@ubuntu-server:~# ufw allow https
Rule added
Jetzt kann der entsprechende Service gestartet werden:
root@ubuntu-server:~# systemctl start ufw
root@ubuntu-server:~# ufw enable
Nicht wundern, hierdurch wird die SSH-Session getrennt, also einfach noch einmal neu anmelden. Sofern nun alles richtig eingetragen wurde, klappt das auch mit dem Nachbarn, ähm dem Login 🙂
Die Abfrage nach dem aktuellen Status sowie den eingetragenen Freischaltungen sieht somit jetzt so aus:
root@ubuntu-server:~# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
Final nun noch den automatischen Start konfigurieren, dass der Service auch nach einem Neustart wieder aktiv läuft. Das geschieht in der ufw-Konfiguration:
root@ubuntu-server:/etc/ufw# vi ufw.conf
und dort den entsprechenden Parameter setzen:
ENABLED=yes
Das zweite Paket ist nun fail2ban, welches ebenfalls installiert werden will.
root@ubuntu-server:~# apt install fail2ban
Die Konfiguration von fail2ban erfolgt nun in einem File, welches zuerst angelegt werden muss – jail.local. Die Konfigurationsanpassungen nicht in jail.conf vornehmen, da dieses File bei einem Paketupdate überschrieben wird.
root@ubuntu-server:/etc/fail2ban# cp jail.conf jail.local
Diese nun kopierte Konfigurationsdatei wird in zwei Sektionen erweitert. Unter [DEFAULT] um folgende Parameter ( bereits vorhandene Einträge ergänzen oder ersetzen ):
[DEFAULT]
bantime = 48h
findtime = 5m
maxretry = 5
banaction = ufw
und unter [sshd] um folgende Parameter ( sollten hierin bereits Einträge vorhanden sein, einfach überschreiben ):
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Erläuternd noch zu dieser Konfiguration, welche natürlich an die jeweiligen Anforderungen angepasst werden kann:
- bantime: Ein potentieller Angreifer wird für 30 Tage geblockt
- findtime: Die definierten Fehlversuche müssen innerhalb einer Stunde erfolgen
- maxretry: Sperrung erfolgt nach 5 Fehlversuchen in der durch „findtime“ definierten Zeitspanne
Um die Konfiguration nun aber auch greifen zu lassen, wird fail2ban gestartet und im Nachgang auch noch einmal der sshd:
root@ubuntu-server:/etc/fail2ban# systemctl start fail2ban
root@ubuntu-server:/etc/fail2ban# systemctl restart sshd
Details, ob auch alles korrekt initialisiert wurde, finden sich im entsprechenden Logfile /var/log/fail2ban.log.
Abschliessend noch eine kleine Sammlung von nützlichen Kommandos, welche ich immer wieder verwende respektive benötige:
fail2ban (Jail-)Status anzeigen
fail2ban-client status
Detailstatus ufw anzeigen
ufw status verbose
Eine explizite ufw-Regel entfernen ( laufende Nummer aus „ufw status numbered“ )
ufw delete [number]
Eine explizite Adresse eingehend freigeben
ufw allow 123.456.789.0
Eine explizite Adresse eingehend blocken
ufw deny 123.456.789.0
Einen speziellen Port ausgehend blocken
ufw deny out 25
blocking, Bots, Open Source, Ubuntu
galak
Danke für den hilfreichen Artikel, ich krebse auch gerade durch die Konfiguration für fail2ban und ufw, da kam deine Anleitung wie gerufen!
Sven Neidahl
Freut mich, dass der Artikel hilfreich ist … viel Erfolg dann beim Abhalten von „ungebetenen Gästen“ 🙂