The very, very first rule in my pf ruleset is part of a fairly vanilla
anti-spoof/sanity check set, intended to catch incoming bogon/martian
packets:

  table <unroutable_ips> const { 10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16, !$int_net, !$wls_net, !$ptr_net, 169.254.0.0/16,
127.0.0.0/8, 192.0.2.0/24, 0.0.0.0/32, 240.0.0.0/4, 255.255.255.255/32
}
  block drop in log quick on ! lo0 inet from <unroutable_ips> to any
label "block unroutable ip"


I can see it being evaluated using "pfctl -v -s rules", but so far
(~40hrs uptime) it hasn't matched anything yet. That would normally
not be of concern, except I'm seeing stuff like this in the pflog that
I think it should have caught - but had to get caught by a later,
fail-safe rule at the bottom of the ruleset. In particular, I'm seeing
lots of bootp packets from badly-configured Windows clients:

  Mar 26 19:22:05.85 rule 49/(match) [uid 0, pid 2590] block in on
em0: 0.0.0.0.68 > 255.255.255.255.67: xid:0x64f14f [|bootp] (DF) [tos
0x10] (ttl 64, id 0, len 330)

So:
- Is there something wrong with my first rule that I'm not seeing that
causes these 0.0.0.0 bootp packets to miss it, OR
- Is there something special about the bootp packets [remember, bootp
uses UDP] that they won't match that rule, even though the source is
in the unroutable_ips table?

Thanks for any insight, or other debugging ideas I can test.

/d/

PS: Notice the "quick" keyword in the block rule - this isn't a "last
rule that matches" issue, in case you're tempted to reply with
something about that - I would think a packet from 0.0.0.0 should hit
the rule, match, and then due to "quick" undergo no further
evaluation, end of story.

Reply via email to