Dynamische IP automatisch bei Fail2ban whitelisten

| Keine Kommentare

Die Angriffe auf öffentlich erreichbare Server sind eine nervige Angelegenheit. Einige Milderung bringt da Fail2ban. Fail2ban überprüft, ob es von einer IP-Adresse aus mehrere erfolglose Anmeldeversuche gab, z.B. über SSH. Ist eine eingestellte Anzahl an solch erfolglosen Versuchen erfolgt, wird der Zugriff von dieser IP gesperrt.
Was gegen Angriffe von außen sehr hilfreich ist (es ist wirklich interessant zu sehen, wie viele Adressbuch-Attacken es täglich gibt), kann bei dem eigenen Anschluss extrem nerven. Vor allem, wenn mehrere Leute Server-Dienste, wie ownCloud oder Mail nutzen und sich so die Wahrscheinlichkeit für fehlerhafte Passworteingaben erhöht. Leider bekommt man als Nicht-Geschäftskunde vom Provider meist nur dynamische IP-Adressen vergeben, so dass man auch nicht eine statische IP whitelisten kann (was bewirken würde, dass diese IP von Fail2ban ignoriert wird).
Internet photo

Aus diesem Grund habe ich mich daran gemacht und ein kleines Skript geschrieben, womit die IP vom eigenen Anschluss immer wieder automatisch gewhitelisted wird.
Zunächst muss auf einem Rechner, der an dem Anschluss hängt die externe IP abgefragt werden und in eine Textdatei geschrieben werden:
dig +short myip.opendns.com @resolver1.opendns.com > /path/to/file/wanip.txt

Diese Datei schiebe ich dann mit rsync über SSH auf den Server (hierfür muss zunächst der Login über einen Key eingerichtet werden – ohne Passwortabfrage). Für beides lege ich einen Cronjob an. Hierzu zunächst root werden:

sudo su

und dann einen cronjob anlegen, indem man

crontab -e

aufruft und hier folgendes einträgt:


#Alle 5 Minuten die IP abfragen und per rsync auf den Server schieben
*/5 * * * * rsync -azbe 'ssh -i /path/to/key/key_rsa' /path/to/file/wanip.txt user@example.com:/path/to/file/

Auf dem Server muss ebenfalls ein Skript angelegt werden. Dazu z.B. mit Nano eine neue Datei anlegen:
nano /usr/local/bin/fail2ban-ip-whitelisting.sh

und hier folgendes einfügen und den eigenen Gegebenheiten anpassen:


#!/bin/bash
IPn=`cat /path/to/file/wanip.txt`
IPo=`cat /path/to/file/wanip_old.txt`
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ 176.28.21.39\/24\ "
CONFIG_FILE=/path/to/file/jail.local

if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /path/to/file/wanip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fai2ban neu gestartet" | mail -s "[Fail2ban] IP Whitelisting" postmaster@example.com
fi

Das Skript vergleicht die IP in der synchronisierten Textdatei mit einer vorher angelegten, in welcher sich die alte IP befindet. Wenn die IP sich unterscheiden fügt das Skript einige fest angelegte IP und die übermittelte IP in die Ignore-Liste von Fail2ban ein und startet anschließend Fail2ban neu. Damit dies funktioniert müssen noch einige Dinge erledigt werden.

Zunächst muss das Skript ausführbar gemacht werden. Dazu folgendes ausführen:

chmod +x fail2ban-ip-whitelisting.sh

Nun muss unter Umständen noch die Textdatei wanip_old.txt angelegt werden, das es sein kann, dass das Skript ansonsten abbricht. Nun sollte man noch ausprobieren, ob das Skript aus fehlerfrei läuft.

Hier im Ordner, in dem das Skript liegt einfach den Skript Namen aufrufen:

fail2ban-ip-whitelisting.sh

Wenn das Skript fehlerfrei durchläuft, kann es anschließend per Cron noch automatisiert werden. D.h. wieder

crontab -e

aufrufen

und hier folgendes eintragen:


#Alle 5 Minuten überprüfen, ob es eine neue IP gibt und uU bei Fail2ban eintragen
*/5 * * * * /usr/local/bin/fail2ban-ip-whitelisting.sh

Fertig das wars schon! Viel Spaß mit dem Skript!

Autor: Alexander Kallenbach

Mein Name ist Alexander Kallenbach. Ich schreibe hier auf Scroom über alles mögliche – vor allem aber über IT. Hierbei interessieren mich besonders freie und/oder quelloffene Software sowie deren Entwicklung und Einsatz. Außerdem interessieren mich Auswirkungen von IT auf unser Leben. Hierbei ist die Nutzung von Daten und somit auch Datenschutz ein Themenbereich.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.