UDM Pro 3: Netzwerktrennung - Teil 1

Dies ist eine aktualisierte Version der ursprünglichen Artikels UDM Pro 1.x: Netzwerktrennung - Teil 1 und bezieht sich auf die UnifiOS Version 3.2.7 mit  Unifi Network Version 8.0.26. Mit jedem Update sowohl von UnifiOS als auch der Unifi Network App kann sich das Netzwerk-Setup und die IPv6 Unterstützung grundlegend ändern, so dass die vorgestellten Lösungen nicht mehr funktionieren.

01| Default Segmentierung in UnifiOS

Ich möchte mit der Unifi Dream Machine Pro unter anderem mein internes Netzwerk in unterschiedliche VLANs aufteilen. Die internen Teilnetzwerke sollen untereinander nicht mehr ungefiltert kommunizieren können, damit z.B. die weniger vertrauenswürdigen IoT-Geräte nicht  mit anderen internen Systemen kommunizieren können. Da ich im internen Netzwerk auch IPv6 einsetze  (siehe auch UDM Pro 1.x: IPv6 hinter einer FRITZ!Box einrichten), muss die Filterung dabei für beide Protokolle sichergestellt werden.  

Bei der Dream Machine Pro wird zwischen den drei Sicherheitszonen WAN, LAN und Guest unterschieden. Während den beiden WAN-Interfaces die Sicherheitszone WAN statisch zugewiesen wird, kann bei der Einrichtung des Netzwerks festgelegt werden, ob es sich um LAN- oder Guest-Netzwerk handelt. Wird in den Netzwerkeinstellungen in den erweiterten Einstellungen (Advanced) die Option Isloation aktiviert, dann wird ein Guest-Netzwerk angelegt. Ansonsten handelt es sich um ein LAN-Netzwerk:

Network Isolation Option
Caption

Um zu verstehen, ob und wie zwischen den unterschiedlichen Netzwerken gefiltert wird, muss zunächst der grundlegende Filtermechanismus der UDM Pro erläutert werden.

01.1| LAN-Netzwerke

Alle VLANs, die einem LAN-Netzwerk zugeordnet sind (im Unifi-Jargon auch Corporate Network genannt), können dabei in der Standardeinstellung ungefiltert miteinander kommunizieren. Sowohl über IPv4 als auch über IPv6:

IPv4 Default Rules für LAN In und Out
IPv4 Default Rules für LAN In und Out
IPv6 Default Rules für LAN In und Out
IPv6 Default Rules für LAN In und Out

01.1.1| Trennung der LAN-Netzwerke - IPv4

Um eine manuelle Trennung der LAN-Netzwerke kommt man hier also nicht herum. Das ist für die IPv4-Trennung auch grundsätzlich kein Problem und ist über Firewall-Regeln leicht zu implementieren. Wie das erreicht werden kann findet sich in zahlreichen Anleitungen im Internet. Im Prinzip kann das mit nur einer IP Group und jeweils einer Firewall-Regel für LAN In und Guest In umgesetzt werden:

IPv4 Group mit privaten IPv4-Adressbereichen
IPv4 Group mit privaten IPv4-Adressbereichen
IPv4 Cleanup Rule (Beispiel für LAN-Netzwerke)
IPv4 Cleanup Rule (Beispiel für LAN NEtzwerke)

Über dedizierte ACCEPT-Regeln vor der Cleanup-Regeln können dann gezielt Dienste im internen Netzwerk freigegeben werden.

01.1.1| Trennung der LAN-Netzwerke - IPv6

Schwieriger wird es jedoch bei der Trennung auf IPv6-Ebene. Wird vom Provider ein statisches IPv6-Prefix bereitgestellt, so kann dass oben beschriebene Prinzip mit den DROP-/REJECT-Regeln auch für IPv6 umgesetzt werden.  Das Prinzip funktioniert allerdings nicht mehr, wenn sich das IPv6-Prefix von Zeit zu Zeit ändert bzw. ändern kann (dynamisches IPv6-Prefix). Damit das Regelwerk dann noch korrekt funktioniert, müssen bei einem Prefix-Wechsel auch die IPv6-Firewall-Regeln angepasst werden. Zwar sind intern für die unterschiedlichen VLAN-Segmente bereits intern entsprechende IP-Sets vorgesehen, diese können in der Web-Oberfläche allerdings nicht verwendet werden. Eine Verwaltung der IPv6-Firewall-Regeln für die Trennung der LAN-Netzwerke mit dynamischen IPv6-PRefixen ist damit nicht wirklich möglich. Zumindest sind alle Versuche und Lösungsvorschläge die ich gefunden habe gescheitert (siehe z.B. Quellen [02] - [05]).

