Post by chipPost by DaveI'm not a master of the internet RFCs, but I do believe icmp messages have
different types.
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
http://www.cisco.com/warp/public/105/traceroute.shtml
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 ***@ringlet.net ***@cnsys.bg ***@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.