Fail2ban und Docker

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.

 

Schaubild

 

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":"&lt;HOST&gt; .*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 &lt;ip&gt; -j DROP

actionunban = iptables -D DOCKER -s &lt;ip&gt; -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.