Docker Container mit Fail2ban schützen

Für viele unter euch dürfte Fail2ban ein Begriff sein. Für diejenigen die nichts damit anfangen können hier eine Kurze Beschreibung. Fail2ban ist ein in Python geschriebenes IPS (Intrusion Prevention System), welches es ermöglicht IP Adressen nach gewissen Kriterien zu blockieren.

Ich möchte euch hier zwei Konfigurationen Zeigen mit welchen es möglich ist Bitwarden_rs sowie Nextcloud ein wenig sicherer zu machen. Dazu habe ich Fail2ban mit folgendem Befehl auf dem Host Server installiert.

sudo apt-get install fail2ban

Anschließend erstellten wir ein leeres jail.local File oder wenn man schon eines hat kann auch dieses verwendet werden.

sudo nano /etc/fail2ban/jail.local

Hier kann man dann folgende Config einfügen.

[DEFAULT]
bantime = 24h
findtime  = 30m
maxretry = 3
 
[bitwarden_rs]
enabled = true
port = 9001
filter = bitwarden_rs
action = iptables-allports[name=bitwarden_rs, chain=FORWARD]
logpath = /opt/docker/bitwarden/bitwarden.log
 
[bitwarden_rs-admin]
enabled = true
port = 9001
filter = bitwarden_rs-admin
action = iptables-allports[name=bitwarden_rs-admin, chain=FORWARD]
logpath = /opt/docker/bitwarden/bitwarden.log
 
[nextcloud]
filter = nextcloud
port = 9003
backend = auto
enabled = true
protocol = tcp
action = iptables-allports[name=nextcloud, chain=FORWARD]
logpath = /opt/docker/nextcloud/html/data/nextcloud.log

Damit das Ganze auch bei euch funktioniert müsst ihr die Ports sowie den logpath zu den jeweiligen Logs anpassen. Nachdem wir das Jail erstellt haben, kümmern wir uns um die Filter welche unter „/etc/fail2ban/filter.d“ liegen. Hier müssen wir für jedes Jail eine dazugehörige Filterdatei inkl. Inhalt erstellen.

sudo nano /etc/fail2ban/filter.d/bitwarden_rs.local

[INCLUDES]
before = common.conf
 
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =
sudo nano /etc/fail2ban/filter.d/bitwarden_rs-admin.local

[INCLUDES]
before = common.conf
 
[Definition]
failregex = ^.*Invalid admin token\. IP: <ADDR>.*$
ignoreregex =
sudo nano /etc/fail2ban/filter.d/nextcloud.local

[Definition]
failregex=^.*Login failed: '?.*'? \(Remote IP: '?<HOST>'?\).*$
           ^.*\"remoteAddr\":\"<HOST>\".*Trusted domain error.*$
ignoreregex =

Wenn alles erledigt ist muss Fail2ban neu gestartet werden und die Regeln sind aktiv. Überprüfen kann man dies im Logfile unter „/var/log/fail2ban.log“.

Sobald man 3 mal innerhalb von 30 Minuten das Kennwort falsch eingibt, wird die IP Adresse gesperrt und ein Zugriff über diese IP ist für 24 Stunden nicht mehr möglich.