Dans le tutoriel précédent Faut-il bloquer ICMP : Pour et contre, j’expliquais qu’il n’était pas forcément une bonne idée de bloquer totalement le protocole ICMP sur son pare-feu iptables ou ufw.
Toutefois, pour plus de sécurité, vous pouvez chercher à bloquer les ping ou traceroute.
Alors, comment autoriser ou bloquer le ping dans iptables lorsque vous utilisez un VPS, serveur dédié, cloud ou bare metal Linux ?
Dans ce tutoriel, je vous donne toutes les règles iptables pour filtrer ces types du protocole Internet Control Message Protocol (ICMP).

Table des matières
Comment bloquer le ping avec iptables
Ping est l’un des premiers outils de dépannage que nous apprenons tous.
Il permet de vérifier si une machine répond et donc active sur un réseau.
Pour cela, il utilise les types de messages ICMP suivants :
- IPv4 : Echo Request (Type 8, Code 0) et Echo Reply (Type 0, Code 0
- IPv6 : Echo Request (Type 128, Code 0) et Echo Reply (Type 129, Code 0
Bloquer totalement le ping
Voici un exemple de règles iptables pour bloquer le type echo-request avec une règle REJECT.
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
La réponse du ping sera Impossible de joindre le port de destination (Destination Port Unreachable).
Cette réponse est obtenu par une réponse ICMP (Type 8, code 3) en retour de la machine pinguée.
Envoi d’une requête 'Ping' 10.0.0.41 avec 32 octets de données : Réponse de 10.0.0.41 : Impossible de joindre le port de destination. Réponse de 10.0.0.41 : Impossible de joindre le port de destination. Réponse de 10.0.0.41 : Impossible de joindre le port de destination. Réponse de 10.0.0.41 : Impossible de joindre le port de destination.
Cela peut donc consommer des ressources systèmes puisque la machine distante répond.
Si vous souhaitez totalement bloquer ICMP sans réponse, utilisez une règle DROP.
Dans ce cas là, la machine distante ne va pas répondre du tout et le ping va retourner : Délai d’attente de la demande dépassé.
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
A noter que vous pouvez aussi créer la règle iptables par le numéro du type et non par son nom.
Donc pour ping, vous pouvez utiliser le type 8 dans la règle iptables :
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
Enfin pensez qu’il faut aussi appliquer une règle iptables en IPv6 avec ip6tables :
ip6tables -A INPUT -p icmpv6 --icmp-type echo-request -j DROP
Bloquer le ping d’un/sauf serveur
Bien entendu, il est possible de filtrer le ping provenant d’un serveur en particulier.
Voici la syntaxe de la règle iptables pour bloquer les pings provenant d’une IP spécifique :
iptables -A INPUT -p icmp --icmp-type echo-request -s <source ip> -j DROP
Par exemple pour bloquer les ping provenant de 192.168.10.4 :
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.10.4 -j DROP
Je vous rappelle qu’iptables prend en compte les masques de sous réseau :
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.0.0/16 -j DROP
La même syntaxe est à utiliser en IPv6 :
ip6tables -A INPUT -p icmpv6 --icmp-type echo-request -s 192.168.10.4 -j DROP
A l’inverse, si vous ne voulez pas bloquer une adresse IP :
iptables -A INPUT -p icmp --icmp-type echo-request ! -s <source ip> -j DROP
Par exemple :
sudo iptables -A INPUT -p icmp --icmp-type echo-request ! -s 10.0.0.0/24 -j DROP
Comment limiter les requêtes ping avec iptables
Voici la syntaxe pour limiter les requêtes ping :
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit {NOMBRE}/sec --limit-burst {NOMBRE} -j ACCEPT
Par exemple :
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 30/minute --limit-burst 120 -j ACCEPT
En IPv6, cela devient :
ip6tables -A INPUT -p icmp --icmp-type 8 -m limit --limit 30/minute --limit-burst 120 -j ACCEPT
Enfin si vous souhaitez limiter les requêtes ICMP quelque soit le type :
iptables -I INPUT -p icmp -m hashlimit --hashlimit-name icmp --hashlimit-mode srcip --hashlimit 3/second --hashlimit-burst 5 -j ACCEPT