pf's states

Artem Viklenko artem at viklenko.net
Wed Dec 4 08:55:24 UTC 2019


On 04.12.19 09:47, Victor Sudakov wrote:
> Artem Viklenko via freebsd-pf wrote:
> 
>> Had to build test lab....
> 
> Thank you for your time.
> 
>>
>> I still not 100% sure about state-policy - can't check it now.
>> But it definitelly can influence on the final result.
> 
> Let's stick to the default floating state-policy for now. No need to make
> the lab more complicated.
> 
>>
>> Simple ruleset:
> 
> Once you have invested your time to build the lab, could you please
> reproduce my ruleset exactly (I'll repeat it below)?  Unlike yours, my
> ruleset has *all* rules bound to interfaces. It would be also very nice of
> you to use the same IP addresses so that we did not have to translate the
> addresses mentally.

Actually, no. Seems I've provided enougth examples.

> 
> [dd]
> 
>>
>>    Traffic coming in the system was inspected by pf
>> rules and first state was created. Then traffic going out to destination
>> via another interface was inspected by pf again and second state was
>> created by the same rule #1.
>>
>> ICMP replies going in reverse direction pass due to these states.
> 
> Why would you need two states to pass the replies, that is the
> question. If the rule is floating, why is one rule not enough?
> 

Not I need - this is how PF works.

> [dd]
> 
>>
>> This is because by default pf allows traffic but not create states.
>> You can start pf with empty ruleset and see no states while traffic
>> passing firewall.
> 
> No doubt about it. But I was not talking about the complete absense of
> states. Please see below.
> 
>>
>> So then traffic came back it was blocked by last matched rule with
>> keyword in which is rule #2 in this case.
> 
> No, in my case *one* state is being created. The question is why this one
> available state is not enough to pass return traffic? Please peruse the pfctl
> output I provide below:
> 
> A brief repetition of what I was doing. I'd be grateful if you replicate it.

Similar case - from the traffic point of view - already in my post with 
explanations.


> 
> 1. Interface configuration
> 
> hostname="fw.test"
> ifconfig_vtnet0="DHCP description Outside"
> ifconfig_vtnet1="172.16.1.1/24 description DMZ"
> ifconfig_vtnet2="192.168.10.1/24 description Inside"
> 
> 2. Ping configuration
> 
> Pinging 172.16.1.10 (dmz host) from 192.168.10.3 (inside host).
> 
> 3. Rules
> 
> root at fw:~ # pfctl -vvs rules
> No ALTQ support in kernel
> ALTQ related functions disabled
> @0 pass in on vtnet1 all flags S/SA keep state
>    [ Evaluations: 9596      Packets: 1         Bytes: 84          States: 0     ]
>    [ Inserted: uid 0 pid 1343 State Creations: 1     ]
> @1 block drop in on vtnet1 inet from any to 192.168.0.0/16
>    [ Evaluations: 2955      Packets: 2954      Bytes: 248136      States: 0     ]
>    [ Inserted: uid 0 pid 1343 State Creations: 0     ]
> @2 pass in on vtnet2 all flags S/SA keep state
>    [ Evaluations: 6641      Packets: 2955      Bytes: 248220      States: 1     ]
>    [ Inserted: uid 0 pid 1343 State Creations: 2     ]
> root at fw:~ #
> 
> 
> 4. State while pinging:
> 
> root at fw:~ # pfctl -vvs states
> No ALTQ support in kernel
> ALTQ related functions disabled
> all icmp 172.16.1.10:33794 <- 192.168.10.3:33794       0:0
>     age 00:51:57, expires in 00:00:10, 2970:0 pkts, 249480:0 bytes, rule 2
>     id: 000000005de756c8 creatorid: 9da41898
> root at fw:~ #
> 
> 
> 5. Question:
> 
> We see that a floating state "172.16.1.10:33794 <- 192.168.10.3:33794" has been
> created by rule 2. Why is this state not passing ICMP replies from 172.16.1.10 to
> 192.168.10.3 ? I.e. why is this state not overriding the blocking rule 1 ?
> 
> 

-- 
Regards!


More information about the freebsd-pf mailing list