IP-Blacklist aus dem Internet per Script an iptables übergeben

Angriffe eines Serverdienstes ist ein lästiges Übel für einen Serverbetreiber. Diese erfolgen vermutlich durch Scripte von gekaperten Servern. Bei einem sicher konfigurierten System können diese Angriffe keinen Schaden anrichten aber sie tauchen zu Haufen in der Serverlogs auf. Es gibt Listen im Internet wo solche lästigen IP-Adressen aufgeführt sind. Mir ist aufgefallen, dass unter https://www.redim.de eine recht brauchbare Liste, die täglich aktualisiert wird, existiert die normalerweise auch meine lästigsten Kandidaten enthalten. Nun wird dort vorgeschlagen die Liste in die .htaccess-Datei zu kopieren und darüber Websites zu schützen. Leider hat dies mehrere Nachteile.

  1. Nur Websites aber nicht andere Dienste wie Email, FTP oder SSH werden geschützt.
  2. Bei dem Betreiben von mehreren Websites muss diese Liste mehrfach eingepflegt werden.
  3. Die vorgeschlagene Variante über .htaccess muss händig aktualisiert werden oder man muss ein Script dafür schreiben.

Irgendwie hat mir das nicht wirklich zugesagt und Linux bringt mit iptables ja schon ein universelles Werkzeug mit um IP-Adressen zu blocken. Um Ports muss man sich da nicht kümmern da kaum zu erwarten ist, das von einer bösartigen IP-Adresse sinnvolle Anfragen kommen.

Mit diesen Überlegungen habe ich beschlossen ein Script zu schreiben was das alles automatisiert:

#!/bin/bash
#/etc/cron.hourly/redim
#
# Lädt von https://www.redim.de/server-ip-blacklist?cmd=iptotxt bekannte 
# böse IP-Adressen und füttert damit iptables zum Blockieren

# Variablen
TEMP_FILE=/tmp/ipadressen
URL=https://www.redim.de/server-ip-blacklist?cmd=iptotxt

# Functions

function check_file {
    [ -f "$1" ]
    return $?
}

function iptables_delete {
iptables -D INPUT -s $LINE -j DROP
}

function iptables_add {
iptables -A INPUT -s $LINE -j DROP
}

# Main
if check_file $TEMP_FILE; then
while read LINE
        do
                iptables_delete $LINE 2>/dev/null
        done < $TEMP_FILE
fi
 
rm -f $TEMP_FILE 
wget $URL -O $TEMP_FILE >/dev/null 2>&1 # Liste runterladen

# Erste Zeile entfernen da auskommentierter Zeitstempel
echo "$(tail -n +2 $TEMP_FILE)" > $TEMP_FILE

# Neue Liste an iptables übergeben
while read LINE
        do
                iptables_add $LINE >/dev/null
        done < $TEMP_FILE

Dieses Script wird nun in /etc/cron.hourly/ kopiert und mit chmod u+x redim ausführbar gemacht. Danach empfiehlt es sich, vor dem ersten Ausführen des Scripts über den Cron-Job, mit fail2ban-client unban –all und iptables -F alle alten iptables-Regeln zu löschen damit es nicht zu Überschneidungen kommt.

kais-universum.de