fail2ban: Update zerstört Konfiguration
Alle paar Wochen sehe ich auf meinem Server üblicherweise nach dem Rechten:
- Ist bei Docker alles ok?
docker ps
- Werden die Backups korrekt erzeugt?
borgmatic repo-info
- Funktionieren meine Abwehrmaßnahmen?
iptable -n -L
- Laufen meine Daemons zur Update-Automation?
htop /server-config
Dieses mal allerdings zeigte iptable
mir gähnende Leere. Das ist ungewöhnlich und deutet darauf hin, dass mit fail2ban etwas nicht stimmt.
schallbert@machine:~# iptables -n -L
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-FORWARD all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
target port opt source destination
Übersetzt lautet die Ausgabe etwa in etwa
“Die
FORWARD
-Chain leitet wie von Docker benötigt an die für Container relevanteDOCKER-USER
-Chain weiter. Unter dieser sind allerdings keine Anwendungen gelistet, die Pakete zurückweisen oder deren Weiterleitung verbieten (REJECT/DROP
) können.”
An dieser Stelle müssten zwei Einträge für caddy-server
und caddy-ratelimit
auftauchen.
“fail2ban ERROR Failed during configuration”
Also schaue ich zuerst mal bei Docker nach:
docker logs -t fail2ban # Logs für den Container mit Namen fail2ban mit Zeitempel ausgeben
Statt wie üblich nach dem Durchscrollen mit <timestamp> Server ready
belohnt zu werden, bekomme eine nicht enden wollende Flut an Logmeldungen angezeigt. Sie wiederholen sich und zeigen, dass fail2ban mit Exit with code 255
aussteigt. Einen besseren Überblick liefert mir das Log, wenn ich nur die letzten 100 Zeilen ausgebe:
docker logs -t --tail 100 fail2ban # Nur die letzten 100 Zeilen des Logs ausgeben, mit Zeitstempel
Die Fehlermeldung
<timestamp, ID> ERROR Failed during configuration: Bad value substitution:
option 'action' in section 'caddy-ratelimit' contains an interpolation key 'banaction' which is not a valid option name.
Raw value: '%(action_)s'
Die Meldung ist interessant, weil ich genau an dieser Stelle auch schon beim Erstellen im Zuge des Artikels Fail2ban mit Caddy Probleme mit der jail.local
hatte. Damals musste ich action = iptables-multiport
aus der Konfiguration nehmen, weil die auslösenden IP-Adressen auf der falschen CHAIN
(INPUT) gelandet waren.
Nun scheint also die default-action auf der DOCKER-USER
chain nicht mehr zu funktionieren. Also gehe ich ins Netz und suche nach ein paar Quellen für eine mögliche Lösung. Ich finde aber weder in der Update-Historie von fail2ban noch in der von mir benutzten Distribution von linuxserver.io Hinweise auf Updates, die hier große Änderungen im action.d
Ordner veranlassen würden.
Lösung per banaction = iptables[type=multiport]
Also bemühe ich die Websuche und finde einen Kommentar eines Maintainers von fail2ban:
“[…] With action = iptables[type=multiport, protocol=tcp, chain=DOCKER-USER] you overwrote the default action […] [Solution:] simply set the chain variable only in the jail […]:
port = http, https banaction = iptables[type=multiport] chain = DOCKER-USER
”
Die Grundlage dieser Aussage kann man in den Docker Docs nachlesen. Nebenbemerkung: An allen Stellen wird empfohlen, für zukünftige Anwendungen das modernere nftables statt iptables zu verwenden. Hier gibt es einen Artikel zum Thema.
Somit kann ich das bisher in meiner jail.local
vorhandene action
-Feld komplett löschen und stattdessen banaction
verwenden. Sie sieht nun wie folgt aus:
# jail.local update Oct-2025
# Server/Client errors: 401 403 404 500
[caddy-status]
enabled = true
chain = DOCKER-USER
port = http,https
filter = caddy-status
logpath = <path/to/logfiles>
findtime = 10min
maxretry = 5
bantime = 1d
banaction = iptables[type=multiport]
Mit dieser Konfiguration fährt fail2ban normal hoch und gibt Server ready
aus.
Überprüfen der Lösung mittels iptables
Ich erzeuge mir wie oben beschrieben Einträge in den Test-Logfiles, welche die Aktionen von caddy-status
und caddy-ratelimit
auslösen sollen. Wie erwartet erhalte ich in der “blocklist”:
schallbert@machine:~# iptables -n -L
Chain DOCKER-USER (1 references)
target prot opt source destination
f2b-caddy-ratelimit tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
f2b-caddy-status tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443