Schlagwort-Archive: GNU/Linux

Unixähnliche Mehrbenutzer-Betriebssysteme, die auf dem Linux-Kernel und wesentlich auf GNU-Software basieren. Wie CentOS, Debian, Ubuntu Fedora.

Reject source IP address on Linux server

Fire up a terminal and log on to the server by using SSH and then complete the steps for firewalld in the first chapter. The second chapter shows the commands for UFW, and the third shows using iptables.

firewalld tool

firewalld is on RHEL 7, CentOS 7 and later, Fedora 18 and later.

To ensure that firewalld is running on your server, run the following command. If firewalld is not running, go to the iptables chapter.

$ sudo systemctl status firewalld

Run the following command to block the IP address and to add the rule to the permanent set:

$ sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"

Run the following command to reload the firewalld rules:

$ sudo firewall-cmd --reload

Run the following command to list and verify the new rule:

$ sudo firewall-cmd --list-all

Run the following command to remove a blocked IP address.

$ sudo firewall-cmd --remove-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"

Run the following command to verify the firewalld is running.

$ firewall-cmd --state

Uncomplicated Firewall (UFW)

ufw is available on Debian 6 and later, Ubuntu 8.04 LTS and later.

To ensure that ufw is running on your server, run the following command. If ufw is not running, go to the iptables chapter.

$ sudo systemctl status ufw

Run the following command to block the IP address:

$ sudo ufw deny from xxx.xxx.xxx.xxx to any

Run the following command to list and verify the new rule:

$ sudo ufw status

Run the following command to remove a blocked IP address.

$ sudo ufw delete 7

Run the following command to show numbered list of firewall rules.

$ ufw status numbered

iptables tool

iptables is commonly pre-installed on all Linux distributions.

Run the following command to block the IP address:

$ sudo iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP

Run the following command to save the settings. The settings persist after the server reboots.

$ sudo service iptables save

Run the following command to list and verify the new rule:

$ sudo iptables -vnL

Run the following command to delete a iptables chain.

$ sudo iptables -D INPUT 7

Run the following command to show numbered list of iptables chains.

$ sudo iptables -L --line-numbers

GeoIP Firewall Konfiguration auf Debian und Ubuntu

Mehr Sicherheit mit GeoIP Regeln für den Debian und Ubuntu Server

In diesem Turorial wird die Bereitstellung und Anwndung von GeoIP mit der Kernel Firewall von Debian 10 (buster) und 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.

Ein Geolokationssystem 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 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

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 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

  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 host 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

Die GeoIP Integration für iptable 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 Ausgabe 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 IP Adresse abfragen.

$ apt install geoip-bin

Beispiel Abfrage mit geoiplookup.

$ geoiplookup 61.219.11.151
GeoIP Country Edition: TW, Taiwan

Beispiel mit iptables und GeoIP

Ein Beispiel mit 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 nach einem neu Start reaktivieren, dazu wird iptables-persistent installiert.

$ apt install iptables-persistent

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

iptables-persistent installieren

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 mit iptables-restore

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