Hi all,
I have a question concerning some differences in pf rules diplay with
regards to pfctl, pftop, and systat (using a 4.4 snapshot downloaded
today).
My scrub, NAT and filter sections in my 'pf.conf' look like this:
scrub on $wan_if random-id reassemble tcp
nat on $wan_if from !($wan_if) -> ($wan_if:0)
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $lan_if proto tcp to port ftp -> 127.0.0.1 port 8021
block in on $wan_if
pass out on $wan_if inet all modulate state
pass in on $wan_if inet proto { tcp, udp } to any port 39415
anchor "ftp-proxy/*"
antispoof for { $lan_if }
This shows up as the following with pfctl:
$ sudo pfctl -s r
scrub on sis0 all random-id reassemble tcp fragment reassemble
block drop in on sis0 all
pass out on sis0 inet all flags S/SA modulate state
pass in on sis0 inet proto tcp from any to any port = 39415 flags S/SA
keep state
pass in on sis0 inet proto udp from any to any port = 39415 keep state
anchor "ftp-proxy/*" all
block drop in on ! sis1 inet from 192.168.1.0/24 to any
block drop in inet from 192.168.1.1 to any
block drop in on sis1 inet6 from fe80::200:24ff:fec8:6939 to any
To get the rule numbers, I use the -vv flags for pfctl:
$ sudo pfctl -s r -vv
@0 scrub on sis0 all random-id reassemble tcp fragment reassemble
[ Evaluations: 4655 Packets: 1283 Bytes: 201983 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
@0 block drop in on sis0 all
[ Evaluations: 341 Packets: 4 Bytes: 2109 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
@1 pass out on sis0 inet all flags S/SA modulate state
[ Evaluations: 44 Packets: 581 Bytes: 195757 States: 3 ]
[ Inserted: uid 0 pid 18789 State Creations: 36 ]
@2 pass in on sis0 inet proto tcp from any to any port = 39415 flags
S/SA keep state
[ Evaluations: 44 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
@3 pass in on sis0 inet proto udp from any to any port = 39415 keep state
[ Evaluations: 4 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
@4 anchor "ftp-proxy/*" all
[ Evaluations: 341 Packets: 58 Bytes: 4402 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 8 ]
@5 block drop in on ! sis1 inet from 192.168.1.0/24 to any
[ Evaluations: 333 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
@6 block drop in inet from 192.168.1.1 to any
[ Evaluations: 297 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
@7 block drop in on sis1 inet6 from fe80::200:24ff:fec8:6939 to any
[ Evaluations: 155 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 18789 State Creations: 0 ]
So rule #4 is my 'anchor "ftp-proxy/*" all' for use by ftp-proxy.
Then, using pftop-0.7p0 I view the rule set again (output "shortened"
to avoid wrapping):
pfTop: Up Rule 1-8/8, View: rules, Cache: 10000
RULE ACTION DIR IF PR INFO
0 Block In sis0 drop all
1 Pass Out sis0 inet all flags S/SA
2 Pass In sis0 tcp inet from any to any port = 39415 flags S/SA
3 Pass In sis0 udp inet from any to any port = 39415
4 Pass Any all
5 Block In !sis1 drop inet from 192.168.1.0/24 to any
6 Block In drop inet from 192.168.1.1/32 to any
7 Block In sis1 drop inet6 from
fe80::200:24ff:fec8:6939/128 to any
And then finally using 'systat rules' (once again "shortened" to avoid
wrapping):
2 users Load 0.17 0.15 0.10
RULE ACTION DIR IF PR INFO
0 Block In sis0 drop all
1 Pass Out sis0 inet all flags S/SA
2 Pass In sis0 tcp inet from any to any port = 39415 flags S/SA
3 Pass In sis0 udp inet from any to any port = 39415
4 Pass In all
5 Block In !sis1 drop inet from 192.168.1.0/24 to any
6 Block In drop inet from 192.168.1.1/32 to any
7 Block In sis1 drop inet6 from
fe80::200:24ff:fec8:6939/128 to any
I have two questions concerning the different displays from the three programs:
1. Why do pftop and systat report rule #4 as a kind of "pass all" rule
when it's actually an 'anchor "ftp-proxy/*" all' rule? Is this normal
and expected?
2. Is it a bug for systat to report the direction of rule #4 as "In"
while pftop reports it as "Any"? I'm assuming the difference indicates
a bug in either one of the programs.
Thanks!
-Martin