ping6.net
Sicherheit

IPv6-Firewall-Konfiguration: Wesentliche Regeln

Konfigurieren Sie Ihre Firewall für IPv6, ohne Konnektivität zu brechen. Wesentliche ICMPv6-Regeln, Linux-Beispiele und häufige Fehler zum Vermeiden.

ping6.net14. Dezember 20249 min read
IPv6FirewallSicherheitiptablesnftablesICMPv6

IPv4-Firewalls lassen Sie ICMP ohne größere Konsequenzen blockieren. IPv6 funktioniert nicht so. Blockieren Sie die falschen ICMPv6-Nachrichten und Sie brechen Path MTU Discovery, Neighbor Discovery und grundlegende Konnektivität. Ihre Firewall wird stillschweigend Verbindungsfehler verursachen, deren Debugging Stunden dauert.

TL;DR - Kurzübersicht

Wichtige Punkte:

  • ICMPv6 ist essentiell: Anders als IPv4 ICMP bricht Blockieren von ICMPv6 grundlegende Netzwerkoperationen
  • Spezifische Typen erlauben: Typen 1-3 (Fehler), 128-129 (Ping), 133-136 (NDP) sind erforderlich
  • Blockieren Sie niemals Typ 2: Packet Too Big-Nachrichten sind kritisch für Path MTU Discovery
  • Hop Limit 255 für NDP verwenden: Verhindert Off-Link-Spoofing von Neighbor Discovery
  • Auf alle Protokollfamilien anwenden: Vergessen Sie nicht, sowohl iptables als auch ip6tables zu konfigurieren

Direkt zu: Essentielle ICMPv6-Typen | Linux-Beispiele | Häufige Fehler


Warum IPv6-Firewalls anders sind#

In IPv4 handhabt ICMP Diagnose wie Ping und Traceroute. Sie können es vollständig blockieren und die meisten Dinge funktionieren noch. ARP läuft auf Layer 2, DHCP verwendet UDP und Router verwenden dedizierte Protokolle.

IPv6 fusionierte diese Funktionen in ICMPv6. Adressauflösung, Router-Erkennung und Duplicate Address Detection hängen alle von spezifischen ICMPv6-Typen ab. Blockieren Sie sie und Hosts können ihr Standard-Gateway nicht finden, Nachbarn können nicht im selben Link kommunizieren, und Verbindungen hängen bei MTU-Unübereinstimmungen.

Die Protokolldesigner trafen diese Entscheidung bewusst. ICMPv6 ist Teil der IPv6-Spezifikation, kein diagnostisches Add-On.

Wesentliche ICMPv6-Typen#

Ihre Firewall muss diese ICMPv6-Typen für grundlegende Funktionalität erlauben:

TypNameZweckDies blockieren?
1Destination UnreachablePort/Protokoll ist geschlossenNein - bricht TCP
2Packet Too BigPath MTU DiscoveryNIEMALS - bricht Verbindungen
3Time ExceededHop-Limit erreichtNein - bricht Traceroute
128Echo RequestPing-AnfrageOptional (aber warum?)
129Echo ReplyPing-AntwortOptional (aber warum?)
133Router SolicitationStandard-Gateway findenNIEMALS - bricht Konnektivität
134Router AdvertisementGateway-AnkündigungenNIEMALS - bricht Konnektivität
135Neighbor SolicitationAdressauflösung (ARP-Äquivalent)NIEMALS - bricht alles
136Neighbor AdvertisementAdressauflösungsantwortenNIEMALS - bricht alles

Das Blockieren der ICMPv6-Typen 2, 133, 134, 135 oder 136 wird IPv6-Konnektivität auf subtile, schwer zu debuggende Weise brechen. Tun Sie es nicht.

Typ 2 (Packet Too Big) verdient besondere Aufmerksamkeit. IPv6 hat keine Fragmentierung an Zwischen-Routern. Wenn ein Paket die Path MTU überschreitet, verwirft der Router es und sendet eine Packet Too Big-Nachricht zurück. Blockieren Sie dies und Verbindungen hängen nach dem initialen SYN/ACK. Sie werden Stunden damit verbringen zu debuggen, warum HTTPS funktioniert, aber große Transfers fehlschlagen.

Linux ip6tables-Beispiele#

