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.
- Nur Websites aber nicht andere Dienste wie Email, FTP oder SSH werden geschützt.
- Bei dem Betreiben von mehreren Websites muss diese Liste mehrfach eingepflegt werden.
- 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.