ICMP-Verkehr unter Linux mit iptables blockieren

CompTIACompTIABeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Lab lernen Sie, wie Sie iptables, ein leistungsstarkes Kommandozeilen-Firewall-Dienstprogramm unter Linux, verwenden, um eingehenden ICMP-Verkehr zu blockieren. Sie konfigurieren eine Firewall-Regel, um Pakete des ICMP-Protokolls zu verwerfen, das häufig vom ping-Befehl zur Überprüfung der Netzwerkverbindung verwendet wird. Dies ist eine grundlegende Fähigkeit zur Absicherung eines Linux-Systems, indem der Netzwerkzugriff auf Protokollebene gesteuert wird.

Sie beginnen mit einem vorläufigen Netzwerks-Scan mit nmap, um die offenen Ports des Systems zu bewerten. Anschließend legen Sie eine Basislinie fest, indem Sie mit ping überprüfen, ob ICMP-Verkehr zunächst zugelassen wird. Der Kern des Labs besteht darin, eine spezifische iptables-Regel zu erstellen und anzuwenden, um alle eingehenden ICMP-Pakete zu verwerfen. Abschließend überprüfen Sie, ob die Regel aktiv ist, und testen ihre Wirksamkeit, indem Sie erneut versuchen, Ihre Maschine anzupingen, und bestätigen, dass die Anfragen nun erfolgreich blockiert werden.

Scannen nach offenen TCP- und UDP-Ports mit nmap

In diesem Schritt lernen Sie, wie Sie das Tool nmap verwenden, um Ihr eigenes System auf offene Netzwerkports zu scannen. Netzwerkports sind die Endpunkte der Kommunikation in einem Betriebssystem. Wenn ein Programm Informationen aus dem Netzwerk empfangen möchte, "lauscht" es auf einem bestimmten Port. Das Scannen nach offenen Ports ist ein grundlegender erster Schritt zur Bewertung der Sicherheit einer Maschine, da jeder offene Port einen potenziellen Einstiegspunkt für einen Angreifer darstellt.

Zuerst müssen Sie nmap installieren, da es nicht in der Basisumgebung enthalten ist. Es ist eine gute Praxis, Ihre Paketliste zu aktualisieren, bevor Sie neue Software installieren.

Führen Sie den folgenden Befehl aus, um die Paketliste zu aktualisieren:

sudo apt-get update

Installieren Sie nun nmap, indem Sie Folgendes ausführen:

sudo apt-get install -y nmap

Sie sollten eine Ausgabe sehen, die anzeigt, dass nmap und seine Abhängigkeiten installiert werden.

Als Nächstes müssen Sie die IP-Adresse Ihres Rechners ermitteln, um nmap mitzuteilen, was gescannt werden soll. Dies können Sie mit dem Befehl ip herausfinden.

ip addr show

Suchen Sie nach einem Eintrag wie eth0 oder ens33. Ihre IP-Adresse wird neben inet aufgeführt. Sie wird etwa so aussehen: 172.16.50.13/24.

So identifizieren Sie Ihre IP-Adresse aus der Ausgabe:

  1. Suchen Sie nach der Schnittstelle, die state UP hat (normalerweise eth0).
  2. Finden Sie die Zeile, die mit inet beginnt (nicht inet6).
  3. Nehmen Sie nur den Teil der IP-Adresse vor dem / (z. B. wenn Sie inet 172.16.50.13/24 sehen, ist Ihre IP-Adresse 172.16.50.13).
  4. Ignorieren Sie die Loopback-Schnittstelle (lo) mit der IP 127.0.0.1.

Für den Rest dieses Labs verwenden wir <your_IP_address> als Platzhalter für Ihre tatsächliche IP-Adresse.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:04:c3:1d brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.13/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159940sec preferred_lft 1892159940sec
    inet6 fe80::216:3eff:fe04:c31d/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:1d:45:49:f8 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

