occasional "Operation not permitted" on state-mismatch

Atrox silver.salonen at gmail.com
Tue Dec 18 06:09:07 PST 2007



Atrox wrote:
> 
> Hello!
> 
> I have some FreeBSD-boxes (2x6.3-PRERELEASE (installed on 08.Dec), 
> 1x6.2-RELEASE) with PF configured. They are connected with OpenVPN
> LAN-to-LAN 
> and the problem is that a few times per hour connection drops between 
> computers from one LAN to another. At first I blamed OpenVPN, then I
> blamed 
> bridge, but now I've realized that the problem is in PF.
> So I've tried increasing TCP-timeouts and setting optimization 
> to "aggressive", but well, it's still the same.
> 
> I monitor connections by sending TCP packets once per second to some other 
> host and wait for reply. I use Nagios-plugins' check_tcp for that. The
> script 
> looks like:
> =====
> while [ 1 ]; do
> 	pfctl -si |grep mismatch
> 	/usr/local/libexec/nagios/check_tcp -H $host -p $port -t 2
> 	pfctl -si |grep mismatch
> 	sleep 1
> done
> =====
> 
> So if I let this script into action, I see that in 2-3 minutes, check_tcp 
> gets "Operation not permitted" error and just in this moment
> packet-mismatch 
> counter is increased by one (on machine with lesser traffic, I get the
> timeout 
> in a few hours). That's on both 6.3-PRERELEASE as well as on 6.2-RELEASE.
> I've 
> tried connections:
> * along WAN to IPFW-enabled machines
> * along WAN to PF-enabled machines
> * along LAN to PF-enabled machines
> * along LAN to Windows machines
> * along VPN to PF-enabled machines
> * along VPN to Windows machines
> 
> Sometimes I get just some connection timeout: CRITICAL - Socket timeout
> after 
> 2 seconds (I don't know what could cause that).
> 
> I can see this behaviour in about every FreeBSD/PF machine I have.
> 
> The basic PF-configuration looks like:
> =====
> set block-policy return
> set loginterface $ext_if
> set timeout tcp.closed 15
> set optimization aggressive
> scrub in all no-df
> 
> block drop out quick on $ext_if from ($ext_if) to 0.0.0.0
> block log all
> pass quick on lo0 all
> pass out all modulate state
> pass out proto tcp all flags S/SA modulate state
> pass on $int_if all modulate state
> pass on $int_if proto tcp all flags S/SA modulate state
> pass in on $ext_if proto tcp from any to ($ext_if) port $tcp_services
> flags 
> S/SA modulate state
> =====
> 
> Is PF buggy or have I misconfigured smth?
> 

Today I installed an OpenBSD-4.2 box just to see whether PF does the same
thing there. And yes, it does.
pf.conf:
=====
ext_if = rl0
set block-policy return
set loginterface $ext_if
scrub in all no-df
block drop out quick on $ext_if from ($ext_if) to 0.0.0.0
pass all modulate state
pass quick on lo0 all
=====

I check TCP without "sleep 1" now, and I do it to FreeBSD box without
firewall. state-mismatch gets increased by one, and I get either "No route
to host" or "Socket timeout after 2 seconds".

Am I still misconfiguring the thing?

--
Silver
-- 
View this message in context: http://www.nabble.com/occasional-%22Operation-not-permitted%22-on-state-mismatch-tp14392406p14397207.html
Sent from the freebsd-pf mailing list archive at Nabble.com.



More information about the freebsd-pf mailing list