(Detailed description of problem, broached on "faults list" topic)
Two host, on oposite sides of gateway: _______ __________ _______ | | | | | | | 114.31 <-> 114.219 0.254 <-> 0.1 | | priv | | step | | pub | |_______| |__________| |_______| where, PRIV (192.168.114.31) is private network host PUB (192.168.0.1) is public host STEP (192.168.114.219/192.168.0.254) is firewall gateway Target: deny any access from PUB to PRIV, but allow PRIV to access PUB's resources (at least, pings and TCP) OS version: step# uname -a OpenBSD step.oganer.net 4.2 GENERIC#0 i386 Ruleset variants and PF's behavior (trying to ping PUB and connect to it's webserver): block in inet from 192.168.0.1 to 192.168.114.31 pass in inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (does not work - neither pings nor TCP) Preferred version, because it does not affect queueing step# pfctl -ss all icmp 192.168.0.1:512 <- 192.168.114.31 0:0 all tcp 192.168.0.1:80 <- 192.168.114.31:3538 CLOSED:SYN_SENT block in inet from 192.168.0.1 to 192.168.114.31 pass out inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (works) step# pfctl -ss all icmp 192.168.114.31:512 -> 192.168.0.1 0:0 all tcp 192.168.114.31:3547 -> 192.168.0.1:80 ESTABLISHED:ESTABLISHED In addition: block out inet from 192.168.0.1 to 192.168.114.31 pass in inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (works) step# pfctl -ss all icmp 192.168.0.1:512 <- 192.168.114.31 0:0 all tcp 192.168.0.1:80 <- 192.168.114.31:3565 ESTABLISHED:ESTABLISHED block out inet from 192.168.0.1 to 192.168.114.31 pass out inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (does not work) step# pfctl -ss all icmp 192.168.114.31:512 -> 192.168.0.1 0:0 all tcp 192.168.114.31:3542 -> 192.168.0.1:80 ESTABLISHED:SYN_SENT block inet from 192.168.0.1 to 192.168.114.31 pass in inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (does not work) step# pfctl -ss all icmp 192.168.0.1:512 <- 192.168.114.31 0:0 all tcp 192.168.0.1:80 <- 192.168.114.31:3566 CLOSED:SYN_SENT block inet from 192.168.0.1 to 192.168.114.31 pass out inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (does not work) step# pfctl -ss all icmp 192.168.114.31:512 -> 192.168.0.1 0:0 all tcp 192.168.114.31:3572 -> 192.168.0.1:80 ESTABLISHED:SYN_SENT And one more: block inet from 192.168.0.1 to 192.168.114.31 pass inet from 192.168.114.31 to 192.168.0.1 flags S/SA keep state (works) step# pfctl -ss all icmp 192.168.0.1:512 <- 192.168.114.31 0:0 all icmp 192.168.114.31:512 -> 192.168.0.1 0:0 all tcp 192.168.0.1:80 <- 192.168.114.31:3574 ESTABLISHED:ESTABLISHED all tcp 192.168.114.31:3574 -> 192.168.0.1:80 ESTABLISHED:ESTABLISHED Supposition: In all non-working cases, answer packets, somewhy does not match created state (by iface and/or direction ?), and are blocked by block rule. In last case, each communication stream creates 2 states. "state-policy" option setting to "floating" or "if-bound" does not change situation. Questions: Is this some kind of feature ? Is there any solution to make PF behave other way (for example, to work w/ first ruleset variant) ? Ilya A. Kovalenko (mailto:[EMAIL PROTECTED])