Nun sind Sie bereit, Ihren ersten Scan durchzuführen. Beginnen wir mit dem Scannen nach offenen TCP-Ports (Transmission Control Protocol). TCP ist ein verbindungsorientiertes Protokoll, das für viele gängige Dienste wie SSH (Port 22) und HTTP (Port 80) verwendet wird. Die Option -sT in nmap führt einen TCP-Connect-Scan durch.

Wichtig: Ersetzen Sie <your_IP_address> durch die tatsächliche IP, die Sie im vorherigen Schritt gefunden haben. Wenn Ihre IP beispielsweise 172.16.50.13 lautet, wäre der Befehl nmap -sT 172.16.50.13.

Ersetzen Sie <your_IP_address> durch Ihre IP und führen Sie den Befehl aus:

nmap -sT <your_IP_address>

Die Ausgabe listet die Ports auf, die sich im Zustand "open" befinden. Ihr System hat wahrscheinlich den SSH-Port (22) standardmäßig geöffnet und möglicherweise zusätzliche Dienste, die auf anderen Ports laufen.

Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-01 14:08 CST
Nmap scan report for iZrj93qpoj98oqswu96cqfZ (172.16.50.13)
Host is up (0.00013s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3000/tcp open  ppp
3001/tcp open  nessus

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

Als Nächstes scannen wir nach UDP-Ports (User Datagram Protocol). UDP ist ein verbindungsloses Protokoll, das für Dienste wie DNS (Port 53) und DHCP (Ports 67/68) verwendet wird. UDP-Scans können langsamer und weniger zuverlässig sein als TCP-Scans. Die Verwendung von sudo liefert bessere Ergebnisse für UDP-Scans. Die Option -sU weist nmap an, einen UDP-Scan durchzuführen.

Denken Sie daran: Ersetzen Sie <your_IP_address> durch Ihre tatsächliche IP-Adresse aus dem vorherigen Schritt.

Ersetzen Sie <your_IP_address> durch Ihre IP und führen Sie den Befehl aus:

sudo nmap -sU <your_IP_address>

Die Ausgabe zeigt möglicherweise Ports als open|filtered an. Das bedeutet, dass nmap nicht feststellen kann, ob der Port offen ist oder ob eine Firewall den Scan blockiert. Dies ist ein häufiges Ergebnis bei UDP-Scans.

Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-01 14:09 CST
Nmap scan report for iZrj93qpoj98oqswu96cqfZ (172.16.50.13)
Host is up (0.0000060s latency).
Not shown: 998 closed ports
PORT     STATE         SERVICE
68/udp   open|filtered dhcpc
5353/udp open|filtered zeroconf

Nmap done: 1 IP address (1 host up) scanned in 1.29 seconds

Durch das Abschließen dieser Scans haben Sie erfolgreich die Dienste identifiziert, die auf Ihrem Rechner auf Netzwerkverbindungen warten.

Überprüfung der anfänglichen Netzwerkkonnektivität mit ping

In diesem Schritt verwenden Sie den Befehl ping, um zu überprüfen, ob Ihr System auf Netzwerkanfragen reagiert, bevor Sie Firewall-Regeln implementieren. Der Befehl ping sendet ICMP-Pakete (Internet Control Message Protocol) vom Typ "echo request" an einen Zielhost. Wenn der Host erreichbar und so konfiguriert ist, dass er antwortet, sendet er ein "echo reply"-Paket zurück. Dies ist eine grundlegende Methode, um die grundlegende Netzwerkkonnektivität zu testen.

Bevor wir eine Firewall-Regel erstellen, um diese Art von Verkehr zu blockieren, müssen wir zunächst bestätigen, dass der Verkehr derzeit zugelassen wird. Dies stellt sicher, dass wir später, wenn wir unsere Regel testen, sicher sein können, dass die Regel die Ursache für die Blockierung ist und nicht ein anderes bereits bestehendes Netzwerkproblem.

Wir werden die "Loopback"-Adresse 127.0.0.1 anpingen. Diese spezielle IP-Adresse verweist immer auf Ihren eigenen Rechner und ermöglicht es Ihnen, den lokalen Netzwerk-Stack zu testen, ohne eine externe Verbindung zu benötigen oder überhaupt die zugewiesene IP-Adresse Ihres Rechners kennen zu müssen.

Um nur vier Pakete zu senden und dann zu stoppen, verwenden wir die Option -c 4. Dies ist wichtig, denn ohne sie würde ping kontinuierlich laufen, bis Sie es manuell mit Strg+C stoppen.

Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:

ping -c 4 127.0.0.1

Sie sollten eine Ausgabe sehen, die anzeigt, dass vier Pakete gesendet und vier empfangen wurden, was darauf hindeutet, dass Ihr System korrekt auf ICMP-Anfragen reagiert.

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.055 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.053 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3070ms
rtt min/avg/max/mdev = 0.045/0.051/0.055/0.003 ms

Die Zeile 0% packet loss bestätigt, dass die Verbindung einwandfrei funktioniert. Nachdem Sie nun eine Basislinie festgelegt haben, sind Sie bereit, eine Firewall-Regel zu konfigurieren, um genau diese Art der Kommunikation zu blockieren.

Erstellen einer iptables-Regel zum Verwerfen von ICMP-Paketen

In diesem Schritt konfigurieren Sie eine einfache Firewall-Regel mit iptables, dem Standard-Befehlszeilenprogramm zur Verwaltung von Netzwerkpaketfilterungsregeln im Linux-Kernel. Wir erstellen eine Regel, um den ICMP-Verkehr zu blockieren, den Sie zuvor mit dem Befehl ping getestet haben.

iptables arbeitet mit einem System von Tabellen, Ketten und Regeln.

  • Tabellen (Tables): Dies sind Sammlungen von Ketten für einen bestimmten Zweck. Die am häufigsten verwendete Tabelle ist filter, die die Standardeinstellung ist und zur Paketfilterung verwendet wird.
  • Ketten (Chains): Dies sind Listen von Regeln, die der Reihe nach überprüft werden. Für eingehenden Verkehr wird die Kette INPUT verwendet.
  • Regeln (Rules): Eine Regel gibt Kriterien für ein Paket an (wie sein Protokoll oder seine Quelladresse) und ein Ziel (was mit dem Paket geschehen soll, z. B. ACCEPT oder DROP).

Zuerst untersuchen wir die aktuelle Regelsammlung. Da iptables Kernel-Einstellungen modifiziert, müssen Sie sudo verwenden. Die Option -L listet die Regeln in der Standardtabelle filter auf.

sudo iptables -L

Sie sehen die drei Standardketten: INPUT, FORWARD und OUTPUT. In dieser Umgebung stellen Sie möglicherweise fest, dass Docker bereits einige Regeln in der Kette FORWARD erstellt und benutzerdefinierte Ketten für die Container-Netzwerkkonfiguration hinzugefügt hat. Die Ketten INPUT und OUTPUT verwenden für den regulären Verkehr immer noch die Standardrichtlinie ACCEPT.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Nun fügen wir eine Regel hinzu, um eingehende ICMP-Pakete zu blockieren. Wir werden eine neue Regel an die Kette INPUT anhängen (-A).

Der Befehl ist wie folgt aufgebaut:

  • sudo iptables: Der Befehl zur Verwaltung der Firewall.
  • -A INPUT: Hängt eine Regel an die Kette INPUT an.
  • -p icmp: Diese Regel gilt für Pakete, die das Protokoll icmp verwenden.
  • -j DROP: Wenn ein Paket übereinstimmt, springt es zum Ziel DROP, das das Paket stillschweigend verwirft, ohne eine Antwort zu senden.

Führen Sie den folgenden Befehl aus, um die Regel zu erstellen:

sudo iptables -A INPUT -p icmp -j DROP

Dieser Befehl erzeugt bei Erfolg keine Ausgabe. Sie haben nun der Kernel-Firewall angewiesen, alle eingehenden ICMP-Pakete von jeder Quelle zu verwerfen.

Überprüfung der Firewall-Regel und Test der Blockierung

In diesem letzten Schritt bestätigen Sie, dass Ihre neue Firewall-Regel erfolgreich hinzugefügt wurde, und testen dann deren Auswirkung, indem Sie erneut versuchen, Ihr System anzupingen. Dieser Verifizierungsprozess ist in der Netzwerkadministration entscheidend, um sicherzustellen, dass Sicherheitsrichtlinien korrekt implementiert werden.

Zuerst sehen wir uns die Liste der Regeln erneut an, um Ihre neue Ergänzung zu sehen. Durch Ausführen desselben Befehls wie zuvor können Sie den aktuellen Zustand der Firewall einsehen.

sudo iptables -L

Sie sollten nun Ihre neue Regel unter der Kette INPUT sehen. Die Ausgabe zeigt deutlich, dass Pakete, die dem Protokoll icmp entsprechen, zum Ziel DROP geleitet werden.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       icmp --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Nachdem Sie nun bestätigt haben, dass die Regel vorhanden ist, testen wir sie. Führen Sie denselben ping-Befehl aus, den Sie in Schritt 2 verwendet haben.

ping -c 4 127.0.0.1

Dieses Mal erhalten Sie keine Antworten. Der Befehl scheint einige Sekunden zu hängen und wird dann beendet. Die Ausgabe zeigt 100% packet loss. Dies ist das erwartete Verhalten, da die Firewall des Kernels nun die eingehenden ICMP-Pakete stillschweigend verwirft, genau wie Sie es angewiesen haben.

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3055ms

Sie haben den ICMP-Verkehr erfolgreich blockiert! Die mit iptables erstellten Regeln sind nicht persistent und werden nach einem Systemneustart gelöscht. Es ist jedoch gute Praxis zu wissen, wie man eine Regel manuell entfernt. Sie können dies mit dem Flag -D (delete) tun, indem Sie die exakt gleiche Regel angeben, die Sie hinzugefügt haben.

Entfernen wir die Regel, um die Konnektivität wiederherzustellen.

sudo iptables -D INPUT -p icmp -j DROP

Um zu bestätigen, dass die Regel entfernt wurde und die Konnektivität wiederhergestellt ist, führen Sie ping ein letztes Mal aus.

ping -c 2 127.0.0.1

Der Ping sollte nun erfolgreich sein und bestätigen, dass Sie die Firewall-Regel erfolgreich entfernt haben.

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.058 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1024ms
rtt min/avg/max/mdev = 0.048/0.053/0.058/0.005 ms

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie eine anfängliche Netzwerkerkundung auf einem Linux-System durchführen. Sie haben mit der Installation des Tools nmap begonnen, um nach offenen TCP- und UDP-Ports zu suchen, nachdem Sie die IP-Adresse des Rechners ermittelt hatten. Anschließend haben Sie eine Basislinie für die Netzwerkkonnektivität mithilfe des Befehls ping erstellt, der bestätigte, dass das System erfolgreich ICMP-Verkehr empfing und darauf reagierte.

Der Kern des Labs bestand darin, das iptables-Firewall-Dienstprogramm zur Manipulation des Netzwerkverkehrs zu verwenden. Sie haben eine spezifische Regel für die INPUT-Kette erstellt und angewendet, um alle eingehenden ICMP-Pakete zu DROPen, wodurch Tools wie ping effektiv blockiert wurden. Um den Prozess abzuschließen, haben Sie die Aktivität der neuen Regel durch Auflisten des aktuellen iptables-Regelsatzes überprüft und dann die Blockierung getestet, indem Sie erneut versucht haben, den Rechner anzupingen, und bestätigt, dass die Anfragen nun wie erwartet mit einem Timeout endeten.