Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Dec 2004 10:11:25 -0800
From:      Julian Elischer <julian@elischer.org>
To:        Gleb Smirnoff <glebius@freebsd.org>
Cc:        net@freebsd.org
Subject:   Re: per-interface packet filters
Message-ID:  <41BDDB4D.2050201@elischer.org>
In-Reply-To: <20041213124051.GB32719@cell.sick.ru>
References:  <20041213124051.GB32719@cell.sick.ru>

next in thread | previous in thread | raw e-mail | index | archive | help


Gleb Smirnoff wrote:

>  Dear networkers,
>
>  I finally managed to pronounce my idea, although I'm afraid
>of a bikeshed it is going to be burried under.
>
>When managing a complex router with many interfaces the output
>of `ipfw show` (or ipf/pf analog) is getting long and difficult to
>understand. It is also important that many packets are checked
>against the rules that can never be applied to them, wasting CPU
>cycles.
>
>A simple example can be local network router with many inner interfaces
>and with one interface to internet. Actually filtering is desired
>only in external interface, and there is no need for local traffic
>to enter packet fitlering routines, e.g. ipfw_chk().
>
>I'd like to implement per-interface pfil hooks, like in Cisco
>world. Each interface may have 'in' list of rules, 'out' list
>of rules. Current global ip_{input,output}, filters may coexist
>with per-interface ones, but can be turned off.
>
>Our PFIL interface is quite ready for this, and this is very nice.
>I'll start with creating/editing alternative chains in ipfw. Then
>we will need to add possibility to register per-interface hooks
>in pfil, and add possibility to pass one more optional argument
>from pfil to the filter itself.
>
>I'm glad to see any constructive comments on plan.
>  
>

I do this now with the current ipfw unchanged..
my rules always start with something like:

add 100 skipto 1000 ip from any to any in recv fxp0
add 101 skipto 2000 ip from any to any out xmit fxp0

add 110 skipto 3000 ip from any to any in recv fxp1
add 111 skipto 4000 ip from any to any out xmit fxp1

add 120 skipto 5000 ip from any to any in recv fxp2
add 121 skipto 6000 ip from any to any out xmit fxp2

This allows me to have a dedicated set of rules for each logical flow.

Sometimes I even go one step further and define subsections for
"out recv fxp0 xmit fxp1" and "from any to me in recv fxp1" .. etc

I also sometimes break the rules up further with
(for each interface set.)
add 1000 skipto 1100 tcp from any to any
add 2000 skipto 2100 tcp from any to any

Then at 1050 ans 2050 I have processing for things like UDP and icmp.

The aim is to minimise the running of unneeded rules, as you said.

It is actually faster than just that because the rules in each
section never need to test the interface or direction.
I think this should be in an ipfw "howto".

I'm not sayig we should n't do what you are saying but that it is
already possible to do very similar things.







Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41BDDB4D.2050201>