Minimale Host-Firewall#

Für eine Client-Maschine oder Server, der keinen Verkehr routet:

# Bestehende Regeln löschen
ip6tables -F
ip6tables -X
 
# Standard-Policies
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
 
# Loopback erlauben
ip6tables -A INPUT -i lo -j ACCEPT
 
# Etablierte Verbindungen erlauben
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Wesentliches ICMPv6 erlauben
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT   # Destination Unreachable
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT   # Packet Too Big
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT   # Time Exceeded
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -j ACCEPT # Echo Request
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 129 -j ACCEPT # Echo Reply
 
# Neighbor Discovery erlauben (muss Link-Local mit Hop-Limit 255 sein)
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement
 
# DHCPv6 erlauben (falls benötigt)
ip6tables -A INPUT -p udp --dport 546 -j ACCEPT
 
# Verworfene Pakete protokollieren (optional)
ip6tables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "ip6tables-dropped: "

Die Hop-Limit-Prüfung (--hl-eq 255) verhindert gespoofde Neighbor Discovery-Pakete von Off-Link-Quellen. Legitimes Neighbor Discovery verwendet immer Hop-Limit 255.

Server-Firewall#

Fügen Sie Ihre Services nach den ICMPv6-Regeln hinzu:

# SSH
ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
 
# HTTP/HTTPS
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# DNS (falls DNS-Server läuft)
ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 53 -j ACCEPT

Die SSH-Regel verwendet recent für grundlegendes Rate-Limiting. Nach 4 Verbindungsversuchen in 60 Sekunden von derselben Adresse werden zusätzliche Versuche verworfen.

Router-Forwarding-Regeln#

Für Router oder Systeme, die Verkehr weiterleiten:

ip6tables -P FORWARD DROP
 
# Etablierte Verbindungen erlauben
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# ICMPv6-Forwarding erlauben (kritisch für PMTUD)
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
 
# Internem Netzwerk Internetzugriff erlauben
ip6tables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Leiten Sie keine Neighbor Discovery-Nachrichten (133-136) weiter. Diese sind nur Link-Local.

Linux nftables-Beispiele#

Moderne Distributionen verwenden nftables statt iptables. Die Syntax ist sauberer:

# Tabelle erstellen
nft add table ip6 filter
 
# Chains erstellen
nft add chain ip6 filter input { type filter hook input priority 0\; policy drop\; }
nft add chain ip6 filter forward { type filter hook forward priority 0\; policy drop\; }
nft add chain ip6 filter output { type filter hook output priority 0\; policy accept\; }
 
# Loopback
nft add rule ip6 filter input iif lo accept
 
# Etablierte Verbindungen
nft add rule ip6 filter input ct state established,related accept
 
# ICMPv6
nft add rule ip6 filter input icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, echo-request, echo-reply } accept
 
# Neighbor Discovery mit Hop-Limit-Prüfung
nft add rule ip6 filter input icmpv6 type { nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } ip6 hoplimit 255 accept
 
# SSH mit Rate-Limiting
nft add rule ip6 filter input tcp dport 22 ct state new limit rate 4/minute accept
 
# HTTP/HTTPS
nft add rule ip6 filter input tcp dport { 80, 443 } accept

Die Set-Notation ({ 80, 443 }) erstellt eine Regel statt zwei, was das Regelwerk effizienter macht.

Windows-Firewall#

Windows-Firewall aktiviert standardmäßig IPv6 ICMPv6 für die meisten essentiellen Typen, aber Sie sollten verifizieren:

# Aktuelle ICMPv6-Regeln anzeigen
Get-NetFirewallRule -DisplayName "*ICMPv6*" | Format-Table DisplayName, Enabled, Direction
 
# Alle ICMPv6 eingehend aktivieren (falls deaktiviert)
Enable-NetFirewallRule -DisplayName "Core Networking - Destination Unreachable (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Packet Too Big (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Neighbor Discovery Solicitation (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Neighbor Discovery Advertisement (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Router Advertisement (ICMPv6-In)"
 
# SSH-Server auf IPv6 erlauben
New-NetFirewallRule -DisplayName "SSH (IPv6)" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow -Profile Any -RemoteAddress Any

Für Webserver:

New-NetFirewallRule -DisplayName "HTTP (IPv6)" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS (IPv6)" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow

