UDM-SE: Firewall-Diskrepanz bei IPv6-Regeln „Accept #ICMP IPv6“ öffnet offenbar mehr als ICMPv6
Hallo zusammen,
ich möchte eine Beobachtung teilen, die bei meiner UDM-SE im Zusammenhang mit IPv6 und den neuen Zone-/Policy-Firewall-Regeln aufgefallen ist. Vielleicht hilft es anderen, die gerade IPv6 auf mehreren VLANs aktivieren oder ihre WAN->LAN-Regeln prüfen.
Ausgangslage
- UDM-SE mit mehreren VLANs/Zonen
- Dual-WAN mit IPv6 Prefixes
- IPv6 per RA/SLAAC auf mehreren VLANs aktiv
- Firewall wird über die neue Zone-/Policy-Ansicht verwaltet
Nach dem Aktivieren von IPv6 habe ich die generierten ip6tables-Regeln geprüft und dabei eine Diskrepanz gefunden.
Beobachtung in der UniFi Firewall-Ansicht
In der UniFi-Oberfläche waren mehrere Regeln sichtbar mit dem Namen:
Die Regeln wirkten vom Namen her so, als würden sie nur ICMPv6 erlauben. In der Übersicht standen sie jedoch sinngemäß als:
Allow
IPv6
All
External → Internal
Allow
IPv6
All
External → Hotspot
Allow
IPv6
All
External → External
Allow
IPv6
All
External → VPN
Display More
Das ist aus meiner Sicht gefährlich, weil der Name „ICMP IPv6“ suggeriert, dass nur ICMPv6 erlaubt wird. Tatsächlich war der Protokollwert aber „All“.
Prüfung per MongoDB
In der alten Collection firewallrule waren die Regeln nicht zu finden. Fündig wurde ich in:
Die betroffenen Objekte hatten intern ungefähr diese Struktur:
{
"name": "Accept #ICMP IPv6 ",
"enabled": true,
"action": "ALLOW",
"ip_version": "IPV6",
"protocol": "all",
"icmp_v6_typename": "ANY",
"connection_state_type": "ALL",
"source": {
"zone_id": "External"
},
"destination": {
"zone_id": "Internal / Hotspot / External / Vpn"
}
}
Display More
Der entscheidende Punkt ist:
Damit handelt es sich eben nicht um eine reine ICMPv6-Regel.
Runtime-Auswirkung in ip6tables
In den generierten ip6tables-Ketten tauchten dadurch sehr frühe ACCEPT-Regeln auf, zum Beispiel sinngemäß:
-A UBIOS_WAN_LAN_USER -j ACCEPT
-A UBIOS_WAN_GUEST_USER -j ACCEPT
-A UBIOS_WAN_VPN_USER -j ACCEPT
Diese ACCEPT-Regeln standen vor den späteren Drop-Regeln. Dadurch konnte WAN->LAN bei IPv6 potentiell deutlich offener sein als erwartet.
Temporärer Schutz
Ich habe als Sofortmaßnahme vor die betroffenen WAN-Zielketten eine Drop-Regel für neue und invalide Verbindungen gesetzt:
ip6tables -I UBIOS_WAN_LAN_USER 1 -m conntrack --ctstate NEW,INVALID -j DROP
ip6tables -I UBIOS_WAN_GUEST_USER 1 -m conntrack --ctstate NEW,INVALID -j DROP
ip6tables -I UBIOS_WAN_DMZ_USER 1 -m conntrack --ctstate NEW,INVALID -j DROP
ip6tables -I UBIOS_WAN_VPN_USER 1 -m conntrack --ctstate NEW,INVALID -j DROP
Das blockt neue eingehende IPv6-Verbindungen aus dem WAN zu internen Zonen, lässt aber ausgehenden Traffic und Rückverkehr über RELATED,ESTABLISHED weiter funktionieren.
Dauerhafte Korrektur
Die eigentliche Ursache waren bei mir vier Policies mit dem Namen:
Diese habe ich deaktiviert, weil sie intern nicht ICMPv6, sondern IPv6 „all“ erlaubten:
Danach waren die falschen Policies deaktiviert. Zusätzlich bleibt bei mir ein kleiner systemd-Sicherheitsdienst aktiv, der die Runtime-Drop-Regeln wieder setzt, falls UniFi bei Provisioning oder Neustart die ip6tables-Regeln neu generiert.
Wichtiger Hinweis
Ich würde ICMPv6 nicht pauschal blockieren. IPv6 braucht bestimmte ICMPv6-Typen, unter anderem für Neighbor Discovery, Router Advertisements und Path MTU Discovery. Das Problem ist hier nicht ICMPv6 selbst, sondern dass eine Regel mit dem Namen „ICMP IPv6“ intern als „IPv6 All“ gespeichert bzw. angewendet wurde.
Bitte um Gegenprüfung
Kann jemand mit einer UDM-SE oder UDM-Pro und aktivem IPv6 einmal prüfen, ob bei ihm ähnliche Regeln existieren?
mongo --quiet --port 27117 ace --eval '
db.firewall_policy.find(
{ name: /ICMP IPv6/i },
{ name:1, enabled:1, action:1, ip_version:1, protocol:1, icmp_v6_typename:1, source:1, destination:1 }
).forEach(printjson)
'
Interessant wäre vor allem, ob bei euch ebenfalls folgendes auftaucht:
Falls ja, wäre das aus meiner Sicht zumindest eine sehr missverständliche Darstellung in der UI, im ungünstigen Fall aber eine echte Firewall-Diskrepanz.
LG