Debian/Linux – alle Verbindungen aus Russland und China automatisch blockieren
Ich hatte bereits einen umfangreichen Beitrag zu einem Firewallscript veröffentlicht welches u. a. Flooding-Angriffe und Portscans unterbinden soll.
Es ist jedoch auch möglich ganze Länder von vornherein – ohne IP-Listen – zu blockieren. Solche IP-Listen müssten dann natürlich auch nicht mehr aktualisiert werden.
Die aktuell üblichen Verdächtigen bzw. ungebetenen Gäste sind in den meisten Fällen Russland, Belarus und China. Aus diesem Grund habe ich das Script aus dem Originalbeitrag entsprechend angepasst.
IPs aus Russland, Belarus und China werden in diesem Beispiel automatisch blockiert. Es wird jedoch eine Ausnahme für IPs von Cloudflare gemacht. Da Cronjobs auf 1 mal pro Minute begrenzt sind verwendet das Script einen kleinen Trick, wodurch es maximal 55 Sekunden ausgeführt wird. Die letzten 5 Sekunden wurden freigelassen um Überschneidungen zu vermeiden.
Wer es noch „agressiver“ haben möchte könnte alternativ mit einem Lockfile arbeiten.
Das ist Euch alles zu kompliziert? Ihr könnt das Block-Script samt Cronjob anhand dieser Anleitung installieren oder mich über mein Kontaktformular zu günstigen Stundensätzen buchen.
Anleitung
Zunächst müssen wir sicherstellen das alle benötigten Pakete installiert werden:
apt-get update && apt-get install -y sudo && apt-get install -y geoip-bin && apt-get install -y iptables && apt-get install -y whois && apt-get install -y iptables-persistent && apt-get install -y net-tools
Danach erstellen wir die benötigten Dateien, vergeben Dateirechte und öffnen die Datei.
touch /root/test.sh && touch /root/test.log && touch /root/testcc.txt && chmod 775 /root/test.log && chmod 775 /root/testcc.txt && chmod 775 /root/test.sh && nano /root/test.sh
In die per nano geöffnete Datei fügen wir den folgenden Code ein. Achtung die E-Mail-Adresse im Code sollte geändert werden.
#!/bin/bash
end=$((SECONDS+55))
while [ $SECONDS -lt $end ]; do
echo "Shellscript powered by lautenbacher.io"
echo $SECONDS
#bad countries RU CN BLR - limit 1
netstat -ant | egrep ':.*ESTABLISHED' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c > testcc.txt
sed 's/^[ \t]*//' -i testcc.txt
sed '/^$/d' -i testcc.txt
while read c d; do
if [[ $c > "0" ]]; then
bGF1dGVuYmFjaGVyLmlv=$(geoiplookup $d | awk -v ip="$d" '{FS=" "} {if($4 == "RU," || $4 == "CN," || $4 == "BLR,") {print 1}}')
if [[ $bGF1dGVuYmFjaGVyLmlv = "1" ]]; then
echo "running geolookup"
bGF1dGVuYmFjaGVyLmlX=$(whois $d)
echo checking ip $d
geoiplookup $d
echo try to add ip $d to blocklist
whoisvar=0
if [[ "$bGF1dGVuYmFjaGVyLmlX" == *"CLOUDFLARE"* ]]; then
whoisvar=1
echo Cloudflare detected
fi
if [[ "$whoisvar" != 1 ]]; then
sudo iptables -I INPUT -s $d -j DROP
whois=$(whois $d)
hostvar=$(hostname)
mail -s 'Warning Message regarding '$d [email protected] <<< $d' bad country host exceeded the connection limit of 1'$whois
echo blocking $d
fi
fi
fi
done < testcc.txt
sleep 1
:
done
Ich empfehle allen die Ausführbarkeit des Scripts kurz zu testen und das Skript manuell auszuführen:
/root/test.sh
Sollte das funktioniert haben legen wir den Cronjob an:
crontab -e
Wir fügen folgende Zeile hinzu:
*/1 * * * * /root/test.sh > /dev/null 2>&1
Damit ist bereits alles erledigt und das Skript erfüllt seinen Zweck.
2 Antworten zu “Debian/Linux – alle Verbindungen aus Russland und China automatisch blockieren”
geht kein stück russen kommen immer noch drauf!
Das Script hat keine Kristallkugel für VPN-Verbindungen und ist auf IPv4 beschränkt, also ggf. IPv6 deaktivieren.