57 votes

Pourquoi ne pas bloquer ICMP ?

Je pense que j'ai presque terminé la configuration de mon iptables sur mon système CentOS 5.3. Voici mon script...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

Pour situer le contexte, cette machine est un hôte d'applications Web Virtual Private Server.

Dans un question précédente Lee B a dit que je devrais "bloquer ICMP un peu plus". Pourquoi ne pas le bloquer complètement ? Que se passerait-il si je faisais cela (quelle mauvaise chose se produirait) ?

Si je ne dois pas bloquer ICMP, comment puis-je m'y prendre pour le verrouiller davantage ?

129voto

Jim Points 53

ICMP est bien plus que "traceroute" et "ping". Il est utilisé pour le retour d'information lorsque vous exécutez un serveur DNS (port inaccessible) qui, dans un serveur DNS moderne, peut en fait aider à sélectionner une autre machine à interroger plus rapidement.

ICMP est également, comme mentionné ci-dessus, utilisé pour la découverte du MTU du chemin. Il est probable que votre système d'exploitation définisse "DF" (don't fragment) sur les paquets TCP qu'il envoie. Il s'attend à recevoir un paquet ICMP "fragmentation requise" en retour si quelque chose le long du chemin ne parvient pas à gérer cette taille de paquet. Si vous bloquez tous les ICMP, votre machine devra utiliser d'autres mécanismes de repli, qui utilisent essentiellement un délai d'attente pour détecter un "trou noir" PMTU et qui ne seront jamais optimisés correctement.

De plus, vous devriez vous demander pourquoi vous voulez bloquer ICMP. Qu'essayez-vous précisément d'empêcher ici ? Il est clair que vous ne comprenez pas à quoi sert ICMP, ce qui est assez courant. Je serais extrêmement prudent en bloquant quelque chose que vous ne comprenez pas complètement.

Pour rendre l'apprentissage encore plus difficile, de nombreux livres courants sur les pare-feu disent "bloquer ICMP" - il est clair que leurs auteurs n'ont jamais lu un RFC ou ont dû résoudre des problèmes liés à de tels conseils. C'est un mauvais conseil de bloquer tous les ICMP.

Maintenant, la limitation du taux peut aussi faire mal. Si votre machine est occupée, ou même si elle ne l'est pas, vous pouvez recevoir une bonne quantité de trafic ICMP. Mon serveur web reçoit probablement entre 10 et 100 paquets ICMP par minute, dont la plupart sont des découvertes PMTU. Même si quelqu'un choisissait d'attaquer mon serveur avec des paquets ICMP d'un type ou d'un autre, ce n'est pas vraiment un problème. Si votre machine accepte ne serait-ce qu'une seule connexion TCP (ssh, http, mail, etc.), il y a de fortes chances que ce soit un vecteur d'attaque plus important qu'un ICMP mal compris.

26voto

Ryan Sampson Points 2898

ICMP est utilisé pour une série de fonctions de diagnostic (par exemple, ping, traceroute) et de contrôle du réseau (par exemple, découverte du PMTU). Le blocage sans discernement de l'ICMP provoque chez les autres toutes sortes d'aigreurs et, à moins de savoir exactement ce que vous faites, vous devriez le laisser tranquille.

18voto

Antitribu Points 1709

Je n'ai jamais compris pourquoi les gens utilisent ICMP, comme dit plus haut, cela ne fait que causer des maux de tête à vous-même et aux autres. Vous pouvez déterminer assez facilement si un hôte est actif et tant que cela est suffisamment limité pour ne pas être utilisé comme un DOS, je n'ai jamais entendu de raisons impérieuses de le bloquer. (Si quelqu'un peut trouver une raison, merci de la poster).

8voto

Daniel Points 2171

Vous pourriez simplement essayer de limiter l'icmp de façon à ce qu'il ne puisse pas être utilisé comme une attaque DOS. Mais il y a beaucoup trop d'outils de dépannage comme ping, mtr (j'ai oublié l'équivalent Windows), traceroute (tracert), qui utilisent icmp. les abandonner complètement est tout simplement insensé. C'est un bon moyen de vérifier si votre instance est en marche, même si vous ne pouvez pas vous connecter sur aucun port.

--limit 10/second

à votre/vos règle(s) icmp est probablement une limite décente étant donné la quantité de données qu'un ordinateur peut réellement gérer.

6voto

Dan Pritts Points 3091

Voici un autre point de vue, dans l'esprit de ce que la théorie de la sécurité suggère. Les autres posters ont raison de dire que les pratiques de sécurité sont souvent trop zélées, mais la plupart d'entre elles sont fondées.

La théorie de la sécurité est généralement que vous n'activez que CE DONT VOUS AVEZ BESOIN. D'autres éléments (qui pourraient être utiles - par exemple, les réponses ping) peuvent être utilisés par un attaquant pour explorer votre système, ou éventuellement comme vecteur d'attaque pour une vulnérabilité qui n'a pas encore été découverte.

Donc, en regardant les types de messages ICMP, de quoi avez-vous besoin pour le fonctionnement normal et correct de votre système ?

  • réponse par écho (ping) - pas vraiment
  • destination unreachable - beaucoup d'informations utiles ici. Si vous désactivez cette fonction, certains clients n'auront plus accès à votre serveur.
  • source quench - déprécié depuis 1995, et apparemment supprimé des implémentations hôtes depuis (au plus tard) 2005. tools.ietf.org/html/rfc6633#section-1.
  • redirection - presque certainement pas
  • publicité et sollicitation des routeurs - inutile si vous configurez vos routes de manière statique, et pourrait être utilisé pour les DoS. Je le bloquerais à moins que vous ne sachiez que vous en avez besoin, et si vous en avez besoin, peut-être coder une règle pour accepter l'information de seulement les routeurs connus possibles.
  • ttl dépassé - pas seulement pour traceroute, indique que votre trafic ne parvient pas à sa destination.

...et ainsi de suite. Si vous voulez vraiment comprendre, allez vous renseigner sur les différents types d'ICMP et leur utilité. Le site ウィキペディア記事 est un bon point de départ.

En pratique, le plus laid est la redirection ; si vous voulez juste faire quelque chose de rapide et d'utile, bloquez cela et autorisez le reste.

J'ajouterais que le suivi des connexions IPtables permettra le retour approprié des paquets ICMP pour les connexions actives. Ainsi, si vous utilisez conntrack, vous devriez pouvoir bloquer la plupart des ICMP entrants, tant que vous acceptez les paquets RELATED (avant de bloquer ICMP dans votre jeu de règles).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X