Cloud-Sicherheitsgruppen#

AWS#

Sicherheitsgruppen sind Stateful und erlauben etablierten Rückverkehr automatisch. Fügen Sie explizite Regeln hinzu für:

  • ICMPv6: Verwenden Sie „All ICMPv6" oder wählen Sie spezifische Typen
  • Services: Fügen Sie Ihre TCP/UDP-Ports hinzu

Azure#

Network Security Groups (NSGs) handhaben IPv6. Standard-Regeln erlauben ausgehenden und etablierten Verkehr. Fügen Sie eingehende Regeln für Services hinzu.

GCP#

Firewall-Regeln unterstützen IPv6. Erstellen Sie separate Regeln mit --source-ranges=::/0 für IPv6. Standard-Regeln enthalten kein ICMPv6, also fügen Sie es explizit hinzu.

Alle drei Anbieter erfordern, dass Sie IPv6 auf der VPC/Netzwerk zuerst aktivieren. IPv6 ist nicht standardmäßig aktiviert.

Häufige Fehler#

Alles ICMPv6 blockieren#

Der einzelne häufigste IPv6-Firewall-Fehler. Administratoren portieren IPv4-Regeln, die alle ICMP blockieren, und fragen sich, warum IPv6 nicht funktioniert. Wenn Sie sich nur eine Sache aus diesem Artikel merken: niemals alle ICMPv6 blockieren.

Keine IPv6-Firewall-Regeln#

Einige Admins konfigurieren iptables sorgfältig, ignorieren aber ip6tables vollständig. IPv6 ist dann komplett offen. Beide Protokollfamilien benötigen Firewall-Regeln.

Egress-Filterung vergessen#

Die meisten Beispiele zeigen nur Ingress-Regeln. Wenn Sie strikte Egress-Filterung implementieren (sollten Sie), erlauben Sie ausgehende ICMPv6-Typen 133, 135 und 128. Das Blockieren ausgehender Neighbor Solicitations verhindert, dass der Host Nachbarn auflöst.

Falsches Hop-Limit bei Neighbor Discovery#

Neighbor Discovery-Pakete ohne Hop-Limit-Prüfung (255) zu akzeptieren erlaubt Angreifern, gespoofde Router- oder Neighbor-Advertisements von überall im Internet zu senden. Überprüfen Sie immer Hop-Limit.

Zu viel erlauben#

„All ICMPv6" zu aktivieren ist sicherer als alles zu blockieren, aber immer noch übermäßig. Sie müssen keine Multicast Listener Discovery-Nachrichten vom Internet erlauben, zum Beispiel. Verwenden Sie spezifische Typen.

Ihre Firewall testen#

Nach der Regelkonfiguration, grundlegende Konnektivität verifizieren:

# Ping testen (erfordert ICMPv6-Typen 128/129)
ping6 -c 3 2001:4860:4860::8888
 
# Path MTU Discovery testen (erfordert ICMPv6-Typ 2)
# Großes Paket senden, verifizieren, dass es nicht hängt
curl -6 -v https://ipv6.google.com/
 
# Neighbor Discovery prüfen (erfordert Typen 135/136)
ip -6 neigh show
 
# Routen verifizieren (erfordert Typen 133/134)
ip -6 route show

Von einem anderen Host testen, dass nicht autorisierte Ports tatsächlich blockiert sind:

# Sollte Timeout oder „Connection refused" zurückgeben
telnet -6 ihre:server::adresse 23
 
# Sollte funktionieren (wenn SSH erlaubt ist)
ssh -6 ihre:server::adresse

Verwenden Sie Online-Scanner wie IPv6 Port Scanner (ipv6-tools.com) oder test-ipv6.com, um Ihre Firewall von externen Netzwerken zu verifizieren.


IPv6-Firewalls erfordern zu verstehen, was ICMPv6 tut. Das Protokoll ist nicht optional oder nur für Diagnose. Erlauben Sie die essentiellen Typen, verifizieren Sie, dass Neighbor Discovery funktioniert, und testen Sie Path MTU Discovery mit echtem Verkehr. Machen Sie dies richtig und Ihre IPv6-Firewall wird sowohl sicher als auch funktional sein.

Verwandte Artikel#