Mein eigener Server

Dokumentation meiner Projekte und Hobbies

Ubuntu geoip und iptables einrichten

Zugriff auf den Server einschränken mit geoip und iptables.

geoip installieren und einrichten

geoip installieren: sudo apt-get update && sudo apt-get install xtables-addons-common eingeben um geoip zu installieren.

geoip installieren: sudo apt-get install libtext-csv-xs-perl wird benötigt zur verarbeitung der geoip-dateien.

geoip setup:

sudo mkdir /usr/share/xt_geoip
cd /usr/lib/xtables-addons/
sudo ./xt_geoip_dl
sudo ./xt_geoip_build -D /usr/share/xt_geoip *.csv

geoip Daten herunterladen.

iptables with geoip:

sudo iptables -A INPUT -i lo -j ACCEPT
#example for blocking countries (remove the #)
#sudo iptables -I INPUT -p tcp --dport 80 -m geoip ! --source-country XX -j DROP
sudo iptables -I INPUT -p tcp --dport 80 -m geoip --source-country EU,US,CA,AU -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -m geoip --source-country EU,US,CA,AU -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 22 -m geoip --source-country DE,CH -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

SSH (Port 22) aus Deutschland und der Schweiz erlauben. HTTP (Port 80) und HTTPS (Port 443) aus Europa, USA, Kanada und Australien erlauben. Ein Beispiel wie man bestimmte Länder blockt ist auch enthalten aber auskommentiert.

iptables:

sudo iptables -I INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

Falls der Server, wie bei mir der QNAP, bei Euch zu Hause steht und Ihr greift direkt von zu Hause auf den Server zu dann müsst Ihr Euer Hausnetzt auch erlauben. Bitte passt entsprechend die IP an.

Es gibt verschiedene Varianten. Mit der ersten lasst Ihr alles zu. und mit der Zweiten nur bestimmte ports wie hier im Beispiel Port 22 für SSH.

login: Wichtig ist dass Ihr nach dem ändern der iptables versucht Euch in einem separaten Fenster neu anzumelden. So könnt Ihr im aktuellen Fenster ggf. Änderungen vornehmen.

iptables ipv6: sudo ip6tables -P INPUT DROP IPv6 nutzen wir nicht und sperren alles.

iptables list: Anzeige der iptables mit: sudo iptables -v -L --line-numbers

iptables ipv6 list: Anzeige der iptables ipv6 mit: sudo ip6tables -v -L --line-numbers

iptables persistent: Damit die iptables auch nach einem Start aktiv sind installieren wir: sudo apt-get install iptables-persistent

iptables persistent config: Mit yes bestätigen um die iptables während der installation zu sichern.

iptables ipv6 persistent config: Mit yes bestätigen um die iptables ipv6 während der installation zu sichern.

iptables save:

sudo sh -c 'iptables-save > /etc/iptables/rules.v4'
sudo sh -c 'ip6tables-save > /etc/iptables/rules.v6'
ls -l /etc/iptables/

Sollte Ihr die iptables zu einem späteren Zeitpunkt anpassen könnt Ihr diese mit iptables-save sichern damit die neuen iptables auch nach einem Neustart vorhanden sind.

geoip update script: Mit sudo vi /etc/geoIPupdateIPtables ein Skript erstellen damit die geoip Daten aktuell bleiben.

geoip update script: Mit i bei vi in den insert Modus wechseln, folgende Zeilen einfügen und anschliessend ESC Taste drücken und mit :wq speichern und vi beeden.

/sbin/iptables-save > /etc/iptables/rules.v4
/sbin/ip6tables-save > /etc/iptables/rules.v6
/bin/rm /usr/lib/xtables-addons/GeoIPv6.csv
/usr/lib/xtables-addons/xt_geoip_dl
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
/sbin/iptables-restore < /etc/iptables/rules.v4
/sbin/ip6tables-restore < /etc/iptables/rules.v6

Zuerst werden die IPtables gesichert. Neue geoip-daten heruntergeladen und anschliessend die iptables restored.

geoip update script: Das Skript ausführbar machen: sudo chmod +x /etc/geoIPupdateIPtables

geoip update script: Skript testen mit sudo /etc/geoIPupdateIPtables

geoip update script crontab: Skript automatisch via cronjob starten sudo crontab -e

geoip update script crontab: Mit i bei vi in den insert Modus wechseln, folgende Zeilen einfügen und anschliessend ESC Taste drücken und mit :wq speichern und vi beeden.

# Update geoIP Data iptables jeden ersten des Monates um 0:45
45 0 1 * * /etc/geoIPupdateIPtables  >> /var/log/geoIPupdate 2>&1

Weiter geht es mit Ubuntu fail2ban.

Country Code für IP mit CLI abfragen

apt-get install geoip-bin
geoiplookup 182.100.67.120