hypernia
Goto Top

IPv6: Host identifizieren und Ports freigeben

Hi zusammen,

ich habe 2 hAP AC². Diese hängen "in Reihe" hinter einem Provider-Router mit DS light. Die Aufgaben sehen u. a. wie folgt aus:
  • der "vordere" hat 2 VLANs (Gast in einem WLAN, der Rest Heimnetzwerk) sowie Firewall, CapsMan, DHCP-Server etc.
  • der "hintere" hat aktuelle im Grunde nur eine große Bridge mit allen Ethernet + Wifi-Interfaces.

Soweit funktioniert alles zu meiner Zufriedenheit.

Ich möchte aber von extern auf (vorest nur) einen Server (hängt am hinteren hAP AC²) Zugriff haben und suche einen eleganten Weg, das zu ermöglichen.

Zunächst habe ich auf dem vorderen hAP AC² per folgender Konfiguration IPv6 aktiviert:
/ipv6 address
add from-pool=pool-ipv6 interface="vlan100 (Heim)"  
add from-pool=pool-ipv6 interface="vlan200 (Gast)"  
/ipv6 dhcp-client
add add-default-route=yes interface=ether1 pool-name=pool-ipv6 request=prefix use-peer-dns=no
/ipv6 firewall address-list
add address=::/128 comment="defconf: unspecified address" list=bad_ipv6  
add address=::1/128 comment="defconf: lo" list=bad_ipv6  
add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6  
add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6  
add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6  
add address=100::/64 comment="defconf: discard only " list=bad_ipv6  
add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6  
add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6  
add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6  
add address=::224.0.0.0/100 comment="defconf: other" list=bad_ipv6  
add address=::127.0.0.0/104 comment="defconf: other" list=bad_ipv6  
add address=::/104 comment="defconf: other" list=bad_ipv6  
add address=::255.0.0.0/104 comment="defconf: other" list=bad_ipv6  
/ipv6 firewall filter
add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked  
add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid  
add action=accept chain=input comment="defconf: accept ICMPv6" protocol=icmpv6  
add action=accept chain=input comment="defconf: accept UDP traceroute" port=33434-33534 protocol=udp  
add action=accept chain=input comment="defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=udp src-address=fe80::/16  
add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 protocol=udp  
add action=accept chain=input comment="defconf: accept ipsec AH" protocol=ipsec-ah  
add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=ipsec-esp  
add action=accept chain=input comment="defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec  
add action=drop chain=input comment="defconf: drop everything else not coming from LAN" in-interface-list=!LAN  
add action=accept chain=forward comment="defconf: accept established,related,untracked" connection-state=established,related,untracked  
add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid  
add action=drop chain=forward comment="defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6  
add action=drop chain=forward comment="defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6  
add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" hop-limit=equal:1 protocol=icmpv6  
add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=icmpv6  
add action=accept chain=forward comment="defconf: accept HIP" protocol=139  
add action=accept chain=forward comment="defconf: accept IKE" dst-port=500,4500 protocol=udp  
add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=ipsec-ah  
add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=ipsec-esp  
add action=accept chain=forward comment="defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec  
add action=accept chain=forward in-interface="vlan100 (Heim)" comment="Heim-Netz darf alles"  
add action=drop chain=forward in-interface=all-vlan out-interface=all-vlan comment="Kein Inter-VLAN-Routing"  
add action=drop chain=forward comment="defconf: drop everything else not coming from LAN" in-interface-list=!LAN  
/ipv6 nd
set [ find default=yes ] interface="vlan100 (Heim)"  
add hop-limit=64 interface="vlan200 (Gast)"  

Auf dem Server wird per Skript ein AAAA-DynDNS-Eintrag geschrieben und wenn ich in der Firewall Port 22 grundsätzlich erlaube, kommt die Verbindung zustande. Allerdings möchte ich natürlich nur die Verbindungen aus dem Internet erlauben, die wirklich sein müssen.

Ich habe einen sich über die Zeit wechselnden IPv6-Prefix und es wird die Privacy-Extension-IP an DynDNS übertragen (was ich grundsätzlich gut finde).

Folgende Lösungsideen habe ich, um den Zugriff von Außen zu ermöglichen, die mich aber allesamt nicht überzeugen:
  • Es gibt mehr VLANs, nach denen dann unterschieden wird. In Zukunft mag es aber (auch nur temporär) so sein, dass ich eine Web-Oberfläche im NAS, SSH im Server, eine Schnittstelle in der IoT-Zentrale und einen Teamspeak-Port auf dem PC freigeben möchte. Dann bräuchte ich pro Gerät ein VLAN inkl. Firewall-Regeln etc.
  • Ich mache mir an irgend einer Aktion (z. B. Ping auf bestimmte IP, Source-Mac) eine Firewall-Regel fest, die als Action die Source-IP in eine Adressliste packt. Diese Liste dient als Basis für die Freigabe.
  • Über die Portnummer, irgenwelche Mangle- und Firewall-Regeln stelle ich sicher, dass nur am richtigen Port die Freigabe ankomt. Dabei müsste ich aber z. B. die Firewall in der Bridge anschalten, wo ich nicht einschätzen kann, ob das zu Performanceinbußen führt (zumindest habe ich da etwas im Hinterkopf). Zudem wird das so nicht ins Wifi skalieren.

Kurz und knapp: Wie gebe ich elegant, performant und gut wartbar für einen einzelnen IPv6-Client einen einzelnen Port frei?

Content-Key: 2975295120

Url: https://administrator.de/contentid/2975295120

Printed on: April 18, 2024 at 03:04 o'clock

Member: colinardo
Solution colinardo Jun 03, 2022 updated at 14:29:12 (UTC)
Goto Top
Servus.
Zitat von @Hypernia:
Kurz und knapp: Wie gebe ich elegant, performant und gut wartbar für einen einzelnen IPv6-Client einen einzelnen Port frei?
Forwarding Chain Regel mittels AddressList und dem DynDNS Host füttern (Mikrotik ermittelt bei der Eingabe eines Hostnamens die IPv6 IP automatisch mit einem dynamischen Eintrag in der AddressList.
 /ipv6 firewall address-list add list=mylist address=myhost.dyndns.tld
 /ipv6 firewall filter add chain=forward in-interface-list=WAN dst-address-list=mylist protocol=tcp dst-port=22
Damit ist erst mal der Weg frei zum Zieldevice. Bei Bedarf dann noch nur die rein lassen die vorher anklopfen.

Ansonsten ist wie meist, ein VPN die bessere Wahl, schon aus Gründen von dem ganzen embedded Kram dem man nicht vertrauen kann sie öffentlich zu platzieren. Löcher bohren kann nur die allerletzte Variante sein, vor allem sollte man, wenn man es trotzdem macht, diese Devices dann in einer DMZ platzieren und Zugriffe entsprechend begrenzen.

Grüße Uwe
Member: Hypernia
Hypernia Jun 03, 2022 at 14:37:14 (UTC)
Goto Top
Perfekt, 1000 Dank! Ich habe mir die Finger blutig gegooglet, aber sämtliche IPv6-Firewall-Tutorials schotten alles ab und erlauben ICMP etc. und die Lösung besteht jetzt aus 2 simplen Zeilen.

Bzgl. Port Knocking nehme ich mir mal als Thema mit, VPN läuft tatsächlich auch schon wieder.