ICMP is a very important part of the communication between hosts on IP networks. Used by routers and endpoints (clients and servers) ICMP communicates error conditions in networks and provides a means for endpoints to receive information about a network path or requested connection.
One of the commonest uses of ICMP by the administrator of a network is the use of ping to detect the state of a machine in the network. There are other types of ICMP which are used for other inter-computer communication. One other common type of ICMP is the ICMP returned by a router or host which is not accepting connections. Essentially, the host returns the ICMP as a polite method of saying “Go away.”.
One important use of ICMP, which is completely transparent to most users (and indeed many admins), is the use of ICMP to discover the Path Maximum Transmission Unit (PMTU). By discovering the Path MTU and transmitting packets with this the MTU, a host can minimize the delay of traffic due to fragmentation, and (theoretically) attain a more even rate of data transmission. Because each destination may have a different MTU due to different network paths, the MTU is a per route attribute stored in the routing cache.
Path MTU can be quite easily broken if any single hop along the way blocks all ICMP. Be sure to allow ICMP unreachable/fragmentation needed packets into and out of your network. This will prevent you from being one of the unclueful network admins who cause PMTU problems.
An ICMP redirect is a router's way of communicating
that there is a better path out of this network or into another one
than the one the host had chosen. In
the example network,
tristan
has a route to the world through masq-gw
and a route to
192.168.98.0/24 through isdn-router
. If tristan
sends a packet
for 192.168.98.0/24 to masq-gw
, the optimal outcome is for
masq-gw
to suggest with an ICMP redirect that tristan
send such
packets via isdn-router
instead.
By this method, hosts can learn what networks are reachable through which routers on the local network segment. ICMP redirect messages, however, are easy to forge, and were (at one time) used to subvert poorly configured machines. While this is infrequently a problem on the Internet today, it's still good practice to ignore ICMP redirect messages from public networks. Create static routes where necessary on private and public networks to prevent ICMP redirect messages from being generated on your network.
To examine an example of ICMP redirect in action, we simply
need to send a packet directly from tristan
to
morgan
. We assume that masq-gw
has a route to 192.168.98.0/24
via 192.168.99.1 (isdn-router
), that tristan
has no
such route.
Example 4.21. ICMP Redirect on the Wire [29]
|
There's a great deal of information above, so let's examine the
important parts. We have the first three packets which passed by our
NIC as a result of this attempt to establish a session. First, we see
a packet from tristan
bound for morgan
with tristan
's source MAC
and masq-gw
's destination MAC. Because masq-gw
is tristan
's
default gateway, tristan
will send all packets there.
The next packet is the ICMP redirect, informing tristan
of a
better route. It includes several pieces of information.
Implicitly, the source IP indicates what router is suggesting the
alternate route, and the contents specify what the intended
destination was, and what the better route is. Note that masq-gw
suggests using 192.168.99.1 (isdn-router
) as the gateway for this
destination.
The final packet is part of the intended session, but has the MAC
address of masq-gw
on it. masq-gw
has (courteously) informed us
that we should not use it as a route for the intended destination, but
has also (courteously) forwarded the packet as we had requested. In
this small network, it is acceptable to allow ICMP redirect messages,
although these should always be dropped at network borders, both
inbound and outbound.
So, in summary, ICMP redirect messages are not intrinsically dangerous or problematic, but they shouldn't exist in well-maintained networks. If you happen to see them growing in the shadows of your network, some careful observation should show you what hosts are affected and which routing tables could use some attention.
[29] Consult Table A.2, “Example Network; Host Addressing” for details on the IP and MAC addresses of the hosts referred to in this example.