Ubuntu: IP-Adressen dauerhaft sperren

Ist ein Server aus dem Internet aus erreichbar, dauert es nicht lange, bis man Besuch von ungebetenen Gästen bekommt. Wie man diese einfach blockieren kann, ist in diesem Beitrag beschrieben.

Wieso überhaupt Sperren?

Kaum steht ein Server für alle öffentlich erreichbar im Netz, wird er auch schon abgescannt. Leider sind dies nicht nur z.B. Suchmaschinen, welche ihre Datenbanken stetig erweitern wollen. Auch Angreifer, welche Daten stehlen, den Server selbst weiterverwenden (Stichwort: Spam-Schleuder, Proxy, Malware verbreiten, etc.), oder auch einfach nur gerne Rechner lahm legen, um zu beweisen, was sie können, sind immer auf der Suche nach neuen Systemen.

Verhindern lässt sich das Scannen nicht. Aber wenn man etwa eine WordPress-Website auf einem Server betreibt und sich in den Logs nachlesen lässt, dass ein Zugriff auf die Website von einer IP-Adresse in regelmäßigen Abständen erfolgt und diese IP-Adresse zusätzlich in öffentlichen Datenbanken als Sicherheitsrisiko eingestuft wird, so fühlt man sich zumindest besser, wenn diese IP nicht mehr in den Logs auftaucht.

Sämtliche auftauchenden IP-Adressen dadurch zu blockieren ist natürlich unmöglich. Dafür gibt es zu viele Proxies, Bot-Netze, etc. Man kann dadurch aber etwas „die Logs“ aufräumen, wenn bestimmte IP-Adressen sehr häufig und regelmäßig nerven.

Sperren mit iptables

Sperren kann man diesen Zugriff unter Ubuntu ganz einfach über ‚iptables‘. Dazu wird einfach folgende Regel definiert:

iptables -A INPUT -s X.X.X.X -j DROP

Nach einem Neustart des Servers sind die eingestellten Regeln von ‚iptables‘ aber wieder verschwunden. Man muss sich also zusätzlich darum kümmern, dass diese auch danach wieder aktiviert werden. Bei einem geplanten, manuellen Neustart könnte man noch selbst daran denken und die Regeln wieder einpflegen. Spätestens bei einem ungeplanten Neustart des Rechners verliert man hier sicherlich den Überblick und vergisst die Regeln.

Die Regeln persistieren

Um die Regeln auch nach einem Neustart automatisch wieder zu aktivieren, ohne sich selbst darum zu kümmern, kann man das Programm ‚iptables-persistent‘ installieren. Es liest nach einem Neustart die Regeln aus einer Textdatei aus und aktiviert sie selbstständig wieder.

Die Textdatei findet man unter

/etc/iptables/rules.v4

Um die aktuell gepflegten Regeln in diese Datei zu schreiben, genügt folgender Aufruf

iptables-save > /etc/iptables/rules.v4

Zu beachten ist hierbei, dass diese Regeln nur für IPv4 gespeichert werden. IPv6 hat eine entsprechend äquivalente Datei

/etc/iptables/rules.v4

und kann nach dem gleichen Schema gespeichert werden.

Das Sperren per Skript erleichtern

Möchte man immer wieder IPs sperren, so kann es etwas lästig sein, immer wieder die gleichen Befehle hintereinander auszuführen (wobei man sie dann aber wenigstens auswendig lernt). Man kann sich hierzu einfach ein kleines Skript schreiben.

Das Skript nimmt als Parameter eine IP-Adresse entgegegen, trägt diese in die Regel-Liste von iptables ein und zeigt danach noch die Liste aller Regeln an, sofern man als weiteren Parameter ’show‘ mit angibt.

#!/bin/bash
# script to ban a ip address v4 via iptables and
# persist it to /etc/iptables/rules.v4

# check, if current user is a root user (sudo is sufficient)
if [[ $EUID -ne 0 ]]; then
echo -e "\e[93mYou must be a root user\e[39m" 2>&1
exit 1
fi

# exit, if no ip is given
if [ $# -eq 0 ]
then
echo -e "\e[93musage: banip <IP-Adresse> [show]"
echo -e "'show' prints iptables rules lists after banning\e[39m"
exit 1
fi

# ban ip via iptables
iptables -A INPUT -s $1 -j DROP

# store the rule to rules.v4
iptables-save > /etc/iptables/rules.v4

echo -e "\e[32mIP $1 was successfully banned\e[39m"

if [ "$2" == "show" ]
then
iptables -L -v
fi

Dieses Skript prüft zunächst, ob der Anwender Root-Rechte besitzt. Hier reicht es aus, wenn man mit ’sudo‘ arbeitet. Wenn nicht, gibt es einen kompakten, kleinen Hinweis, dass man Root-Rechte benötigt. Lässt man diese Prüfung aus, würde sich iptables melden, sobald weiter unten im Skript die Regel eingetragen werden soll.

Anschließend wird überprüft, ob ein Parameter vorhanden ist. Ist dieser nicht vorhanden, wird ein Hinweis auf den fehlenden Parameter angezeigt und das Skript abgebrochen.

Danach wird dann die eigentliche Regel eingetragen und die Regeln werden in die oben beschriebene Datei ‚rules.v4′ gespeichert.

Zuletzt wird die neue Regel-Liste noch einmal angezeigt, sofern man den optionalen Parameter ’show‘ angehängt hat.

Das Skript muss dann noch ausführbar gemacht werden und kann dann von der Konsole aus aufgerufen werden:

chmod +x banip
sudo ./banip <IP-Adresse> [show]

Nun kann man neue IP-Adressen relativ bequem sperren und das Resultat sofort einsehen.

Hinweis: Hier erkläre ich, wie man mit Hilfe des Tools fail2ban ganz automatisch den Zugriff von IP-Adressen blockieren kann.

Schreibe einen Kommentar