fail2ban ist ein sehr, sehr praktisches Werkzeug (http://www.fail2ban.org). Und jeder, der fail2ban regelmäßig nutzt hat sich selbst schon einmal ausgesperrt. Gut dem, der eine statische IP hat und diese via ignoreip auf die Whitelist gesetzt hat (http://www.fail2ban.org/wiki/index.php/Whitelist). Pech hingegen für mich, der bei der deutschen Tel… unter Vertrag ist, privat einen DSL Anschluss hat und nicht bereit ist die extrem hohen Kosten für einen Vertrag mit statischer IP zu zahlen.

Dynamische IP-Adresse

Das Problem dabei ist, dass dynamische IP-Adressen sich so dann und wann ändern. Nur was trägt man in einer Witelist ein die statischer Natur ist? So wie von fail2ban verwendet?

Was ich hingegen habe ist einen passenden Eintrag ins DNS der auf meine wechselnde IP zeigt (DynDNS oder wie auch immer ihr das Kind nennen wollt). Also fix ein Skript erstellt welches im tmp-Verzeichnis die dazugehörige IP puffert. Sobald sich diese ändert wird eine passende fail2ban local Config erstellt und die komplette Config neu eingelesen. Da ich ebenfalls auf eine Leitung mit statischer IP-Adresse zugriff habe wird ignoreip eben mit diesem statischen Teil befüllt und anschließend um den dynamischen Teil erweitert.

#!/bin/bash

#
# Whitelisted eine dynamische IP in Fail2ban
#


IGNALWAYS="127.0.0.1/8 ::1 193.nn.mm.0/24"
IGNDYN="dyn.gehirn-mag.net"
IGNFILE="/etc/fail2ban/jail.d/ignoreip.local"
TMPFILE="/tmp/fail2ban-dynip"


# Suche nach aktueller IP sowie gepufferter IP
CURIP=$($(which dig) +short $IGNDYN)
[ -f $TMPFILE ] && OLDIP=$(cat $TMPFILE) || OLDIP="--unknown--"
echo "aktuelle IP: $CURIP gepufferte IP: $OLDIP"

# Falls IPs verschieden ignoreip neu schreiben
if [ $CURIP != $OLDIP ]; then
    echo -n "Ändere ignoreip: "
    echo $CURIP > $TMPFILE
    echo -e "# written by $0 ad $(date)\\n\\n[DEFAULT]\\nignoreip = $IGNALWAYS $CURIP\\n" > $IGNFILE
    $(which fail2ban-client) reload
    # Debug
    $(which fail2ban-client) --dp | mail -s "$(hostname) fail2ban-dynip $CURIP" ...@gehirn-mag.net
fi

 

Falls Du weißt welchen DNS-Server Du fragen musst kannst Du Zeile 15 entsprechend ergänzen. Sowie sich die IP ändert lasse ich mir via Email die aktuelle fail2ban Konfig senden (Zeile 26). Wer das nicht will nimmt diese Zeile einfach raus. Was jetzt noch fehlt ist der regelmäßige Aufruf. Ich selbst verwende dazu folgenden cron Eintrag welcher alle 15 Minuten läuft:

# Fail2ban: die private IP auf die Whitelist setzen
*/15 * * * * /usr/local/bin/fail2ban-ignoreip.sh 2>&1 | /usr/bin/logger -t fail2ban-dynip

Fertig, das war es 🙂