Pf: packets on lo0 blocked in spite of pass rule

Max Laier max at love2party.net
Tue Oct 28 16:39:01 UTC 2008


On Tuesday 28 October 2008 17:19:15 Jeremy Chadwick wrote:
> On Tue, Oct 28, 2008 at 04:10:34PM +0100, Niek Dekker wrote:
> > Hi,
> >
> > I upgraded recently from 6.2 to 7.0 release p5 (i386) and I'm using pf.
> > After the upgrade connection problems arised on lo0, for java > mysql
> > and apache > tomcat.
> > The network interfaces are all in default setup.
> >
> > Here is the output of pfctl -sr, cleaned from network numbers.
> >
> > scrub in all fragment reassemble
> > block drop in log all
> > block drop in log quick on fxp0 from <priv_nets> to any
> > block drop out log quick on fxp0 from any to <priv_nets>
> > block drop in log quick on fxp0 from <banned> to any
> > pass in on fxp0 inet proto tcp from any to ext_if port = smtp flags S/SA
> > keep state
> > pass in on fxp0 inet proto tcp from any to ext_if port = http flags S/SA
> > keep state
> > pass in on fxp0 inet proto tcp from any to ext_if port = ssh flags S/SA
> > keep state
> > pass out on fxp0 proto tcp all flags S/SA keep state
> > pass out on fxp0 proto udp all keep state
> > pass on lo0 proto tcp all flags S/SA keep state
> > pass on lo0 proto udp all keep state
> > block drop in on ! fxp0 inet from ext_network/25 to any
> > block drop in inet from ext_if to any
> >
> > Since the upgrade to 7.0, some packets on lo0 are  being blocked
> > nevertheless. Apache httpd is connecting to Tomcat ajp on port 8009.
> > Some, but not all of these packets are blocked. For example (pflog):
> >
> > 627926 rule 0/0(match): block in on lo0: 127.0.0.1.57243 >
> > 127.0.0.1.8009: P 0:719(719) ack 1 win 8960 <nop,nop,timestamp 300647202
> > 132868137>
>
> I'm betting money this is a rule order problem.  I *highly* recommend
> you stop with the "lo0" rules and use "set skip lo0" like you mention
> later on.  This is a good idea for performance reasons as well; don't
> waste cycles having pf(4) parse packets for lo0, as nothing can talk
> to that interface except local stuff anyway.

Indeed.  In fact, "set skip on" was especially made for this case.  The 
problem is that lo0 is special.  The packet direction and the fact that on lo0 
127.0.0.1 talks to itself, greatly confuse the state checking.  Hence the 
option to skip an interface completely.

-- 
/"\  Best regards,                      | mlaier at freebsd.org
\ /  Max Laier                          | ICQ #67774661
 X   http://pf4freebsd.love2party.net/  | mlaier at EFnet
/ \  ASCII Ribbon Campaign              | Against HTML Mail and News


More information about the freebsd-pf mailing list