Gå til innhold

BSD/UnixFreeBSD eller OpenBSD til 64bit brannmurmaskin?


Anbefalte innlegg

Litt oftopic stigfjel, men kunne du tenkt deg å legge ut noen små eksempler på hvordan PF (eller IPFW, jeg vet ikke hva som er forskjellen) fungerer? Har sett litt på noen eksempler og slikt, men om du kunne forklart litt...

7127710[/snapback]

Har brukt FreeBSD med ipfw i over 2 år nå. Men etter at jeg lærte meg grunnleggende PF, så kommer jeg nok til å gå over til PF, siden PF er mer smidig i bruk enn ipfw. Når jeg får tid, skal jeg nok legge ut et enkelt eksempel på hvordan man enkelt kan sette opp et fullt fungerende PF-regelsett. Det jeg i hvert fall har erfart, er at GNU/Linux og iptables er totalt skivebom sammenlignet med FreeBSD/OpenBSD med PF.

Endret av stigfjel
Lenke til kommentar
  • 3 uker senere...
Videoannonse
Annonse

Jeg kan like gjerne ta å poste min pf.conf, så ser dere litt syntax:)

Den er absolutt ikke fullstendig, eller på noen som helst slags måte renskrevet.

For min egen skyld har jeg gjort om en del på variabler og porter.

 

int_if="fxp1"

vpn_if="tun0"

pc_if="re0"

bri_if="bridge0"

loc_net="192.***.***.***/24"

vpn_net="172.***.***.***/24"

dns1="***.***.***.***"

dns2="***.***.***.***"

 

 

scrub in all

 

altq on fxp0 cbq bandwidth 1800Kb queue { http_out, ftp_out, ssh_out, annet_out }

queue http_out bandwidth 10% priority 5 cbq(red borrow)

queue ftp_out bandwidth 10% priority 3 cbq(red borrow)

queue ssh_out bandwidth 5% priority 7 cbq(ecn borrow)

queue annet_out bandwidth 75% priority 2 cbq(default red)

 

 

 

nat on $ext_if from $loc_net -> ($ext_if:0)

nat on $ext_if from $vpn_net -> ($ext_if:0)

rdr on $int_if inet proto tcp from any to any port www -> $ext_if:0 port www

 

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 1024:50000 -> 172.***.***.*** port 1024:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 1024:50000 -> 172.***.***.*** port 1024:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 51000:53000 -> 172.***.***.*** port 51000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 51000:53000 -> 172.***.***.*** port 51000:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 55000:57000 -> 172.***.***.*** port 55000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 55000:57000 -> 172.***.***.*** port 55000:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 59000:61000 -> 172.***.***.*** port 59000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 59000:61000 -> 172.***.***.*** port 59000:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 40000:50000 -> 172.***.***.*** port 40000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 40000:50000 -> 172.***.***.*** port 40000:*

 

 

block in on $ext_if

pass out on $ext_if keep state

block in on $int_if

pass out on $int_if keep state

pass in on $vpn_if

pass out on $vpn_if

pass in on $pc_if

pass out on $pc_if

 

pass in quick on $ext_if inet proto tcp from any to $ext_if:0 port * keep state

pass in quick on $ext_if inet proto {tcp, udp} from any to $vpn_net port 40000:61000 keep state

pass out quick on $ext_if inet proto tcp from $vpn_net to any port http flags S/SA keep state queue http_out

pass out quick on $ext_if inet proto tcp from $vpn_net to any port ftp flags S/SA keep state queue ftp_out

pass out quick on $ext_if inet proto tcp from $vpn_net to any port ssh flags S/SA keep state queue ssh_out

pass out on $ext_if inet from $vpn_net to any keep state queue annet_out

 

pass in quick on $int_if proto tcp from any to any port www

pass in quick on $int_if proto udp from any to any port bootpc keep state

pass in quick on $int_if proto udp from $loc_net to { $dns1, $dns2 } port domain keep state

pass in quick on $int_if proto tcp from $loc_net to $ext_if:0 port * keep state

Endret av Zerge
Lenke til kommentar

Siden det kan hende at dette blir veldig abstrakt skal jeg utdype litt mer:

 

Reglene kommer fra en firewall jeg har satt opp hjemme hos meg,

og den har 4 aktive brukere bak seg på et trådløst nettverk.

For at jeg skal kunne sikre mitt trådløse nettverk best mulig,

har jeg valgt å sette opp et totalt åpent accesspunkt, og så

presse klientene til å benytte seg av VPN for å komme på internett.

 

Når en klient kobler til det trådløse nettverket, får den kun lov

til å motta ip fra dhcp $loc_net, sende dns forespørsler til isp'ens DNS servere og

å koble til vpn serveren på port *. De får også lov til å sende forespørsler

på port 80, men alle disse blir redirecta til en lokal webserver som

forteller klienten at den ikke har noe på mitt nettverk å gjøre.

 

Videre, når klienten har koblet til vpnserveren, får den tildelt en ip på $vpn_net,

og får følgelig tilgang til fullt Internett og med sine faste porter forwardet.

I tillegg har jeg satt opp prioritering på all trafikk ut, men jeg har ikke testet dette

dyptgående, siden jeg selv befinner meg på et annet nettverk:)

 

 

int_if="fxp1"

vpn_if="tun0"

pc_if="re0"

bri_if="bridge0"

loc_net="192.***.***.***/24"

