Greg Hennessy wrote:

The first rule is block log all. I put the http rules right after that rule, or I lose connections.

I would suggest minimising the amount of non stateful rules in the policy.
They have a habit of biting one in the rear.
There are only 3 or 4 rules in the ruleset that are non-stateful. I can try to eliminate those also.

The packets are not being logged as blocked.

A block further down the policy without a 'log' may cause this. One of the joys of debugging a last match policy.
All rules that are block are also using log. A lot of the pass rules do not because it generates such enormous logs. I can try enable logging on every rule temporarily in order to troubleshoot this if necessary.

The just never show up on the internal nic.

I take it you've simultaneously tcpdumped both ingress and egress interfaces
to confirm this ? Packets disappearing during traversal implies a routing
issue.
Yes, if I tcpdump on em0, pflog0, and em1 simultaneously during a traffic test, the traffic hits em0, and never shows up as blocked in pflog0 and never shows up at all on em1. As I stated, it's only 1 out of a bunch of connections, so there is no rule blocking all the traffic.

I can make this a bi-direction rule instead of keep state

That's inefficient as each packet forces a rule base traversal.

Try coding a tcp flow as
pass log quick on em inet proto tcp from source to dest port something keep
state flags S/SA


I said 'em' above, not em[0-9].
Using interface groups without directionality, means that a single rule will
match the flow on both the ingress and egress interfaces. Combined with antispoof, it makes for simpler policy
I have coded the rule as explained above and even as the first rule after the default block rule, it still drops traffic. If I change it to non-stateful, it doesn't drop the connections. I can't seem to get away from the thought of a state mis-match, however, I don't know why it would consistently do it on these http connections.

and it still drops traffic if I move it down in the list. If I leave it where it is, and make it a keep state rule, it drops the connections also.

What other blocks are in the policy ?
I don't believe I'm doing any specifc blocks. Just the default block and then allow what we need after that.

At peak times, the state table grows as large as 17000 states or so.

If that's the case, the default table size is inadequate, I would set it to
at least 25000.
I bumped up the state limit a long time ago. I haven't run into issues with that. There is adequate room in the state table even during peak times. Unfortunately, it's dropping the traffic even during slow times.

Generic egress rules are a little difficult because I'm trying to do traffic shaping of certain traffic.

Get the policy working without drops 1st, then shape.
Agreed, altq has been disabled until I can get the traffic flowing smoothly.

A side note, the machine is not doing any NAT.  Tagging seems like it
would require more
overhead than what the firewall is doing already.

It doesn't. Tagging works per stateful flow, not per packet.  Using tagging
will permit you to significantly reduce the size of the rulebase.
The ruleset will be getting a significant rewrite, however, time has not permitted it yet.

Chris
_______________________________________________
freebsd-pf@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-pf
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to