stigfjel Skrevet 22. oktober 2006 Forfatter Del Skrevet 22. oktober 2006 (endret) 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 22. oktober 2006 av stigfjel Lenke til kommentar
Zerge Skrevet 6. november 2006 Del Skrevet 6. november 2006 (endret) 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 6. november 2006 av Zerge Lenke til kommentar
AudunSæther Skrevet 6. november 2006 Del Skrevet 6. november 2006 Care to explain? Lenke til kommentar
Zerge Skrevet 6. november 2006 Del Skrevet 6. november 2006 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_ifpass 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 statepass 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 wwwpass 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
stigfjel Skrevet 7. november 2006 Forfatter Del Skrevet 7. november 2006 Ser at zerge kom før meg. Flott initiativ. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå