Gast vlan NUR für Internet

PaulAtreides

Well-Known Member
Wie kann ich in pf einstellen, dass das vlan20 nur Zugriff auf das Internet bekommt, aber nichts anderes?
Ich habe folgende Interfaces am Router

ext_if = "pppoe0" - Internet über NAT
int_if = "ix0" - lokales Netzwerk
wifi_if = "vlan10 - Wifi für normale User
wifiguest_if = "vlan20" - Wifi für Gueste
 
nur so ins unreine..
Code:
pass out quick on $ext_if received-on vlan20
block out received-on vlan20
Damit kann das vlan20 aber noch auf den Router zugreifen. Es fehlen noch passende in Regeln. Z.B.:
Code:
table <martians> const  { 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 169.254.0.0/16 172.16.0.0/12 \
                        192.0.0.0/24 192.0.2.0/24 192.88.99.0/24 192.168.0.0/16 198.18.0.0/15 \
                        198.51.100.0/24 203.0.113.0/24 224.0.0.22 240.0.0.0/4 255.255.255.255/32 \
                        ::/128 ::/96 ::1/128 ::ffff:0:0/96 100::/64 2001:10::/28 2001:2::/48 \
                        2001:db8::/32 3ffe::/16 fec0::/10 fc00::/7 }

block all
pass in on vlan20 to !<martians>
pass out on egress received-on vlan20
Damit wären dann nur noch die externen Ports on egress möglich.
 
Neben so Mars-Tabellen ginge hinsichtlich "router Erreichbarkeit":
block in on vlan20 to self

Will sagen: abundzu mal in pf.conf(5) nach diesen "magischen" (unueblichen) keywords schauen :)
 
Ja, das geht auch. Allerdings ist die "Mars-Tabellen" Regel einschränkender. Damit werden nur externe Adressen aus vlan20 zugelassen. ;)
 
Ach ja, und wenn man keine feste IP hat, dann sollte es
Bash:
 block in on vlan20 to (self)
lauten. Dann werden auch Adressänderungen berücksichtigt.
 
Hi

Wenn man das vlan in ein vrf verpackt
Wird nur noch eine Pf Regel benötigt

Die nat Regel Gen Internet

Holger
 
Hast Du da mal ein Beispiel? Und kann ich dann mit einem dhcpd beide Routing Domains bespielen?
 
rdomain erstellen

cat /etc/hostname.lo10
rdomain 10
inet 127.0.0.1/8
up
!/sbin/route -n -T 10 add default 127.0.0.1

vlan der rdomain zu ordnen
cat /etc/hostname.vlan10
rdomain 10
inet 192.168.1.1/24
up

pf
pass in on vlan10 inet from any to any rtable 0 nat-to (pppoe0)


beachte sobald das vlan / netz sich in der rdomain befinden sind alle dienste
wie DNS / NTP etc nicht mehr erreichbar

hier kann man mit rdr-to entsprechen abhilfe schaffen

beispiel
pass in on vlan10 inet proto udp from vlan:network to <local-networks> proto 53 rtable 0 rdr-to 127.0.0.1

Holger
 
Wie sieht es denn mit dhcpd aus? Muss ich für jede rdomain einen laufen lassen oder kann einer immer noch auf allen Interfaces agieren?
 
Und wie sieht die passende out rule aus? Genügt ein
Code:
pass out on pppoe0 received-on vlan10
oder muss ich dort auch auf die rdomain verweisen?
 
dhcp must du einen zusätzlichen damon mit eingener config starten

die dhcpd10.conf musst du natürlich entsprechend deiner
vorgesehenen ip config auf vlan10 anpassen.

ln -s /etc/rc.d/dhcpd /etc/rc.d/dhcpd10
rcctl enable dhcpd10
rcctl set dhcpd10 rtable 10
rcctl set dhcpd10 flags -c /etc/dhcpd10.conf vlan10
rcctl start dhcpd10


Holger
 
Erstmal vielen Dank, dass Du es noch mal hingeschrieben hast. Ich habe da noch eine Verständnisfrage: Die erste Regel
Code:
pass in on vlan10 inet from any to any rtable 0 nat-to (pppoe0)
ist doch eine in-Regel und keine out-Regel. Ich dachte immer, dass man zusätzlich zu den in-Regeln auch noch out-Regeln braucht. Wie funktioniert das in diesem Fall?
Insbesondere da Du ja schreibst, dass
Code:
pass in on vlan10 inet from any to any rtable 0 nat-to (pppoe0)
und
Code:
pass out on lo10 inet from any to any rtable 0 nat-to (pppoe0)
äquivalent seien.
 
bitte manpage lesen
Nat als auch der Regel benötigen immer
Eine Richtung

Desweiteren gibt es einiges zum Thema vrf und Pf
Zuletzt beim eurobadcon 2023

Holger
P.s. binn zu im Urlaub und habe keinen Rechner mit zum tippen
 
Hallo Holger,

zuerst mal Dank dafür, dass Du auch im Urlaub hier antwortest. :) Ich habe in der Tat die Man-Page gelesen. Und dennoch verstehe ich Deine Antwort nicht. Laut pf.conf-man-page kann man bei nat-to mit in keine lokale Adresse für das nat verwenden. Mit (pppoe) tust Du das aber. Und man braucht eine Regel für den ausgehenden Verkehr. Also sollte es dann nicht
Code:
pass out on vlan10 inet from any to any rtable 0 nat-to (pppoe0)
heißen? Nat-to mit in-Regel habe ich auch in keiner Dokumentation gefunden. Vielleicht kannst Du noch einmal etwas Klarheit in die Sache bringen, gerne auch wenn Du wieder aus Deinem Urlaub zurück bist.

Ich werde das demnächst mal testen und dann berichten.

LG Markus
 
das verwenden von vrfs in dieser Form
Fällt unter das schöne neue Synonym Macrosegmentierung.
Ein pass in on vlan bezieht sich darauf das aller Traffic der reinkommt aus dem vrf raus transportiert wird.

Diese Regel matched nicht wenn der Traffic von der firewall selber generiert wird , z.b.
Route -n -T 10 exec Ping 8.8.8.8

Hier würde die pass Out in lo10 ins Spiel kommen.

Da auf diesem Interface das Default Gateway gesetzt ist , und forwarding aktiv, will der Kernel
Die pakete Out nach dest. Schicken.

Warum keine locale adressen () gehen sollen,
Kann ich nicht sagen , da ich so meinen Traffic gezielt von einer rtable zur anderen forwarde.

Ich hab selber meine Internet Leitungen
In eigenen vrf s. Um eine komplette Trennung
Von meinen interen Zonen / vrf zu bekommen.

Holger
 
Wen das Thema interessiert, ich hatte auf der EBC2016 einen Talk zu rdomains+pf gegeben.

PS: Suchtipp.. "vrf" ist ein Begriff, der in OpenBSD wenig benutzt wird (aber viel bei freebsd, cisco, linux).
 
Zurück
Oben