In den letzten Tagen häufen sich verschiedene SYN Flood, FTP oder Mailserver Bruteforce Angriffe. Aktuell sind ca. 10 Server davon betroffen, die von einer überschaubaren IP-Menge regelmäßig heimgesucht werden. Da es sich hierbei um Managed Server handelt und wir uns nicht immer die Arbeit machen wollten, auf jedem Server einzelnd die IP-Blocks durchzuführen, haben wir ein kleines „Blacklist“ Script geschrieben was wir der Internetgemeinde kostenfrei zur Verfügung stellen.
IPTables Script auf dem Server
Auf dem Server lädt man folgendes Script herunter:
wget http://mirror.ip-projects.de/ip-block.sh
Das Script ist wie Folgt aufgebaut:
#!/bin/bash export PATH="/bin:/usr/bin:/sbin:/usr/sbin" echo "Flushing iptables rules..." sleep 1 iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT wget http://mirror.ip-projects.de/ip-blacklist cat ip-blacklist | xargs -n1 iptables -I INPUT -j DROP -s rm ip-blacklist rm ip-blacklist.*
Der erste Teil bis wget sorgt dafür, dass vorhandene IPTables Regeln gelöscht werden. Wenn Ihr also bereits IPTables einsetzt und konfiguriert habt, solltet Ihr diesen Teil entsprechend anpassen. Das resetten der Regeln ist wichtig, da IPTables etwas „Dumm“ ist, denn es erkennt nicht, ob eine IP bereits in der Liste der blockieren IP-Adressen vorzufinden ist und fügt eine mögliche vorhandene IP-Adresse stupide einfach nochmal hinzu. Das Resultat wäre, dass irgendwann der IPTables Cache voll ist. Auch könnte man ohne das resetten von IPTables IP-Adresse nicht mehr von der Blacklist global entfernen.
Der Zweite Teil des Scriptes ab wget regelt das herunterladen der Blacklist (das ip-blacklist File ist nur eine Datei, die in jeder Zeile eine IP vorweist) und das anschließende einbinden der Blacklist in die IPTables Dropliste. Hier kann das Script natürlich um beliebig viele andere Blacklisten erweitert werden. Wichtig ist nur, dass die URL angepasst wird, wo die IP-Liste gefunden werden kann.
Im letzten Abschnitt werden nur noch die heruntergeladenen Blacklistfiles entfernt. Da es vorkommen kann, dass bei einer Überlastung des Servers die Blacklisten nicht vollständig gelöscht werden, ist hier auch der .* rm Befehl gesetzt.
Script regelmäßig ausführen
Damit sich die Liste automatisch aktualisiert, sollte man einen Cronjob anlegen, der das Script in regelmäßigen Abständen ausführt. Dafür zunächst die Schreibrechte anpassen und anschließend den Cronjob installieren.
chmod 775 /root/ip-block.sh
crontab -e
Dort ganz am Ende der Datei die Zeilen
@reboot /root/ip-block.sh 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /root/ip-block.sh
hinzufügen. Die Erste Zeile bewirkt, dass bei einem Neustart des Servers automatisch der IP-Block erfolgt, die Zweite Zeile bewirkt, dass sich die Blockliste alle 5 Minuten aktualisiert. Hier kann die Zeit der Aktualisierung flexibel geregelt werden.
Die Einrichtung ist damit erfolgreich abgeschlossen.
sehr cool gemacht schön erklärt, eine Frage und eine Ergänzung von mir.
was Für Black listen empfehlst du noch?
den Befehl kann man auch so machen ist smuthe und kleiner.
*/5 * * * * /root/ip-block.sh # alle fünf min
*/30 * * * * /root/ip-block.sh # alle 30 min
wo ich sagen würde das das 1std oder 30 min dicke reichen.
Gut, grundsätzlich gibt es auch IP Listen im Internet die man präventiv schon in seine eigene Blacklist einbauen kann. Wir haben die Erfahrung gemacht, dass oftmals Server im Netzwerk gleichzeitig oder zeitlich sehr kurz versetzt hintereinander angegriffen werden. Daher haben wir die Zeitspanne der Aktualisierung bei den Cronjobs sehr kurz gewählt.
Hallo, danke für das Script und blacklist.
Wie aktuell ist diese denn?
Leider wird es von uns nicht mehr gepflegt. Allerdings kann man es problemlos selbst verwenden um eigene Blacklisten damit zu bauen.