simple mac address filter

Robert Klein RoKlein at roklein.de
Tue Sep 7 13:28:52 PDT 2004


Hi,

On Dienstag, 7. September 2004 15:49, brisbanebsd at mac.com wrote:
> hi all - i am not sure where to post this question, I am
> trying to set up my first ipfw rule, but I just cannot get it
> to work.
>
> I need to set up MAC filtering on a 5.2.1 Freebsd box. I am
> using the command
>
> ipfw add allow ip from any to any mac any 00:0d:93:81:82:1e
>
> I am just trying to allow traffic ( at this stage) one machine
> to the freebsd box.
>
> If I use
>
> ipfw add allow ip from any to any
>
> I can ping from the above NIC, when I add the first rule ( as
> in first example above ) it stops.

Your problem is, you're "mixing" rules. You see, when a packet 
enters your computer IPFW (IPFW2, that is) rules are checked 
twice, first at layer two, and later at layer three.  Your first 
rule doesn't allow anything, because it fails at both tests: The 
first one fails, because there are no "IP" packets at layer two. 
The second one fails, because there are no MAC addresses at 
layer three.

To get a better illustration of when the ruleset is checked, 
please read the section "PACKET FLOW" in the IPFW(8) man page. 
Please ensure youve set the necessary system variables 
net.inet.ip.fw.enable=1 and net.link.ether.ipfw=1 to enable 
packet checking at level three and two, respectively.

Please see the script below; it is the one I use to allow access 
by MAC address. The first rule applying to your case is
 $IPFW add allow all from any to any not layer2
which says "pass all IP traffic through". I'm not doing any 
filtering at IP level with IPFW2, so I can safely do this. The 
next rule is
 $IPFW add allow layer2 out via em0
where I'm allowing all traffic out from the filtering box, 
regardless of MAC address. The third rule is
 $IPFW add allow MAC any 00:0d:93:81:82:1e in via em0
where I allow the MAC stated there to pass the filter. My last 
rule there is
 $IPFW add deny log logamount 0 MAC any any in via em0
which I use to get a logfile of every user using an unregistered 
MAC address...

#!/bin/sh

IPFW=/sbin/ipfw
# ALL="add allow all from any to any MAC any  "
ALL="add allow MAC any  "
EM="in via em0"
$IPFW -q flush
$IPFW -q pipe flush
# allow everything not on layer 2
 $IPFW add allow all from any to any not layer2

# localhost traffic
 $IPFW add allow layer2 via lo0

# outbound interface
 $IPFW add allow layer2 via fxp0

# out via em0; 
 $IPFW add allow layer2 out via em0

# in via em0; hostile internal network
 $IPFW $ALL 00:0d:93:81:82:1e $EM
# some 40 other rules like the one before
$IPFW add deny log logamount 0 MAC any any $EM


Regards,
Robert


More information about the freebsd-ipfw mailing list