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 🙂
Hmm … eigentlich sollte ‚ignoreip‘ auch direkt mit DNS Namen arbeiten können laut Doku:
# „ignoreip“ can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
Hättest du daher nicht so was machen können? ->
ignoreip = dyn.gehirn-mag.net
Liebe Grüße … Emilio
Ja schon, aber nicht in diesem Fall. Die meisten Tools lösen den DNS Namen beim Start auf und verwenden während der ganzen Laufzeit diese dort ermittelte IP. Bei statischen IPs ist jetzt alles wunderbar, bei dynamischen wird das nur wenige Stunden gut gehen. Systeme wo regelmäßig DNS Anfragen stellen um Änderungen zu erkennen, haben immer irgendwo die Einstellmöglichkeit mit der man angeben kann in welchem zeitlichen Abstand dies der Fall sein soll.
Da ich wenig Ahnung von Programmierung habe wäre meine Frage wie ich mehrere dynamische Adressen einpflegen kann ? Ich habe im Büro und zu Hause ein dyn Adresse.
Andere Frage : muss ich in der original jail.local etwa ändern ? Dort gibt es bereits einen Eintrag ignoreip. Muss ich den so lassen oder löschen oder ?
Hallo Ralph.
Für mehrere dynamische IP-Adressen müssest Du in der Tat das Skript entsprechend anpassen.
Den Eintrag in der Konfig-Datei kannst stehen lassen, die später geladene überschreibt diesen Wert. Kann allerdings übersichtlicher sein, den Wert in der jail.local zu löschen.
Die Reihenfolge der verwendeten Konfigdateien von fail2ban (Auszug aus man jail.conf):
The order e.g. for jail configuration would be:
jail.conf
jail.d/*.conf (in alphabetical order)
jail.local
jail.d/*.local (in alphabetical order).
Grüße
Steffen
Danke dir
Ich habe mir etwas gebastelt was mir 2 dyn ip s abfragt.