[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