Date: Thu, 12 Sep 2002 17:13:10 +0000 From: Pierre-Olivier Fur <pof@teamlog.com> To: dfolkins <dfolkins@comcast.net> Cc: freebsd-security@FreeBSD.ORG Subject: Re: ipfw, natd, and keep-state - strange behavior? Message-ID: <3D80CB26.5080304@teamlog.com> References: <20020911105418.F32908-100000@doos.cluecentral.net> <00ac01c25a6c$1b34fb20$0a00a8c0@groovy3xp>
next in thread | previous in thread | raw e-mail | index | archive | help
To me you should try ipf/ipnat, it's much more easier, efficiency and much more stateful ;) In a few words it's the best. Once you try it and never you leave it... Good luck with ipfw ;) dfolkins wrote: > hi, > pretty sure that this is appropriate for -security, but if it is not, i > apologize in advance. > > i have a fbsd 4.6 router box sitting between a local net (192.168.0) and a > single actual ip from a cable modem. naturally, ive set up nat and ipfw on > it, but instead of going the old way with the semi-stateful rules i decided > to go with keep-state/check-state. but problems arise with outgoing ssh > connections. here is the relevant portion of my ipfw rules: > > #set up NAT > ${fwcmd} add 00050 divert natd all from any to any via ${oif} > > # Allow the packet through if it has previous been added to the > # the "dynamic" rules table by an allow keep-state statement. > $fwcmd add 00200 check-state > > # Run all private LAN $iif packet traffic through the dynamic rules > # table so the IP addresses are in sync with Natd. > $fwcmd add 00220 allow all from any to any via $iif keep-state > > # Deny all fragments as bogus packets > $fwcmd add 00240 deny log all from any to any frag in via $oif > > # Deny ACK packets that did not match the dynamic rule table > $fwcmd add 00260 deny log tcp from any to any established in via $oif > > # Allow out ssh connections > $fwcmd add 00640 allow tcp from any to any 22 out via $oif setup keep-state > > seems like this should work. initiating an ssh connection with an external > host, and checking the dynamic rules (ipfw -ad list), the following two > rules are generated: > > 00220 84 12080 (T 599, slot 109) <-> tcp, 192.168.0.10 3106<-> {external > host ip} 22 > 00640 26 2130 (T 19, slot 166) <-> tcp, {my external ip} 3106<-> {external > host ip} 22 > > the rule for my external ip, though, only gets the lifetime value from the > syn_lifetime sysctl var, which is 20 seconds, and only the first rule > apparently gets the acks through it and gets a 600sec lifetime that is set > in ack_lifetime. any other packets sent through teh connections reset the > lifetime of the above two rules to 600 and 20 again. this would not trouble > me otherwise, but as soon as the second rule (20 sec) expires, the ssh > connection dies. > > when i remove the word "setup" from rule 640, though, ssh connection does > not die. the same two dynamic rules are created, with the same lifetimes, > but when the short-lived rule expires the connection is still there, upon > sending any data through it the short-lived rule does not get recreated. i > am kinda stumped here. > > any ideas? whats wrong with my rules? any help would be appreciated. > > -- > df > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-security" in the body of the message > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-security" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D80CB26.5080304>