01.2| Guest-Netzwerken

Guest-Netzwerke sind deutlich eingeschränkter. Diese Netze können laut Default-Regeln nicht auf die LAN Netzwerke zugreifen:

IPv4 Default Rules für Guest In (bei 2 definierten Guest-Netzen und mehreren LAN-Netzen)
IPv6 Default Rules für Guest In (bei 2 definierten Guest-Netzen und mehreren LAN-Netzen)
IPv6 Default Rules für Guest In (bei 2 definierten Guest-Netzen und mehreren LAN-Netzen)

01.2.1| Trennung der Guest-Netzwerke - IPv4

Schaut man sich die Regeln per SSH genauer an, so sind im Wesentlichen folgende iptables-Regeln für die Trennung der Guest-Netzwerke von den LAN-Netzwerken auf IPv4 ebene verantwortlich:

Chain UBIOS_GUEST_IN_USER (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
[...]
6        0     0 RETURN     all  --  any    any     anywhere             anywhere             match-set UBIOS_guest_pre_allow dst /* 00000001095216690483 */
7        0     0 DROP       all  --  any    any     anywhere             anywhere             match-set UBIOS_guest_restricted dst /* 00000001095216690484 */
8        0     0 DROP       all  --  any    any     anywhere             anywhere             match-set UBIOS_corporate_network dst /* 00000001095216690485 */
9        0     0 DROP       all  --  any    any     anywhere             anywhere             match-set UBIOS_remote_user_vpn_network dst /* 00000001095216690486 */
[...]

Die in den Regeln genutzten IP-Sets sind bei mir folgendermaßen konfiguriert:

IP-SetBeschreibung
UBIOS_guest_pre_allowDieses IP-Set war bei mir leer, so dass die iptables-Regel 6 (s.o.) keine Wirkung hat.
UBIOS_guest_restrictedIn diesem IP-Set sind die RFC1918 Adressen (192.168.0.0/16, 10.0.0.0/8, 224.0.0.0/4, 172.16.0.0/12) hinterlegt. Dadurch wird dien Kommunikation aus einem Gast-Netzwerk in alle privaten Netzwerke über iptables-Regel 7 (s.o.) unterbunden.
UBIOS_corporate_networkDieses Set beinhaltet die IPv4-Adressbereiche der definierten Corporate-/LAN-Netzwerke. Mit der iptables-Regel 8 wird damit der Datenverkehr zu den LAN-Netzwerken unterbunden.
UBIOS_remote_user_vpn_networkDieses IP-Set war bei mir ebenfalls leer und wird wohl nur gefüllt, wenn auch ein VPN eingerichtet wird. Ich gehe davon aus, dass über diese Regel also der Verkehr zu etwaigen VPN-Clients eingeschränkt wird.

Damit werden die Guest-Netzwerke von LAN-/Corporate-Netzwerken auf IPv4-Ebene ordentlich voneinander getrennt. Der IPv4-basierte Datenverkehr zwischen zwei Guest-Segmenten wird allerdings über die folgenden Regeln zugelassen:

Chain UBIOS_GUEST_IN_USER (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
[...]
11       0     0 RETURN     all  --  any    any     192.168.2.0/24       anywhere             /* 00000001095216720481 */
12      85  7512 RETURN     all  --  any    any     192.168.0.0/24       anywhere             /* 00000001095216720482 */
13       0     0 RETURN     all  --  any    any     anywhere             anywhere             /* 00000001097364144127 */

Chain UBIOS_GUEST_OUT_USER (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 RETURN     all  --  any    any     anywhere             192.168.2.0/24       /* 00000001095216720481 */
2     1540  644K RETURN     all  --  any    any     anywhere             192.168.0.0/24       /* 00000001095216720482 */
3        0     0 RETURN     all  --  any    any     anywhere             anywhere             /* 00000001097364144127 */

01.2.1| Trennung der Guest-Netzwerke - IPv6

Eine ähnliche Trennung ist auch für IPv6 mittels ip6tables umgesetzt:

Chain UBIOS_GUEST_IN_USER (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
[...]
3        0     0 DROP       all      any    any     anywhere             anywhere             match-set UBIOS_corporate_networkv6 dst /* 00000001095216690487 */
4        0     0 DROP       all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br11 dst /* 00000001095216690488 */
5        0     0 DROP       all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br5 dst /* 00000001095216690489 */
6        0     0 DROP       all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br29 dst /* 00000001095216690490 */
7        0     0 DROP       all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br12 dst /* 00000001095216690491 */
8        0     0 DROP       all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br20 dst /* 00000001095216690492 */
[...]

In dem IP-Set UBIOS_corporate_networkv6 waren bei mir zwar keine Adressen hinterlegt, aber dafür sind in den Sets UBIOS_NETv6_br1-3 die IPv6-Adressen der LAN-Segmente hinterlegt. 

Mit den folgenden RETURN-Regeln wird vergleichbar zur IPv4 Kommunikation auch die Kommunikation zwischen den Guest-Netzwerken zugelassen:

Chain UBIOS_GUEST_IN_USER (2 references)
num   pkts bytes target     prot opt in     out     source               destination         
[...]
11     202 91594 RETURN     all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br666 src /* 00000001095216690494 */
12       0     0 RETURN     all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br2 src /* 00000001095216690495 */
13       0     0 RETURN     all      any    any     anywhere             anywhere             match-set UBIOS_ALL_NETv6_br666 src /* 00000001095216690496 */
14       0     0 RETURN     all      any    any     anywhere             anywhere             /* 00000001097364144126 */

Damit sind die Guest-Netzwerke zwar von den LAN-Netzwerken getrennt, aber eben nicht untereinander. Soll eines der Guest-Netzwerke also tatsächlich für den Internetzugang für Gäste bereitstellen, so können die Gäste theoretisch auch auf  andere Gast-Netzwerke zugreifen in denen beispielsweise die IoT-Geräte untergebracht sind.

02| Zwischenstand

Um eine angemessene Netzwerktrennung auf IPV4 und IPv6 mit dynamischen Prefixen umsetzen zu können, biete die Unifi Network GUI aktuell keine ausreichenden Möglichkeiten. Eine DIY-Lösung ist daher wohl die einzige Lösung.

Es ergeben sich folgende Punkte, die beim Aufbau des Netzwerks zu berücksichtigen sind:

  1. Eine Trennung der LAN-Netzwerke muss auch mit UnifiOS 3.2.7 noch immer manuell erfolgen. Während das für IPv4 über die GUI zu erreichen ist, ist das bei dynamischen IPV6-Prefixen in der GUI nicht möglich. Hier ist in der aktuellen Version eine Lösung nur mit Scripten zu realisieren. Dabei sollten nach Möglichkeit jedoch immer die Board-Mittel verwendet werden, da bei individuellen Scripten immer die Gefahr besteht, dass diese mit dem nächsten UnifiOS- oder Unifi Network App Update nicht mehr funktionieren und die Netzwerktrennung wieder aufgehoben wird. 
  2.  Sollen einzelne Netzwerksegmente möglichst sicher vom internen LAN bzw. den LAN-Netzwerken getrennt werden, so sollte der Netzwerktyp Guest verwendet werden. Geräte in diesen Netzwerken sollten auch dann nicht auf Geräte im internen LAN Zugreifen können, wenn das Script z.B. nach einem Firmware-Update nicht mehr korrekt funktioniert. Allerdings lässt sich zwischen den Guest-Netzwerk und dem LAN-Netzwerk der Datenverkehr nur sehr schwer freigeben.

Im nächsten Artikel werde ich zusammenfassen, wie ich das Firewall-Regelwerk angepasst habe, damit eine angemessene Filterung umgesetzt wird

03| Quellen

[01] weberblog.net: Tag Archives: IPv6 Dynamic Prefix 
[02] IPv6 Network Segmentation Strategy
[03] IPv6 firewall rules in Unifi controller  
[04] Firewall rules for IPv6 hosts with dynamic prefix from ISP
[05] Inbound Firewall rules with DHCPv6-PD

Kommentare

PostadresseE-MailadresseFestnetzMobiltelefonSMS/SignalThreemaTwitter DirektnachrichtFAXWeb Page