Fail2ban – Einbrecher, Spammer, Scriptkiddies – alle müssen draußen bleiben. Einfach zu installieren, simpel zu bedienen, zuverlässig im täglichen Gebrauch. Als Serverbetreiber kommt man eigentlich kaum an diesem kleinen Tool vorbei. Doch wie funktioniert der Schutz von Docker Containern?
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.
Wird Fail2ban als Bestandteil der Zielumgebung installiert, dann bleibt der Container unabhängig. Für die Interpretation der Filter muss das Tool allerdings Zugriff auf die Containerlogfiles bekommen. Im folgenden Beispiel befinden sich Fail2ban, Docker Host und Container auf einem Ubuntu Server mit iptables. Fail2ban soll die SSH Zugriffe auf den Ubuntu Server und die HTTP Zugriffe auf den Docker Container überwachen und schützen.
Konfiguration
Die SSH-Zugriffe werden sofort nach der Installation von Fail2ban überwacht. Für dieses Beispiel genügt die Out-of-the-box Einstellung. Zur Überwachung der HTTP Zugriffe auf den Docker Container werden ein neues Jail, ein Filter und eine Action benötigt. Nach der Rekonfiguration muss Fail2ban noch durchgestartet werden. Anschließend wird das neue Jail beachtet und der Docker Container ist geschützt.
Alle Files können aus Bitbucket herunter geladen werden.
Jail
In den Jailoptions werden Filter und Action referenziert. Das zu überwachende Logfile für den Docker Container liegt auf dem Docker Host unter „/var/lib/docker/containers/<CONTAINERID>/<CONTAINERID>-json.log“
[docker] enabled = true port = http,https filter = docker-filter action = docker-action logpath = /var/lib/docker/containers/*/*-json.log
Filter
Der neue Filter kann beliebige regular expressions zum Aufspüren bösartiger Logeinträge enthalten. Als Beispiel werden hier hinterlistige WordPress XML-RPC-Attacken ausgefiltert.
[Definition] failregex = ^{"log":"<HOST> .*POST .*xmlrpc\.php.* ignoreregex =
Action
Anders als die Out-of-the-box Action wirken „actionban“ und „actionunban“ nicht auf die INPUT-Chain, sondern auf die für Docker zuständige FORWARD-Chain „DOCKER“.
[Definition] actionstart = actionstop = actioncheck = iptables -n -L FORWARD | grep -q 'DOCKER[ \t]' actionban = iptables -I DOCKER 1 -s <ip> -j DROP actionunban = iptables -D DOCKER -s <ip> -j DROP
Fazit
Installation und Konfiguration sind schnell und einfach erledigt. „Fail2ban und Docker“ funktioniert gut für kleine, kompakte Systeme, die wenig vom Standard abweichen.