pf og (mangel på) keep state på FreeBSD 5.4 prerelease

From: Claus Guttesen (none@cguttesen--yahoo.dk.lh.bsd-dk.dk)
Date: Thu 31 Mar 2005 - 18:34:26 CEST


Date: Thu, 31 Mar 2005 18:34:26 +0200 (CEST)
From: Claus Guttesen <none@cguttesen--yahoo.dk.lh.bsd-dk.dk>
Subject: pf og (mangel på) keep state på FreeBSD 5.4 prerelease
To: bsd-dk <none@bsd-dk--bsd-dk.dk.lh.bsd-dk.dk>

Hej.

Har sat pf op på en FreeBSD 5.4 prelease som er lavet
med kildekoden hentet pr. 31. marts. Maskinen skal -
hvis jeg får det til at virke med pf - fungere som
vores kommende firewall.

Det pudsige er at den åbentbart ikke husker state
korrekt. Når jeg går frem efter bogen, tillader pf at
pakken kommer ind via mit lokale netkort, men blokerer
når pakken skal forlade pf (på det yderste netkort).

Pf er lagt i kernen med:

device pf # required
device pflog # optional
device pfsync # optional

options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_CDNR
options ALTQ_PRIQ
options ALTQ_NOPCC

Min /etc/pf.conf ser sådan ud:

int_if="em0"
ext_if="em1"

table <internal> { 192.168.1.0/24 }

set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30,
tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45,
tcp.closed 90 }
set timeout { udp.first 60, udp.single 30,
udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30,
other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
set loginterface none
set optimization normal
set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"

scrub in all

nat on $ext_if from <internal> to any -> ($ext_if)

pass in quick on $int_if proto tcp from <internal> to
any port 80 flags S/SA keep state

Når jeg har følgende to linier aktive, kan jeg ikke
surfe på internettet.

# Filtering: the implicit first rules are
block in log all
block out log all

Når jeg udkommenterer disse, kan jeg godt, men så er
firewallen helt åben.

Hvis de to foroven nævnte regler er aktive, kan jeg
surfe når jeg har denne linie aktiv:

pass out quick on $ext_if proto tcp from any to any
port 80 flags S/SA keep state

Resultatet er at jeg må aktivére to linier i pf.conf
for hver regel jeg ønsker at tage i brug, én på
indersiden og én på ydersiden, og det er vel næppe
det som folkene bag pf havde planlagt.

Hvis jeg sætter reglerne op efter bogen (med keep
state på indersiden af firewallen), og laver en
tcpdump på pflog, ser jeg at pf blokérer for pakken på
det yderste netkort på vej ud på internettet. Dette
forklarer delvist hvorfor jeg skal have en regel som
også tillader på det udgående netkort.

Mig ikke forstå!

Hilsen
Claus



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:49 CET