Von Hause aus unterstützt Fail2Ban bis einschließlich Version 0.9 nur IPv4-Adressen. Durch eine recht kleine Anpassung lässt es sich jedoch auch auf IPv6 erweitern. Im folgenden Abschnitt wird beschrieben welche Anpassungen vorgenommen werden müssen, damit Fail2Ban auch IPv6 Adressen erkennt und gegebenenfalls blockiert.

Hinweis: Ab Version 0.10 unterstützt Fail2Ban standardmäßig IPv4 und IPv6, wodurch die hier gezeigten Patches nicht mehr nötig sind.

 

Alle im folgenden gezeigten Dateien sind auch in unserem zugehörigen GitLab-Repository zu finden und können von dort aus heruntergeladen werden.

IPv4/IPv6 Weiche

Zuerst muss im Verzeichnis /usr/bin/ eine Datei als Weiche zwischen IPv4 und IPv6 mit folgendem Inhalt erstellt werden:


Zur Vereinfachung kann diese Datei auch direkt aus unserem Repository mit Hilfe von wget heruntergeladen werden:

wget -O /usr/bin/ip64tables "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/master/ip64tables"

Anschließend machen wir die Datei noch ausführbar:

chmod +x /usr/bin/ip64tables

Neue Aktion bei Fail2Ban hinzufügen

Im Verzeichnis /etc/fail2ban/action.d/ legen wir zwei Dateien mit folgendem Inhalt an:



Zur Vereinfachung können diese beiden Dateien auch direkt aus unserem Repository mit Hilfe von wget heruntergeladen werden:

wget -O /etc/fail2ban/action.d/ip64tables-multiport.conf "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/master/ip64tables-multiport.conf"
wget -O /etc/fail2ban/action.d/ip64tables-allports.conf "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/master/ip64tables-allports.conf"

 

Fail2Ban-Dateien Patchen

Damit Fail2Ban die IPv6-Adressen auch richtig erkennt, müssen die beiden Dateien failregex.py und filter.py gepachtet werden.

Je nach Fail2Ban-Version sind dafür unterschiedliche Patches nötig.

Die aktuell verwendete Version von Fail2Ban kann über den folgenden Befehl ermittelt werden:

nutzer@server:~$ fail2ban-server -V
Fail2Ban v0.9.3

Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

Written by Cyril Jaquier <cyril.jaquier@fail2ban.org>.
Many contributions by Yaroslav O. Halchenko <debian@onerussian.com>.

Abhängig von der Version legen wir zuerst die zwei patch-Dateien im Verzeichnis /tmp an, beziehungsweise laden diese mit Hilfe von wget direkt aus dem Repository herunter.

Im Folgenden sind die patch-Dateien für Fail2Ban ab v0.9.1 zu finden. patch-Dateien für ältere Versionen sind im Repository enthalten.

Fail2Ban v0.9.3, v0.9.4, v0.9.5
(Debian stretch/sid, Ubuntu wily/xenial)



wget -O /tmp/failregex.patch "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/fail2ban-v0.9.3/failregex.patch"
wget -O /tmp/filter.patch "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/fail2ban-v0.9.3/filter.patch"

Fail2Ban v0.9.1 (Ubuntu vivid)



wget -O /tmp/failregex.patch "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/fail2ban-v0.9.1/failregex.patch"
wget -O /tmp/filter.patch "https://git.cryhost.de/crycode/fail2ban-ipv6-patch/raw/fail2ban-v0.9.1/filter.patch"

 

Anschließend wenden wir die beiden Patches noch an, wobei je nach System die py-Dateien unter /usr/share/fail2ban/server/ oder /usr/lib/python3/dist-packages/fail2ban/server/ liegen:

patch -l -b /usr/share/fail2ban/server/failregex.py /tmp/failregex.patch
patching file /usr/share/fail2ban/server/failregex.py

patch -l -b /usr/share/fail2ban/server/filter.py /tmp/filter.patch
patching file /usr/share/fail2ban/server/filter.py

Beziehungsweise:

patch -l -b /usr/lib/python3/dist-packages/fail2ban/server/failregex.py /tmp/failregex.patch
patching file /usr/lib/python3/dist-packages/fail2ban/server/failregex.py

patch -l -b /usr/lib/python3/dist-packages/fail2ban/server/filter.py /tmp/filter.patch
patching file /usr/lib/python3/dist-packages/fail2ban/server/filter.py

Durch den Parameter -b wird beim Patchen jeweils ein Backup der Originaldatei (failregex.py.orig bzw. filter.py.orig) angelegt. Sollte etwas schief gehen kann damit jederzeit der Ausgangszustand wiederhergestellt werden.

Einstellungen anpassen

Damit Fail2Ban die neuen Aktionen verwendet müssen alle banaction-Einträge in der Datei jail.local angepasst werden.

Dabei ändern wir überall in der Datei iptables-multiport in ip64tables-multiport und iptables-allports in ip64tables-allports. Sollten noch andere Aktionen im Einsatz sein, so müssen diese gegebenenfalls auch angepasst werden.

Fail2Ban neustarten und iptables sowie ip6tables kontrollieren

Damit die Änderungen wirksam werden muss Fail2Ban neugestartet werden:

systemctl restart fail2ban.service beziehungsweise /etc/init.d/fail2ban restart

Anschließend kontrollieren wir noch die aktuellen iptables und ip6tables:

iptables -L -n -v
ip6tables -L -n -v

Wenn alles geklappt hat, dann sind jetzt in beiden Ausgaben die Regeln und Ketten (Chain) von Fail2Ban zu sehen.