GeoIP iptables auf Debian und Ubuntu

Mehr Sicherheit mit GeoIP iptables Regeln in Debian und Ubuntu

In diesem Turorial wird die Bereitstellung und Konfiguration von GeoIP mit der iptables Firewall von Debian 10 (buster), Debian 11 (bullseye) oder Ubuntu 20.04 LTS angewandt. Neben TLS-Verbindungen und 2FA Authentifizierung ist ein weiteres Bindeglied eine Firewall, die den erlaubten Datenverkehr regulieren kann. Anhand der öffentlichen IP-Adresse kann recht gut ermittelt werden aus welcher Stadt oder aus welcher Region der Zugriff gerade stattfindet.

Dabei sollten überlegungen gemacht werden, ob die Erreichbarkeit der Websites und Dienste aus Ländern fernab hiesiger Sprachen überhaupt zweckmässig ist, auch werden möglicherweise zu fernen Regionen keine Beziehungen gepflegt, so beispielsweise in den Südpazifik. Wenn gleich bei der Verfolgung von Brute-Force und DDoS Angriffe, die Quellen häufig in Fernost und Russland zu finden sind.

Geolokationssystem GeoIP iptables in Debian

Ein Geolokationssystem mit GeoIP wird benutzt um den Standort von Systemen zu ermitteln. Im Internet kann eine IP-Adresse einem Land, einer Stadt oder einer Organisation zugeordnet werden, um anschließend den Standort zu bestimmten.

Installation

Die Installation der benötigten Dienste und Bibliotheken mit iptables für GeoIP auf Debian und Ubuntu erfolgt als root mit „su -“ oder „sudo su -„.

$ apt update && apt upgrade
$ apt -y install curl unzip perl iptables-dev xtables-addons-common libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl pkg-config

Hinweis: Wenn man Abbruch E: Package iptables-dev has no installation sieht, überspringe den nächsten Schritt „MaxMind GeoLite2“ und geh zu Update.

MaxMind GeoLite2

Die GeoIP Datenbank muss von der MaxMind Website heruntergeladen werden, mit folgender URL: https://www.maxmind.com. MaxMind ist ein in Massachusetts ansässiges Unternehmen für digitale Kartierung, das Standortdaten für IP-Adressen bereitstellt.

MaxMind verlangt das man sich für den Free Account mit einer gültigen Email registriert. Nach dem anmelden gehts zu My Account und Download Databases.

Die GeoIP Datenbank für die Debian und Ubuntu Firewall muss von der Maxmind Website heruntergeladen werden

Unter GeoIP2 and GeoIP Legacy Databases – GeoLite2-Country-CSV Format mit Download ZIP die Datei herunterladen.

GeoIP2 and GeoIP Legacy Databases, GeoIP Firewall Debian Ubuntu

  Möchte man den Download mittels Permalink durchführen, braucht es ein Lizenz Key, diesen man unter „My Account – Manage License Keys“ generieren kann, der Download hat hier zu diesem Zeitpunkt nicht funktioniert (401 Unauthorized).

Der Inhalt der ZIP-Datei GeoLite2-Country-CSV_20220125.zip

GeoLite2-Country-CSV_20220125.zip

Auf dem Debian ein neues Verzeichnis erstellen und zu diesem wechseln.

$ mkdir -p /usr/share/xt_geoip/
$ cd /usr/share/xt_geoip

Die heruntergeladene Datei Country-CSV_20220125.zip auf den Debian oder Ubuntu Server hochladen mit ftp oder scp, in den Verzeichnispfad /usr/share/xt_geoip und anschissend entpacken.

$ unzip GeoLite2-Country-CSV_20220125.zip
$ cd GeoLite2-Country-CSV_20220125
$ /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

Die CSV-Daten werden konvertiert, mit dem Konverter für MaxMind CSV-Datenbank zu Binär für xt_geoip. Es erscheint die Ausgabe in etwa wie die folgende, hier in verkürzter Form.

729578 entries total
    0 IPv6 ranges for
   16 IPv4 ranges for
362309 IPv6 ranges for 0 0
365215 IPv4 ranges for 0 0
    0 IPv6 ranges for 1 0
   28 IPv4 ranges for 1 0
    0 IPv6 ranges for AD Andorra
    8 IPv4 ranges for AD Andorra
...

Das Modul xt_geoip in den Speicher laden mit anschließender Prüfung.

$ modprobe xt_geoip
$ lsmod | grep ^xt_geoip

Die Ausgabe sollte ähnlich wie hier sein.

xt_geoip             16384  34

GeoIP mit iptables Regeln in Debian

Die GeoIP Integration für iptable auf Debian ode Ubuntu ist nun abgeschlossen, es können jetzt Befehle mit folgender Syntax ausgeführt werden.


iptables -m geoip –src-cc country[,country] -dst-cc country[,country]

Soll beispielsweise Traffic aus Russland und China blockiert werden.

