pf ausgehende verbindungen von bestimmter ip blocken

crash-x

Unregistered User
Hallo,
ich habe hier in meinem lan einen freebsd rechner mit ner jail. Nun möchte ich einem Kumpel zugriff über ssh auf diese jail ermöglichen. Allerdings soll er keine verbindungen ins Internet, sowie zu den anderen Maschinen aufbauen können.
Mein Netzwerk sieht so aus:

internet -> router -> server + workstation + jails

Der router isn OpenBSD 3.5. Als packet filter nutz ich pf :)
Die Jail läuft auf einem FreeBSD 5.3 system.
Um der jail den zugriff auf mein restliches lan zu verbieten muss ich denke ich mal firewall regeln auf dem Hostsystem schreiben oder?

Hier teile meiner pf.conf. sachen die ich für unwichtig halte pack ich net rein, zur übersicht :)

Code:
Ext = "tun0"                    # Device an dem das Internet angeschlossen ist 
Int = "xl0"                     # Device an dem das interne Netz haengt
IntNet = "192.168.0.0/24"       # Adressraum des internen Netzes
RouterIP = "192.168.0.1"        # IP Adresse des Routers
Loop = "lo0"                    # Loopback Device
vex = "192.168.0.100"

# Adressen die auf dem externen Device nicht geroutet werden
# (Adressbereich des internen Netzes muss man wegen der Weiterleitungen zulassen)
table <NoRoute> { 127.0.0.1/8, 172.16.0.0/12, 192.168.0.0/16, !$IntNet, 10.0.0.0/8, 255.255.255.255/32 }

# Ports die geoeffnet werden sollen
InServicesTCP = "{ auth, http, 2222}"

### OPTIONS ###
# Macht Statistiken fuer die DSL-Verbindung (pfctl -s info)
set loginterface $Ext
set block-policy return
# Beendet inaktive Verbindungen schneller - geringerer Speicherverbrauch.
set optimization aggressive

# Fragmentierte Pakete saeubern
scrub on $Ext all fragment reassemble random-id

### NAT & FORWARD ###
# NAT aktivieren (unter Linux als Masquerading bekannt)
nat on $Ext from $IntNet to any -> $Ext static-port

#vex ssh
rdr on $Ext proto tcp from any to any port 2222 ->  $vex port 22

### FILTER ###

# Zum Debuggen....
#pass quick all             # Alles durchlassen

# Generelle Block Regel
block on $Ext
# Freiwillig machen wir keinen mucks ;)
block return log on $Ext

# silently drop broadcasts (cable modem noise) 
block in quick on $Ext from any to 255.255.255.255 

#ipv6
pass quick inet6

# Loopback Device darf alles
pass quick on $Loop

# IP Spoofing verhindern
block in log quick on $Ext inet from <NoRoute> to any
block in log quick on $Ext inet from any to <NoRoute>

#Pings blocken
block in quick on $Ext inet proto icmp all icmp-type 8 code 0 

# Ports nach aussen oeffnen
pass in quick on $Ext inet proto tcp from any to any port $InServicesTCP flags S/SAFR keep state label ServicesTCP

anchor passin
# Raus darf (fast) alles
pass out quick on $Ext keep state queue (q_def,q_pri)

Ausprobiert habe ich schon z.b.: block return in quick on $Int from 192.168.0.100 to any
Doch dann konnte ich net mehr mit ssh darauf zugreifen.

Ich hoffe man kann mir helfen.

Danke und MfG

*edit*
am besten wäre es so, dass man sich aus dem internet in der jail einloggen kann, die jail aber auch net benutzen können soll um sich auf server im internet über ssh einzuloggen. also das man absolut keinen zugriff aufs internet hat :)
 
Zuletzt bearbeitet:
Erlaube SYN Pakete eingehend auf Port 22 und ausgehende Pakete, welche ACK gesetzt haben.

Oder andersrum, verbiete nach aussen alles ausser TCP+SYN/ACK mit Absenderport 22
 
danke, hab gerade damit experementiert und gegoogelt aber leider gehts irgendwie nich,. die regel sieht momentan so aus:
Code:
#ausgehende verbindungen von vex blocken
pass in quick on $Ext  proto tcp from any to any port 2222 flags S/SA
pass out quick on $Ext  proto tcp from any to any port 2222 flags S/SA 
block return in quick on $Int from $vex to any
 
*Nachdenk*
Eigentlich sollte das hier fuer deine Zwecke ausreichen
Code:
block out on $Ext inet from $vex to any
pass out on $Ext proto tcp from $vex port 22 to any
Ansonsten duerfte das hier tun
Code:
block out on $Ext inet from $vex to any
pass out on $Ext proto tcp from $vex port 22 to any flags A/A
Das heisst er kann nur ACKs und SYN+ACKs von Port 22 aus verschicken. Ein SYN geht nicht, und damit kann er keine Verbindungen aufbauen. Hmmm, stimmt das so? Sollte sich mal ein pf-Experte angucken.

Lieber (und offensichtlicher) waere mir diese Syntax
Code:
pass out on $Ext proto tcp from $vex port 22 to any not flags S/SA
 
Das klappt so nicht, da du NAT auf dem externen Device betreibst. Du kannst Zugriffe von internen IPs also nur auf dem internen Device kontrollieren... denn die Filterregeln regeln erst NACH dem NAT. Die Pakete egal von wem haben dann bereits die öffentlich IP und fallen damit durch deine Regeln...

Gruß, I.MC
 
achso ok, alles klar dann probier ichs mal nochmal
danke für die hilfe, wenns net klappt meld ich mich nochmal ;)
 
Zurück
Oben