IPFW and icmp
Peter Pentchev
roam at ringlet.net
Wed Sep 1 23:37:06 PDT 2004
On Wed, Sep 01, 2004 at 11:57:38PM -0400, chip wrote:
> On Wed, 1 Sep 2004 20:37:52 -0700 (PDT), Dave <mudman at metafocus.net> wrote:
> >
> > I'm not a master of the internet RFCs, but I do believe icmp messages have
> > different types.
> >
> > Now to enable traceroute for IPFW, I might put in a rule like this:
> >
> > ipfw add pass icmp from any to me
> >
> > However, how would I make a rule to limit icmp messages to just those used
> > by traceroute? Can the messages be distinguished as such?
> >
> > A dynamic rule that exists only for the duration of a traceroute execution
> > would be even better. I take it 'setup' or 'check-state' would follow in
> > that case?
>
> Dave,
>
> I can't comment much on how to build the exact rules you need, but
> you should be made aware that different implementations of traceroute
> achieve the results in different ways. Cisco routers and most *nix
> boxen use UDP packets while Microsoft stuff uses ICMP. A good guide
> to the difference:
>
> http://www.cisco.com/warp/public/105/traceroute.shtml
>
> >From a quick google search however, I find the following from:
> http://lists.freebsd.org/pipermail/freebsd-security/2004-February/001585.html
>
> # TRACEROUTE - Allow outgoing
> ${fwcmd} add pass udp from any to any 33434-33523 out via ${oif}
I think Dave was a bit more interested in setting up his rules for
*incoming* packets, not the outgoing ones :) No matter which favor of
traceroute is used, they all depend on receiving 'Time exceeded' ICMP
responses (type 11) - usually 'time exceeded in transit' (type 11, code
0), but allowing all of type 11 should put you on the safe side.
Also, when blocking incoming ICMP requests and replies, please, please,
*please* take care to NOT block type 3 (destination unreachable) -
blocking 'need to fragment' packets (type 3, code 4) is a way to instant
gratification, if your idea of gratification is being a blackhole router
which breaks the Path MTU discovery for any poor soul who decides (or
simply has to) route through you, and for your own outgoing connections,
too.
Other useful ICMP types are 0 (echo/ping reply), 4 (source quench, for
throttling down (usually) TCP connections if some device further down
the path cannot handle the packet rate), 8 (echo/ping request), 30
(Windows traceroute), but you *could* block those without much harm to
the TCP/IP protocol stack, the only thing harmed would be functionality
- e.g. blocking types 0 and 8 would deprive you of pings, blocking type
30 would stop Windows traceroute from working, blocking type 4 would
mean that TCP connections going over a much slower link somewhere down
the line would be additionally slowed down by lots of retransmissions
instead of simply bringing down the packet rate. However, whatever you
block, please don't block type 3 code 4, and better not block any of the
type 3's :)
G'luck,
Peter
--
Peter Pentchev roam at ringlet.net roam at cnsys.bg roam at FreeBSD.org
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
If the meanings of 'true' and 'false' were switched, then this sentence wouldn't be false.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-security/attachments/20040902/27350ac7/attachment.bin
More information about the freebsd-security
mailing list