[Eisfair] GeoIP und Block Complete Networks - Anleitung - Neu
Jürgen Pfautsch
newsreply6 at clubeckstein.de
Mo Mär 11 14:34:09 CET 2024
Moin.
Meine vorherige Anleitung hatte ich zurückgezogen, weil sie noch noch
nicht komplett war, sorry - macht man eigentlich nicht - beides -
zurückziehen und unfertige Anleitungen veröffentlichen.
Jetzt aber ...
Da es das Paket Block_Complete Countries nicht mehr gibt, war ich auf
der Suche nach einer Alternative und bin auf
https://www.seenlyst.com/blog/geo-blocking-ufw-iptables
fündig geworden. Die Anleitung dort ist nicht mehr ganz aktuell und paßt
eh nicht zum Eisfair, weswegen ich sie hier adaptiert habe.
Folgende Pakete sind erforderlich:
eisman upgrade curl perl unzip perl-text-csv-xs perl-net-cidr-lite -y
Weiterhin:
xtables-addons und dazu die dem Kernel entsprechenden Modul Pakete
nicht erforderlich: perl-moosex, weil die tables nicht mehr von Maxmind
geladen werden, sondern von einer anderen Adresse
Jetzt wird die Datenbank heruntergeladen und vorbereitet.
Das läuft über ein Script, welches wir hier erstellen:
sudo mkdir -p /usr/share/xt_geoip
sudo nano /usr/local/bin/update-geoip.sh
Dort hinein kopiert ihr folgenden Text
#!/bin/bash
# Create temporary directory
mkdir -p /usr/share/xt_geoip/tmp/
mkdir -p /usr/share/xt_geoip/tmp/ip2loc/
# Download latest from db-ip.com
cd /usr/share/xt_geoip/tmp/
/usr/libexec/xtables-addons/xt_geoip_dl
# Download latest from https://github.com/sapics/ip-location-db
wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/geo-whois-asn-country/geo-whois-asn-country-ipv4.csv
#wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/geo-whois-asn-country/geo-whois-asn-country-ipv6.csv
wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/iptoasn-country/iptoasn-country-ipv4.csv
#wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/iptoasn-country/iptoasn-country-ipv6.csv
wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/dbip-country/dbip-country-ipv4.csv
#wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/dbip-country/dbip-country-ipv6.csv
wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/geolite2-country/geolite2-country-ipv4.csv
#wget -P /usr/share/xt_geoip/tmp/
https://cdn.jsdelivr.net/npm/@ip-location-db/geolite2-country/geolite2-country-ipv6.csv
# Combine all csv and remove duplicates
cd /usr/share/xt_geoip/tmp/
cat *.csv > geoip.csv
sort -u geoip.csv -o /usr/share/xt_geoip/dbip-country-lite.csv
# Remove temp directory and update geoip xtables
rm -r /usr/share/xt_geoip/tmp/
/usr/libexec/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip -i
/usr/share/xt_geoip/dbip-country-lite.csv
rm /usr/share/xt_geoip/dbip-country-lite.csv
#End of script
Jetzt noch die datei ausführbar machen und ausführen:
sudo chmod +x /usr/local/bin/update-geoip.sh
/usr/local/bin/update-geoip.sh
Ein
iptables -I INPUT -m geoip --src-cc IR,CN,RU,UA,RO,VN,IN,CA,FR,IT,NL -j DROP
blockt bei mir einige der häufigsten Verursacher.
Ein
iptables -I INPUT -m geoip ! --src-cc DE -j DROP
hat mich selber leider auch ausgeperrt.
Bie hier funktioniert das Geoblocking nun schon mal :-)
Da bei einem Neustart die Änderungen an den iptables nicht gespeichert
werden, müssen wir einen neuen service einrichten.
Dazu legen wir eine neue unit an mit
touch /etc/systemd/system/iptables-persistent.service
in die kommt der Zext zwischen den ------
----------------------------
[Unit]
Description=iptables-persistent
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/libexec/iptables-persistent/iptables-persistent start
[Install]
WantedBy=multi-user.target
----------------------------------------------------------------
Dazu noch ein Script
mkdir /usr/libexec/iptables-persistent
touch /usr/libexec/iptables-persistent/iptables-persistent
in das unsere Wünsche kommen.
Bei mir sieht das so aus:
-----------------
#! /bin/sh
iptables -I INPUT -m geoip --src-cc IR,CN,RU,UA,RO,VN,IN,CA,FR,IT,NL -j DROP
----------
Holger hat da noch ein etwas ausgefeilteres Script etwas weiter unten,
für mich erfüllt das vorerst den Zweck.
Jetzt wird der service gestartet und permanent gemacht:
chmod 0755 /usr/libexec/iptables-persistent/iptables-persistent
service daemon-reload
service enable iptables-persistent
service start iptables-persistent
und ab da einen Haufen Leute damit dauerhaft frustrieren ;-)
Ob und wie man daraus ein Paket basteln kann - davon habe ich keine Ahnung.
Vielen Dank an Holger und Marcus für die umfangreiche Hilfe!
Jürgen
Mehr Informationen über die Mailingliste Eisfair