Uncomplicated fail2ban

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

2 Kommentare zu “Uncomplicated fail2ban

  1. Danke für den hilfreichen Artikel, ich krebse auch gerade durch die Konfiguration für fail2ban und ufw, da kam deine Anleitung wie gerufen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.