Why not block ICMP?

ICMP is way, way more than “traceroute” and “ping.” It is used for feedback when you run a DNS server (port unreachable) which, in a modern DNS server, may actually help select a different machine to query faster.

ICMP is also, as was mentioned above, used for path MTU discovery. Chances are your OS sets “DF” (don’t fragment) on TCP packets it sends. It is expecting to get an ICMP “fragmentation required” packet back if something along the path fails to handle that size of packet. If you block all ICMP, your machine will have to use other fallback mechanisms, which basically use a timeout to detect a PMTU “black hole” and will never optimize correctly.

Additionally, you should ask yourself why you want to block ICMP. What specifically are you attempting to prevent here? It’s pretty clear you don’t understand what ICMP is used for, which is rather common. I’d be extremely cautious in blocking something you don’t fully understand.

To make it even harder to learn about this, many common firewall books say “block ICMP” — it’s clear their authors have never read an RFC or had to solve issues surrounding such advice. It’s bad advice to block all ICMP.

Now, rate limiting it can also hurt. If your machine is busy, or even if it’s not, you can get a good amount of ICMP traffic. My web server probably gets about 10-100 ICMP packets per minute, most of which is PMTU discovery. Even if someone chose to attack my server with ICMP packets of some type, it’s really not that big of a deal. If your machine accepts even one TCP connection (ssh, http, mail, etc) chances are that’s a bigger attack vector than misunderstood ICMP ever will be.

Leave a Comment