vpn_net="172.***.***.***/24"

dns1="***.***.***.***"

dns2="***.***.***.***"

7231815[/snapback]

Her deklarerer jeg en del variabler og gir dem verdi. Dette sparer meg for en del skriving lenger ned,

samt hvis jeg skulle konvertere configen til et system med andre NIC og IP'r

 

scrub in all

7231815[/snapback]

Denne linjen gjør at firewallen normaliserer alle pakker som kommer inn, uansett hvilket NIC

 

altq on fxp0 cbq bandwidth 1800Kb queue { http_out, ftp_out, ssh_out, annet_out }

        queue http_out bandwidth 10% priority 5 cbq(red borrow)

        queue ftp_out bandwidth 10% priority 3 cbq(red borrow)

        queue ssh_out bandwidth 5% priority 7 cbq(ecn borrow)

        queue annet_out bandwidth 75% priority 2 cbq(default red)

7231815[/snapback]

Her har jeg deklarert en blokk på 1800kbit som jeg igjen deler opp i undergrupper som heter:

http, ftp, ssh og annet. Http, ftp og ssh kan "låne" opptil 100% av blokken, mens

annet aldri kan overstige 75%

 

nat on $ext_if from $loc_net -> ($ext_if:0)

nat on $ext_if from $vpn_net -> ($ext_if:0)

rdr on $int_if inet proto tcp from any to any port www -> $ext_if:0 port www

7231815[/snapback]

Her har jeg skrudd på NAT for alt som kommer fra $loc_net og $vpn_net gjennom $ext_if:0 (ip på $ext_if)

I tillegg redirecter jeg alle forespørsler som kommer inn på $int_if port 80

uansett hvor de var adressert til ip på $ext_if port 80

 

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 1024:50000 -> 172.***.***.*** port 1024:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 1024:50000 -> 172.***.***.*** port 1024:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 51000:53000 -> 172.***.***.*** port 51000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 51000:53000 -> 172.***.***.*** port 51000:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 55000:57000 -> 172.***.***.*** port 55000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 55000:57000 -> 172.***.***.*** port 55000:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 59000:61000 -> 172.***.***.*** port 59000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 59000:61000 -> 172.***.***.*** port 59000:*

rdr on $ext_if inet proto tcp from any to $ext_if:0 port 40000:50000 -> 172.***.***.*** port 40000:*

rdr on $ext_if inet proto udp from any to $ext_if:0 port 40000:50000 -> 172.***.***.*** port 40000:*

7231815[/snapback]

Dette er en ren portforwarding til interne maskiner på $vpn_net nettverket.

 

block in on $ext_if

pass out on $ext_if keep state

block in on $int_if

pass out on $int_if keep state

pass in on $vpn_if

pass out on $vpn_if

pass in on $pc_if

pass out on $pc_if

7231815[/snapback]

Her kommer selve reglene:

Blokker i utgangspunktet alt innkommende på $ext_if

Tillat alt utgående på $ext_if, samt lag dynamiske regler for relaterte pakker som kommer som svar.

Samme for $int_if

Jeg tillater absolutt all trafikk ut og inn på $vpn_if og $pc_if, da disse regnes som sikre nettverkskort.

 

 

pass in quick on $ext_if inet proto tcp from any to $ext_if:0 port * keep state

pass in quick on $ext_if inet proto {tcp, udp} from any to $vpn_net port 40000:61000 keep state

pass out quick on $ext_if inet proto tcp from $vpn_net to any port http flags S/SA keep state queue http_out

pass out quick on $ext_if inet proto tcp from $vpn_net to any port ftp flags S/SA keep state queue ftp_out

pass out quick on $ext_if inet proto tcp from $vpn_net to any port ssh flags S/SA keep state queue ssh_out

pass out on $ext_if inet from $vpn_net to any keep state queue annet_out

7231815[/snapback]

Siden jeg i utgangspunkter har blokkert alt innkommende, og tillatt alt utgående på $ext_if,

bruker jeg nøkkelordet "quick" for å presse disse reglene gjennom før de generelle.

Jeg tillater innkommende TCP på port * på $ext_if.

Når jeg tidligere redirecta en del porter: ca. 40000-61000, så vil firewallen nå se pakkene som om de er

adressert frem til $vpn_net nettverket. Derfor må jeg skrive reglene slik at destinasjonen blir de lokale ip'ne.

Så kommer reglene som tillater http,ftp,ssh og annet utgående, og plasserer dem i sin respektive blokk som

tidligere har blitt deklarert og har fått en øvre grense for båndbreddebruk.

 

pass in quick on $int_if proto tcp from any to any port www

pass in quick on $int_if proto udp from any to any port bootpc keep state

pass in quick on $int_if proto udp from $loc_net to { $dns1, $dns2 } port domain keep state

pass in quick on $int_if proto tcp from $loc_net to $ext_if:0 port * keep state

7231815[/snapback]

Til slutt er det noen små regler for $int_if som f. eks. at jeg tillater tilkobling på port 80,

(denne er jo viktig siden jeg redirecter alle forespørsler som kommer fra $loc_net på port 80

til denne porten uansett:) Videre tillater jeg udp forespørsler til de 2 dns serverne jeg har

deklarert som variabler øverst, jeg tillater bootpc (dhcp forespørsler) og jeg tillater at

maskiner på $loc_net kan komme i kontakt med port * på ip til $ext_if.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...