Date: Wed, 5 Sep 2018 08:38:23 -0700 From: Freddie Cash <fjwcash@gmail.com> To: ole@free.de Cc: freebsd-ipfw@freebsd.org Subject: Re: ipfw managing rules - best practice? Message-ID: <CAOjFWZ76Gi=MMVSPEpuexN2bBHUankGi3mY196E3GV%2BdaaGnMw@mail.gmail.com> In-Reply-To: <20180905112847.54287198.ole@free.de> References: <20180905112847.54287198.ole@free.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Sep 5, 2018 at 2:29 AM Ole <ole@free.de> wrote: > Hi, > > I'm using ipfw firewall on several machines. Rules are made by users by > hand or by configuration management tools. > > For this the ipfw.rules script sources other files: > > #!/bin/sh > > ipfw -q -f flush > cmd="ipfw -q add" > pif="epair0b" # interface name of NIC attached to Internet > $cmd 00010 allow all from any to any via lo0 > for RULES in `ls /etc/ipfw.rules.d/*.rules` ; do > . $RULES > done > $cmd 09999 deny log all from any to any > > If a user or a script alters a file, `service ipfw restart` is called. > This is working fine except one thing. Active connections like sql, > syslog, ssh, etc. get broken. They are defined like > > $cmd 01610 allow tcp from vpn.example.org to me 22 in via $pif setup > limit src-addr 50 > > I understand, that this connections get broken because the dynamic > rules get flushed with the `ipfw -q -f flush` command. But commenting > this command out results in a continuously growing rules table. > > With the `ipfw -d list` command I can see the dynamic rules. > Is there a way to flush the rules but not the dynamic ones? > Or to add them again after flush? > > How do you reload your rules? > Rule sets are made for this. :) Edit your script to create a new rule set 1 as the first step. Then to insert all the rules into rule set 1. As the last line of your script, you swap set 1 and set 0, which makes your new rules live. It's an atomic switch, so no packets are lost or connections dropped. (Note: I've never used stateful filtering with IPFW so not sure how the rule set switch interacts with that, but it shouldn't drop the dynamic connections.) ipfw -f set 1 flush ipfw set 1 disable ... all your normal rules, prepended by "set 1" ipfw set enable 1 ipfw set swap 1 0 ipfw set disable 1 ipfw -f set 1 flush -- Freddie Cash fjwcash@gmail.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOjFWZ76Gi=MMVSPEpuexN2bBHUankGi3mY196E3GV%2BdaaGnMw>