Einführung
In diesem Lab lernen Sie den Umgang mit iptables, einem leistungsstarken Kommandozeilen-Werkzeug für die Firewall-Konfiguration unter Linux, um eingehenden ICMP-Traffic zu blockieren. Sie werden eine Firewall-Regel konfigurieren, die Pakete des ICMP-Protokolls verwirft. Dieses Protokoll wird standardmäßig vom ping-Befehl genutzt, um die Netzwerkverfügbarkeit zu prüfen. Die Steuerung des Netzwerkzugriffs auf Protokollebene ist eine grundlegende Fertigkeit bei der Absicherung von Linux-Systemen.
Zu Beginn führen Sie einen einleitenden Netzwerk-Scan mit nmap durch, um die offenen Ports des Systems zu ermitteln. Danach stellen Sie einen Referenzwert her, indem Sie mit ping überprüfen, ob ICMP-Traffic initial erlaubt ist. Der Kern des Labs besteht darin, eine spezifische iptables-Regel zu erstellen und anzuwenden, die alle eingehenden ICMP-Pakete verwirft. Abschließend verifizieren Sie die aktive Regel und testen deren Wirksamkeit durch einen erneuten Ping-Versuch auf Ihren Rechner, um sicherzustellen, dass die Anfragen nun erfolgreich blockiert werden.
Offene TCP- und UDP-Ports mit nmap scannen
In diesem Schritt lernen Sie, wie Sie das Tool nmap einsetzen, um Ihr eigenes System nach offenen Netzwerk-Ports zu scannen. Netzwerk-Ports 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 wesentlicher erster Schritt bei der Sicherheitsbewertung eines Rechners, da jeder offene Port einen potenziellen Angriffspunkt darstellt.
Zuerst müssen Sie nmap installieren, da es in der Standardumgebung nicht enthalten ist. Es empfiehlt sich, vor der Installation neuer Software die Paketlisten zu aktualisieren.
Führen Sie den folgenden Befehl aus, um die Paketlisten zu aktualisieren:
sudo apt-get update
Installieren Sie nun nmap mit folgendem Befehl:
sudo apt-get install -y nmap
Sie sollten eine Ausgabe sehen, die den Installationsfortschritt von nmap und dessen Abhängigkeiten anzeigt.
Als Nächstes müssen Sie die IP-Adresse Ihres Rechners ermitteln, damit nmap weiß, welches Ziel gescannt werden soll. Dies gelingt mit dem ip-Befehl.
ip addr show
Suchen Sie nach einem Eintrag wie eth0 oder ens33. Ihre IP-Adresse steht neben dem Begriff inet. Sie sieht ungefähr so aus: 172.16.50.13/24.
So identifizieren Sie Ihre IP-Adresse aus der Ausgabe:
- Suchen Sie nach der Schnittstelle, die den Status
state UPhat (meistenseth0). - Finden Sie die Zeile, die mit
inetbeginnt (nichtinet6). - Verwenden Sie nur den Teil der IP-Adresse vor dem Schrägstrich
/(z. B. wenn dortinet 172.16.50.13/24steht, lautet Ihre IP-Adresse172.16.50.13). - Ignorieren Sie das Loopback-Interface (
lo) mit der IP127.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 können Sie Ihren ersten Scan durchführen. Wir beginnen 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 IP, die Sie im vorherigen Schritt ermittelt haben. Wenn Ihre IP beispielsweise 172.16.50.13 lautet, lautet der Befehl nmap -sT 172.16.50.13.
Führen Sie den Befehl mit Ihrer IP aus:
nmap -sT <your_IP_address>
Die Ausgabe listet die Ports auf, die sich im Zustand "open" befinden. Auf Ihrem System ist wahrscheinlich der SSH-Port (22) standardmäßig offen, eventuell laufen auch weitere Dienste auf anderen Ports.
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 (Port 67/68) genutzt wird. UDP-Scans können langsamer und weniger zuverlässig sein als TCP-Scans. Die Verwendung von sudo liefert bei UDP-Scans bessere Ergebnisse. Die Option -sU weist nmap an, einen UDP-Scan durchzuführen.
Hinweis: Ersetzen Sie auch hier <your_IP_address> durch Ihre tatsächliche IP-Adresse.
Führen Sie den Befehl aus:
sudo nmap -sU <your_IP_address>
Die Ausgabe zeigt Ports möglicherweise als open|filtered an. Das bedeutet, dass nmap nicht eindeutig bestimmen kann, ob der Port offen ist oder ob eine Firewall den Scan blockiert. Dies ist ein typisches 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
Mit diesen Scans haben Sie erfolgreich die Dienste identifiziert, die auf Ihrem Rechner auf Netzwerkverbindungen warten.
Initiale Netzwerkverbindung mit ping verifizieren
In diesem Schritt verwenden wir den ping-Befehl, um sicherzustellen, dass Ihr System auf Netzwerkanfragen reagiert, bevor wir Firewall-Regeln implementieren. Der ping-Befehl sendet ICMP (Internet Control Message Protocol) "Echo-Request"-Pakete an einen Zielhost. Wenn der Host erreichbar und entsprechend konfiguriert ist, antwortet er mit einem "Echo-Reply"-Paket. Dies ist die Standardmethode, um die grundlegende Netzwerkkonnektivität zu testen.
Bevor wir eine Firewall-Regel erstellen, um diesen Traffic zu blockieren, müssen wir bestätigen, dass er aktuell erlaubt ist. So stellen wir sicher, dass bei einem späteren Test die Regel die Ursache für die Blockierung ist und nicht ein bereits bestehendes Netzwerkproblem.
Wir pingen die "Loopback"-Adresse 127.0.0.1 an. Diese spezielle IP-Adresse verweist immer auf den eigenen Rechner. So können Sie den lokalen Netzwerk-Stack testen, ohne eine externe Verbindung zu benötigen oder die zugewiesene IP-Adresse Ihres Rechners kennen zu müssen.
Um genau vier Pakete zu senden und dann zu stoppen, verwenden wir die Option -c 4. Dies ist wichtig, da ping sonst endlos weiterlaufen würde, bis Sie es manuell mit Ctrl+C abbrechen.
Öffnen Sie Ihr Terminal und führen Sie folgenden Befehl aus:
ping -c 4 127.0.0.1
Sie sollten eine Ausgabe sehen, die zeigt, dass vier Pakete gesendet und vier empfangen wurden. Dies bestätigt, dass Ihr System korrekt auf ICMP-Anfragen antwortet.
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 diesen Referenzwert etabliert haben, können Sie nun die Firewall-Regel konfigurieren, um genau diese Art der Kommunikation zu unterbinden.
Eine iptables-Regel zum Verwerfen von ICMP-Paketen erstellen
In diesem Schritt konfigurieren Sie eine einfache Firewall-Regel mit iptables, dem Standard-Werkzeug zur Verwaltung von Paketfilterregeln im Linux-Kernel. Wir erstellen eine Regel, um den ICMP-Traffic zu blockieren, den Sie zuvor mit dem ping-Befehl getestet haben.
iptables arbeitet mit einem System aus Tabellen (Tables), Ketten (Chains) und Regeln (Rules).
- Tabellen: Sammlungen von Ketten für einen bestimmten Zweck. Die am häufigsten verwendete Tabelle ist
filter, die Standardtabelle für die Paketfilterung. - Ketten: Listen von Regeln, die nacheinander geprüft werden. Für eingehenden Traffic wird die
INPUT-Kette verwendet. - Regeln: Eine Regel definiert Kriterien für ein Paket (wie Protokoll oder Quelladresse) und ein Ziel (Target), also was mit dem Paket geschehen soll (z. B.
ACCEPToderDROP).
Zuerst schauen wir uns die aktuellen Regeln an. Da iptables Kernel-Einstellungen ändert, 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 eventuell fest, dass Docker bereits einige Regeln in der FORWARD-Kette sowie benutzerdefinierte Ketten für das Container-Networking erstellt hat. Die Ketten INPUT und OUTPUT nutzen für regulären Traffic 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 hängen (-A für append) eine neue Regel an die INPUT-Kette an.
Der Befehl setzt sich wie folgt zusammen:
sudo iptables: Der Befehl zur Verwaltung der Firewall.-A INPUT: Fügt eine Regel am Ende derINPUT-Kette hinzu.-p icmp: Diese Regel gilt für Pakete, die dasicmp-Protokoll verwenden.-j DROP: Wenn ein Paket zutrifft, springe zum ZielDROP, welches 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 den Kernel nun angewiesen, alle eingehenden ICMP-Pakete von beliebigen Quellen zu verwerfen.
Die Firewall-Regel verifizieren und die Sperre testen
In diesem letzten Schritt bestätigen Sie, dass Ihre neue Firewall-Regel erfolgreich hinzugefügt wurde, und testen deren Auswirkung, indem Sie erneut versuchen, Ihr System zu pingen. Dieser Verifizierungsprozess ist in der Netzwerkadministration entscheidend, um sicherzustellen, dass Sicherheitsrichtlinien korrekt umgesetzt wurden.
Zuerst lassen wir uns die Regelliste erneut anzeigen. Mit demselben Befehl wie zuvor sehen wir den aktuellen Status der Firewall.
sudo iptables -L
Sie sollten nun Ihre neue Regel unter der INPUT-Kette sehen. Die Ausgabe zeigt deutlich, dass Pakete, die dem icmp-Protokoll entsprechen, an das 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
Da die Regel nun aktiv ist, testen wir sie. Führen Sie denselben ping-Befehl wie in Schritt 2 aus.
ping -c 4 127.0.0.1
Diesmal erhalten Sie keine Antworten. Der Befehl scheint für einige Sekunden zu hängen und bricht dann ab. Die Ausgabe wird 100% packet loss anzeigen. Dies ist das erwartete Verhalten, da die Firewall des Kernels die eingehenden ICMP-Pakete nun einfach verwirft, genau wie konfiguriert.
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-Traffic erfolgreich blockiert! Beachten Sie, dass mit iptables erstellte Regeln nicht persistent sind und nach einem Systemneustart gelöscht werden. Es gehört jedoch zur guten Praxis, zu wissen, wie man eine Regel manuell entfernt. Dies geschieht mit dem Flag -D (delete), wobei Sie exakt dieselbe Regel angeben, die Sie zuvor hinzugefügt haben.
Löschen wir die Regel, um die Konnektivität wiederherzustellen:
sudo iptables -D INPUT -p icmp -j DROP
Um sicherzugehen, dass die Regel entfernt wurde und die Verbindung wieder steht, pingen wir ein letztes Mal.
ping -c 2 127.0.0.1
Der Ping sollte nun wieder erfolgreich sein.
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 grundlegende Netzwerkanalyse auf einem Linux-System durchführen. Sie begannen mit der Installation von nmap, um nach offenen TCP- und UDP-Ports zu suchen, nachdem Sie die IP-Adresse des Rechners ermittelt hatten. Danach stellten Sie die Netzwerkkonnektivität mittels ping sicher, was bestätigte, dass das System ICMP-Traffic empfangen und beantworten konnte.
Der Schwerpunkt des Labs lag auf der Nutzung des Firewall-Tools iptables zur Steuerung des Netzwerkverkehrs. Sie haben eine spezifische Regel für die INPUT-Kette erstellt, um alle eingehenden ICMP-Pakete zu verwerfen (DROP), wodurch Tools wie ping effektiv blockiert wurden. Zum Abschluss verifizierten Sie die aktive Regel durch Auflisten des iptables-Regelwerks und testeten die Sperre durch einen erneuten Ping-Versuch, der wie erwartet zu einem Timeout führte.



