Date: Mon, 19 Jan 2004 16:25:56 -0600 From: "Thomas T. Veldhouse" <veldy@veldy.net> To: <fbsd_user@a1poweruser.com>, "freebsd-questions@FreeBSD. ORG" <freebsd-questions@FreeBSD.ORG> Subject: Re: ipfw/nated stateful rules example Message-ID: <000401c3dedb$350fae10$0101a8c0@cascade> References: <MIEPLLIBMLEEABPDBIEGOECGFFAA.fbsd_user@a1poweruser.com>
next in thread | previous in thread | raw e-mail | index | archive | help
fbsd_user wrote: > I disagree with you that the /etc/rc.firewall is the best example. > It's really a good example of stateless rules, & how to use > scripting Symbolic substitution. > > I have working keep-state rule set using user-ppp -nat, but as soon > as I add that darn legacy divert rule and drop user-ppp -nat it will > not work. Dynamic stateful rules table always ends up with an > mis-match between public and private ip address. Moving the divert > rule around only changes which ip address gets posted to the > stateful table(ie: the private or public one). > > Test results look like that legacy divert subroutine call to NATD is > the problem. See same mis-match ip address problem when stateless > rules are used, but since there is no stateful table involved it > just slips by un-noticed. > > Was hoping that the ipfw2 rewrite would have fixed this problem. > > > > > > > -----Original Message----- > From: owner-freebsd-questions@freebsd.org > [mailto:owner-freebsd-questions@freebsd.org]On Behalf Of Thomas T. > Veldhouse > Sent: Monday, January 19, 2004 1:41 PM > To: fbsd_user@a1poweruser.com; freebsd-questions@FreeBSD. ORG > Subject: Re: ipfw/nated stateful rules example > > fbsd_user wrote: >> Friends >> In both 4.9 and 5.2 I can not get an rules set to function that only >> uses keep-state' rules for outbound and inbound selection control >> and the divert rule. >> >> Does anybody have an rules set they can share with me as an sample >> for me to see. >> >> Thanks >> > > The best sample is /etc/rc.firewall [and look in > /usr/share/examples/ipfw > for a potentially useful script to use while testing]. I have moved > over to > IPFILTER due to the fact that natd is userland based and is more > problematic > [than ipnat] because of it. > > Tom Veldhouse Here are the contents of one that I used to use when I used IPFW ... it was originally and loosely based off of /etc/rc.firewall. # # Setup system for firewall service. # # Suck in the configuration variables. if [ -z "${source_rc_confs_defined}" ]; then if [ -r /etc/defaults/rc.conf ]; then . /etc/defaults/rc.conf source_rc_confs elif [ -r /etc/rc.conf ]; then . /etc/rc.conf fi fi ############ # Set quiet mode if requested # case ${firewall_quiet} in [Yy][Ee][Ss]) fwcmd="/sbin/ipfw -q" ;; *) fwcmd="/sbin/ipfw" ;; esac ############ # Flush out the list before we begin. # ${fwcmd} -f flush # set these to your outside interface network and netmask and ip oif="dc0" onet="x.y.z.32" omask="255.255.255.240" oip="x.y.z.33" # set these to your inside interface network and netmask and ip iif="fxp0" inet="192.168.1.0" imask="255.255.255.0" iip="192.168.1.3" # outlaw addresses, never allow traffic from these outlaws="24.93.67.0/24" ############ # Only in rare cases do you want to change these rules # ${fwcmd} add 100 pass all from any to any via lo0 ${fwcmd} add 105 deny all from any to 127.0.0.0/8 ${fwcmd} add 110 deny ip from 127.0.0.0/8 to any # ip-options (per FreeBSD Security Advisory: FreeBSD-SA-00:23.ip-options) ${fwcmd} add deny log ip from any to any ipoptions ssrr,lsrr,ts,rr via ${oif} # allow certain ICMP through (allows ping, traceroute, plus # the required source quence and similar) ${fwcmd} add pass icmp and to any icmptypes 0,3,4,8,11,12 via ${oif} ${fwcmd} add deny icmp from any to any icmptypes 9 via ${oif} # silent block on router advertisements ${fwcmd} add pass icmp from any to any via ${iif} # allow all internally ${fwcmd} add deny icmp from any to any # Stop spoofing ${fwcmd} add deny all from ${inet}:${imask} to any in via ${oif} ${fwcmd} add deny all from ${onet}:${omask} to any in via ${iif} # Stop RFC1918 nets on the outside interface ${fwcmd} add deny all from any to 10.0.0.0/8 via ${oif} ${fwcmd} add deny all from any to 172.16.0.0/12 via ${oif} ${fwcmd} add deny all from any to 192.168.0.0/16 via ${oif} # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1, # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E) # on the outside interface ${fwcmd} add deny all from any to 0.0.0.0/8 via ${oif} ${fwcmd} add deny all from any to 169.254.0.0/16 via ${oif} ${fwcmd} add deny all from any to 192.0.2.0/24 via ${oif} ${fwcmd} add deny all from any to 224.0.0.0/4 via ${oif} ${fwcmd} add deny all from any to 240.0.0.0/4 via ${oif} # Network Address Translation. This rule is placed here deliberately # so that it does not interfere with the surrounding address-checking # rules. case ${natd_enable} in [Yy][Ee][Ss]) if [ -n "${natd_interface}" ]; then ${fwcmd} add divert natd all from any to any via ${natd_interface} fi ;; esac # Stop RFC1918 nets on the outside interface ${fwcmd} add deny all from 10.0.0.0/8 to any via ${oif} ${fwcmd} add deny all from 172.16.0.0/12 to any via ${oif} ${fwcmd} add deny all from 192.168.0.0/16 to any via ${oif} # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1, # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E) # on the outside interface ${fwcmd} add deny all from 0.0.0.0/8 to any via ${oif} ${fwcmd} add deny all from 169.254.0.0/16 to any via ${oif} ${fwcmd} add deny all from 192.0.2.0/24 to any via ${oif} ${fwcmd} add deny all from 224.0.0.0/4 to any via ${oif} ${fwcmd} add deny all from 240.0.0.0/4 to any via ${oif} # block all outlaw address for outlaw in ${outlaws}; do ${fwcmd} add deny all from ${outlaw} to any done # Allow stateful connections ${fwcmd} add check-state # Allow TCP through if setup succeeded ${fwcmd} add pass tcp from any to me established # Allow IP fragments to pass through ${fwcmd} add pass all from any to any frag # Allow access to services #${fwcmd} add pass tcp from any to me 20 # ftp #${fwcmd} add pass tcp from any to me 21 # ftp ${fwcmd} add pass tcp from any to me 22 setup # ssh ${fwcmd} add pass tcp from any to me 25 setup # smtp ${fwcmd} add pass tcp from any to me 53 setup # dns ${fwcmd} add pass udp from any to me 53 # dns ${fwcmd} add pass udp from me 53 to any # dns ${fwcmd} add pass tcp from any to me 80 setup # http ${fwcmd} add pass tcp from any to me 443 setup # https ${fwcmd} add pass tcp from any to me 993 setup # imap-ssl ${fwcmd} add pass tcp from any to me 995 setup # pop3-ssl # Allow access to internal services ${fwcmd} add pass tcp from ${inet}:${imask} to me 110 # pop3 ${fwcmd} add pass tcp from ${inet}:${imask} to me 143 # imap ${fwcmd} add pass tcp from ${inet}:${imask} to me 3128 # squid ${fwcmd} add pass tcp from ${inet}:${imask} to me 3306 # mysql ${fwcmd} add pass tcp from ${inet}:${imask} to me 8080 # tomcat # Reject&Log all setup of incoming connections from the outside ${fwcmd} add deny log tcp from any to me setup # block all other udp traffic ${fwcmd} add deny udp from any to me # Allow all outgoing traffic from the lan ${fwcmd} add pass tcp from ${inet}:${imask} to any keep-state ${fwcmd} add pass udp from ${inet}:${imask} to any keep-state # Allow setup of any other TCP and all UDP connections ${fwcmd} add pass tcp from me to any setup keep-state ${fwcmd} add pass udp from me to any keep-state # Everything else is denied by default, unless the # IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel # config file. Tom Veldhouse
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?000401c3dedb$350fae10$0101a8c0>