$ iptables -A INPUT -m geoip --src-cc RU,CN -j DROP

Beispiel zugriffe blockieren welche NICHT aus Deutschland kommen.

$ iptables -A INPUT -m geoip ! --src-cc DE -j DROP

Es kann auch die ausgehende Traffic gesperrt werden, hier nach Indien.

$ iptables -A OUTPUT -m geoip -dst-cc IN -j DROP

  Hilfreiche iptables Kommands.

$ iptables -vnL
$ iptables -L INPUT --line-numbers -vn

Die iptables Ausgabe auf dem Debian mit GeoIP könnte in etwa wie die folgende aussehen.

Chain INPUT (policy DROP 259 packets, 13704 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1    68011   14M f2b-apache-auth  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
2     155K   41M f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22
3     272K   12M ufw-reject-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
4       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country RU,CN
5       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country BY,CY

In diesem Beispiel wird Zeile 5 gelöscht.

$ iptables -D INPUT 5

ISO Country Code einer GeoIP Adresse abfragen.

$ apt install geoip-bin

Beispiel GeoIP Abfrage mit geoiplookup.

$ geoiplookup 61.219.11.151
GeoIP Country Edition: TW, Taiwan

Beispiel mit iptables und GeoIP

Ein Beispiel mit iptables und ISO Codes für Länder die als obskur oder als bekannte Sicherheitsrisikohäfen eingestuft werden und explizit gesperrt werden. Die ISO Codes der DACH Länder sollen zugelassen werden.

$ iptables -P INPUT DROP
$ iptables -A INPUT -m geoip --src-cc AT,CH,DE -j ACCEPT
$ iptables -N DROP_GEOIP
$ iptables -A DROP_GEOIP -m geoip --src-cc ID -j DROP
$ iptables -A DROP_GEOIP -m geoip --src-cc KP -j DROP
$ iptables -A DROP_GEOIP -m geoip --src-cc TJ -j DROP
$ iptables -A DROP_GEOIP -m geoip --src-cc TM -j DROP
$ iptables -A DROP_GEOIP -m geoip --src-cc TR -j DROP
$ iptables -A DROP_GEOIP -m geoip --src-cc UA -j DROP
$ iptables -A DROP_GEOIP -m geoip ! --src-cc AT,CH,DE -j DROP
$ iptables -A INPUT -j DROP_GEOIP

  Das Argument (!) invertiert die übergebenen Werte, hierdurch die ISO (AT,CH,DE) von Sprung zu DROP ausgeschlossen werden.

Die iptables INPUT Chain überprüfen mit line-numbers, die Ausgabe wie folgt zu diesem Beispiel.

$ iptables -L INPUT --line-numbers -vn
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     273K   12M ufw-after-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
2     273K   12M ufw-reject-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
3     273K   12M ufw-track-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
4       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country RU,CN
5       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country BY,CY
6       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country HK,KP
7       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country KG,KZ
8       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country UA,VN
9       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country MD,GE
10      0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip --source-country TW,TM
11    102  5329 DROP_GEOIP all  --  *      *       0.0.0.0/0            0.0.0.0/0
12     90  4827 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            -m geoip ! --source-country AT,CH,DE

iptables-persistent

Die iptables Chains wird nach einem Neustart reaktiviert, dazu iptables-persistent installieren.

$ apt install iptables-persistent

Bestätige mit yes um die iptables während der installation zu sichern.

iptables-persistent installieren, GeoIP Firewall Debian Ubuntu

Die iptables Chains können mit iptables-save gesichert werden um sie zu einem späteren Zeitpunkt wiederherstellen zu können.

$ iptables-save > /etc/iptables/rules.v4
$ ip6tables-save > /etc/iptables/rules.v6

Die Wiederherstellung GeoIP iptables Debian mit iptables-restore

$ iptables-restore < /etc/iptables/rules.v4
$ ip6tables-restore < /etc/iptables/rules.v6

Update

Später wurde festgestellt, dass die Bibliothek iptables-dev unter Debian 11 nicht mehr verfügbar ist, und durch libxtables-dev ersetzt wurde.

Erwartet wird von xt_geoip_build nun das DBIP-Format als input. Maxmind wird rausgeworfen. Wahrscheinlich, weil das neue „Build-Script“xt_geoip_buildden Download der CSV-Datei von db-ip.com erfordert, statt von MaxMind.

Führe die folgenden Befehle aus, um libxtables-dev zu installieren. Lade anschließend die Country Lite-Datenbank im DBIP-Format von db-ip.com herunter, entpacke dann die GZ Datei und konvertiere die CSV mit dem Script xt_geoip_build.

$ apt install libxtables-dev
$ mkdir -p /usr/share/xt_geoip/
$ cd /tmp
$ wget -O dbip-country-lite.csv.gz "https://download.db-ip.com/free/dbip-country-lite-$(date +'%Y-%m').csv.gz"
$ gunzip dbip-country-lite.csv.gz
$ chmod 755 /usr/lib/xtables-addons/xt_geoip_build
$ /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

IPv6 Internetprotokoll aktivieren, deaktivieren in Windows 10 und 11

IPv6 Internetprotokoll in Windows PowerShell aktivieren, deaktivieren

IPv6 Internetprotokoll aktivieren, deaktivieren in Windows

Das Internetprotokoll IPv6 ist das neue Standardprotokoll für die Netzwerkschicht des Internets

IPv6 wurde entwickelt, um viele der Probleme der aktuellen Version der Internet Protocol (bekannt als IPv4) zu lösen. Dies in Bezug auf Adressverarmung, Sicherheit, automatische Konfiguration, Erweiterbarkeit u.s.w. Mit IPv6 bieten sich erweitert Möglichkeiten des Internets, um neue Arten von Anwendungen zu ermöglichen, darunter Peer-to-Peer- und mobile Anwendungen.

IPv6 ist standardmäßig in Windows aktiviert, oft muss jedoch IPv6 möglicherweise deaktiviert werden. Beispielsweise beim hinzufügen eines PCs zu einer Active Directory Domäne.

Dieses Tutorial zeigt, wie man das Internetprotokoll IPv6 für alle oder bestimmte Netzwerkadapter in Windows 8.1, Windows 10 und Windows 11 aktivieren bzw. deaktivieren kann.

So aktiviert man IPv6 für einen bestimmten Netzwerkadapter in der PowerShell

Kopiere den folgenden Befehl und füge ihn in PowerShell mit erhöhten rechte ein,. Um den Befehl mit der Eingabe Taste auszuführen, damit wird der aktuelle IPv6 Status für alle Windows Netzwerkadapter ausgegeben.

Get-NetAdapterBinding -ComponentID ms_tcpip6

IPv6 Internetprotokoll Status Information

Die IPv6 Internetprotokoll Status Information der Windows Netzwerkadapter könnte etwa wie die folgende aussehen.

Name                           DisplayName                                        ComponentID          Enabled
----                           -----------                                        -----------          -------
Ethernet                       Internetprotokoll, Version 6 (TCP/IPv6)            ms_tcpip6            True
WLAN                           Internetprotokoll, Version 6 (TCP/IPv6)            ms_tcpip6            True
Bluetooth-Netzwerkverbindung   Internetprotokoll, Version 6 (TCP/IPv6)            ms_tcpip6            True
OpenVPN Wintun                 Internetprotokoll, Version 6 (TCP/IPv6)            ms_tcpip6            True

Soll nun für den WLAN Adapter das IPv6 Internetprotokoll deaktiviert werden, kann folgender Befehl in der Windows PowerShell mit erhöhten rechte ausgeführt werden.

Enable-NetAdapterBinding -Name "WLAN" -ComponentID ms_tcpip6

So deaktiviert man IPv6 in der PowerShell für alle Netzwerkadapter

Kopiere den folgenden Befehl und füge ihn in PowerShell mit erhöhten rechte ein, um ihn mit der Eingabe Taste auszuführen.

Disable-NetAdapterBinding -Name "WLAN" -ComponentID ms_tcpip6

Es wird das IPv6 Internetprotokoll für alle Netzwerkadapter deaktiviert.

IPv6 Internetprotokoll

Das Internetprotocol Version 6 (IPv6), früher auch Internet Protocol next Generation (IPng) genannt. Ist ein von der Internet Engineering Task Force (IETF) seit 1998 standardisiertes Verfahren. Das zur Übertragung von Daten in paketvermittelnden Rechnernetzen, insbesondere dem Internet genutzt wird.

In diesen Netzen werden die Daten in Paketen versendet. In welchen nach einem Schichtenmodell Steuerinformationen verschiedener Netzwerkprotokolle ineinander verschachtelt um die eigentlichen Nutzdaten herum übertragen werden. IPv6 stellt als Protokoll der Vermittlungsschicht (Schicht 3 des OSI-Modells) her. Im Rahmen der Internetprotokollfamilie eine über Teilnetze hinweg gültige 128-Bit-Adressierung der beteiligten Netzwerkelemente (Rechner oder Router).

Im Internet soll IPv6 im Laufe der Zeit die Version 4 des Internet Protocols (IPv4) vollständig ablösen. Da es deutlich mehr Adressen bietet, von denen die IANA bei IPv4 auf globaler Ebene 2011 die letzten vergeben hat. Kritiker befürchten ein Zurückdrängen der Anonymität im Internet durch die nun mögliche zeitlich stabilere und weiter reichende öffentliche Adressierung. Befürworter bemängeln die zögerliche Einführung von IPv6 angesichts der ausgelaufenen globalen IPv4-Adressvergabe. Zugriffe auf Google von Nutzern aus Deutschland enthielten im April 2022 zu etwa 60% IPv6.