PF Script mit zwei internen Interfaces

capt_cosmo

New Member
Hi,

ich habe mir ein ALIX zugelegt und OpenBSD via flashrd erfolgreich am Laufen. Mein PF Script läuft bis auf eine Sache ganz gut, und zwar liegt das Problem an den beiden internen Interfaces.

Der Netzaufbau sieht folgendermaßen aus:


Code:
                                               interface_wan
                                                     |
                                                     v
(server0, server1) --> interface_untrusted --> openbsd_box <-- interface_lan <-- (client0, ..., clientn)

Von den jeweiligen Interfaces sollen jeweils folgende interfaces erreicht werden können:
lan -> lan, wan, untrusted
untrusted -> wan, untrusted

Zusätzlich soll der auf der OpenBSD Box laufende SSH server nur vom lan aus ansprechbar sein...

Die relevanten Zeilen meines Scripts lauten:
Code:
...
# nat & qos
...
pass out quick
# lan -> untrusted, internet
pass in quick on $if_lan from $if_lan:network to ! $if_lan
# lan -> box:ssh
pass in quick on $if_lan proto tcp from $if_lan:network to $if_lan port ssh
# untrusted -> internet
pass in quick on $if_untrusted from ! $if_wan to ! $if_lan:network

Das Problem an dem Script besteht darin, dass ich noch immer von $if_untrusted auf den SSH der OpenBSD Box zugreifen darf...

Bin dankbar für alle Hinweise und Vorschläge!
 
hi


binde den sshd doch direkt an das lan if ( sshd_config ) , das sollte reichen in verbindung mit deinen regeln.

wobei die letzte regel konfus ist.

wenn $if_wan ein macro auf das interface ist muesste es eigentlich ($if_wan) sein ansonsten geht das so nicht.

desweiteren solltes du mit dem ! vorsichtig um gehen.

holger
 
Normalerweise ist OpenSSH auch gegen libwrap kompilliert und du kannst mittels den files /etc/hosts.allow und /etc/hosts.deny die TCP-Wrapping-Funktion nutzen.

Ist zwar hoch auf Layer-4, kannst aber weiter Zusatzfunktionen nutzen (siehe manpage)

gruß
Markus
 
Zuallererst vielen Dank für die Antworten!

Bei der Sache mit dem SSH-Daemon habt ihr natürlich recht, ich hab den bisher nur auf 0.0.0.0 horchen, um einen ersten Anhaltspunkt über die Richtigkeit der Firewallregeln zu haben. :)

Ich habe noch immer ein Problem damit, die Regeln richtig zu formulieren, und zwar kann ich nicht erfolgreich formulieren, dass ein Interface über die default route raus darf...
@mark05:
Danke, if_wan ist tatsächlich ein ein Macro auf pppoe0, jedoch funktioniert weder
pass in on $if_lan from $if_lan:network to ($if_wan) noch
pass in on $if_lan from $if_lan:network to (egress)

Hier sind die relevanten Zeilen, mit denen ich das Problem meines Erachtens nach lediglich umschifft habe, indem ich die Regeln umständlich formuliert habe.

Code:
# lan:network -> lan:ssh
pass in quick on $if_lan proto tcp from $if_lan:network to $if_lan port ssh

# lan -> {dmz, internet}
block in log quick on $if_lan to $if_lan #:network
pass in quick on $if_lan from $if_lan:network to $if_wlan:network
pass in quick on $if_lan from $if_lan:network

# lan -> router:dhcp
pass in log quick on $if_wlan proto { tcp, udp } from $if_wlan:network to $if_wlan port 67
pass in log quick on $if_wlan proto { tcp, udp } from $if_wlan:network to $if_wlan port 68

# wlan
block in log quick on $if_wlan to $if_lan:network
block in log quick on $if_wlan to $if_wlan:network
pass in quick on $if_wlan from $if_wlan:network
pass out quick on $if_wlan from $if_lan:network

Ich hab das Script zusätzlich auf pastebin hochgeladen, falls es der Ursachenfindung dienen sollte: http://pastebin.com/vXeqt3Yr

Vielen Dank :)
 
Ich weiß nicht, ob das noch aktuell ist, aber ich mache Policy Routing, indem ich erstmal die state-policy auf if-bound setze. Damit sind States an ein Interface gebunden und man braucht für erfolgreiche Kommunikation für jedes Interface eine Regel.

Code:
set state-policy if-bound

Dann definiere ich auf jedem interface für eingehenden Traffic ein Tag, welches festlegt, auf welchem Interface der Traffic wieder rausdarf.

Code:
pass in quick on lan [...] tag DMZ
pass in quick on lan [...] tag EXT
pass out quick on lan tagged LAN

pass in quick on dmz [...] tag EXT
pass out quick on dmz tagged DMZ

pass in quick on ext [...] tag DMZ
pass out quick on ext tagged EXT

etc.

Edit: Traffic zur default route kannst du identifizieren, indem du beim Setzen der route ein label hinzufügst.

Code:
route add default -label default [...]

In der pf.conf kannst du dann folgendes machen:

Code:
pass [...] to route "default" [...]
 
Zurück
Oben