Pourquoi ne pas bloquer ICMP?

53

Je pense avoir presque terminé la configuration de mon ordinateur 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 le contexte, cette machine est un hôte d'application Web Virtual Private Server.

Dans une question précédente , Lee B a déclaré que je devrais "verrouiller ICMP un peu plus". Pourquoi ne pas simplement le bloquer complètement? Que se passerait-il si je le faisais (quel mal arriverait-il)?

Si je n'ai pas besoin de bloquer ICMP, comment pourrais-je m'y prendre davantage?

Agvorth
la source
4
iptables -A INPUT -j DROP <faux (opinion), vous devez définir la stratégie sur iptables -P INPUT DROP, ce qui revient en gros à définir une valeur par défaut. DENY PAR DEFAULT.
Xenoterracide
2
Découvrez pourquoi il est déconseillé de bloquer icmp: security.stackexchange.com/a/22713/485
Rory Alsop

Réponses:

117

ICMP est bien plus qu'un simple "traceroute" et "ping". Il est utilisé pour les commentaires lorsque vous exécutez un serveur DNS (port inaccessible) qui, dans un serveur DNS moderne, peut en fait aider à sélectionner un autre ordinateur à interroger plus rapidement.

Comme indiqué ci-dessus, ICMP est également utilisé pour la découverte du chemin MTU. Il est fort probable que votre système d’exploitation «DF» (ne fragmente pas) sur les paquets TCP qu’il envoie. Il s'attend à récupérer un paquet ICMP "fragmentation requise" si quelque chose le long du chemin ne parvient pas à gérer cette taille de paquet. Si vous bloquez tous les messages ICMP, votre machine devra utiliser d'autres mécanismes de secours qui, fondamentalement, utilisent un délai d'attente pour détecter un "trou noir" du PMTU et n'optimiseront jamais correctement.

De plus, vous devriez vous demander pourquoi vous souhaitez 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 plutôt courant. Je serais extrêmement prudent en bloquant quelque chose que vous ne comprenez pas bien.

Pour en savoir plus sur ce sujet, de nombreux ouvrages sur les pare-feu disent «bloquer ICMP» - il est clair que leurs auteurs n'ont jamais lu de RFC ni n'ont dû résoudre de problèmes entourant de tels conseils. C'est un mauvais conseil de bloquer tous les ICMP.

Maintenant, limiter le taux peut aussi faire mal. Si votre machine est occupée, ou même si ce n'est pas le cas, vous pouvez obtenir une bonne quantité de trafic ICMP. Mon serveur Web reçoit probablement environ 10 à 100 paquets ICMP par minute, dont la plupart sont des fonctions de découverte PMTU. Même si quelqu'un a choisi d'attaquer mon serveur avec des paquets ICMP, ce n'est vraiment pas si grave. Si votre ordinateur accepte même une seule connexion TCP (ssh, http, mail, etc.), il est fort probable que ce soit un vecteur d'attaque plus grand qu'un ICMP mal compris.

Michael Graff
la source
4
Je n'aurais pas pu dire mieux. +1
Massimo
9
Il existe un type de message ICMP pouvant être dangereux redirect. C'est le seul type ICMP que vous devriez envisager de bloquer.
Hubert Kario
2
@Hubert, il serait très utile si vous pouviez accéder à plus de conseils sur le blocage du fichier redirect. Je comprends maintenant que je devrais y réfléchir, mais je ne suis pas mieux loti - je ne peux toujours pas décider d'une manière ou d'une autre :) Est-ce un risque ou non?
RomanSt
Le message de redirection ICMP indique à l'hôte (les routeurs ne doivent jamais les accepter) que tel ou tel sous-réseau ou hôte est disponible sur une passerelle différente (généralement par un routeur plus rapide). Du moins, c'est ce que dit la RFC1122.
Hubert Kario
2
Je crois que les redirections sont ignorées par défaut sur Linux. Mais oui, mieux vaut filtrer celui-là.
Fox
26

ICMP est utilisé pour une gamme de fonctions de diagnostic (par exemple, ping, traceroute) et de contrôle de réseau (par exemple, découverte de PMTU). Le blocage indiscriminé de l'ICMP provoque chez toutes les personnes toutes sortes de brûlures d'estomac et, à moins que vous ne sachiez exactement ce que vous faites, vous devriez le laisser tranquille.

femme
la source
14

Comme je l'ai dit plus haut, je n'ai jamais compris pourquoi les gens utilisent l'horloge ICMP. Cela ne fait que causer des maux de tête à vous-même et aux autres. Vous pouvez déterminer si un hôte fonctionne suffisamment facilement et tant qu'il est suffisamment limité pour ne pas être utilisé comme DOS, je n'ai jamais entendu de raison impérieuse de le bloquer. (Si quelqu'un peut trouver une raison s'il vous plaît poster)

Antitribu
la source
5
Cela fait partie du culte de la sécurité de l'information. Les agents de sécurité estiment qu'ils n'ont pas besoin de justifier des choses, car les simples mortels ne peuvent en comprendre les implications pour la sécurité. D'autre part, les maux de tête des administrateurs réseau et système peuvent être attribués à la paresse simple. Après tout, si les administrateurs savaient ce qui se passait, les choses ne se briseraient jamais ...
duffbeer703
il me semble étrange de tuer des outils de diagnostic essentiellement pour le plaisir de le faire; Les informations susceptibles d'intéresser un attaquant pourraient probablement être obtenues en supposant qu'un autre service soit exécuté sur la machine. Tu as raison; il semble très "culte" y, ne questionne pas juste faire.
Antitribu
6
Je n'ai jamais compris pourquoi les auteurs de livres coupe-feu semblent ne pas comprendre que l'ICMP est bien plus que "ping" et "traceroute". Pourtant, les livres, les blogs et les guides pratiques disent tous "bloquer ICMP".
Michael Graff
1
Les niveaux et les niveaux de ceci, votre réponse a été correctement votée, bien exprimée. La plupart du temps, je sais que quand il est bloqué, on ne peut jamais vraiment dire ce qui ne va pas avec les problèmes intermittents, en particulier quand il y a plusieurs blocs ICMP en cours de route.
Antitribu
8

vous pouvez simplement essayer de limiter icmp de cette façon, il ne peut pas être utilisé comme une attaque DOS. mais il y a beaucoup trop d'outils de dépannage tels que ping, mtr (j'oublie l'équivalent windows), traceroute (tracert), qui utilisent icmp. les abandonner entièrement est simplement idiot. C'est un bon moyen de vérifier si votre instance est active bien que vous ne puissiez pas utiliser telnet sur aucun port.

--limit 10/second
à vos règles icmp est probablement une limite décente compte tenu de tout ce qu'un ordinateur peut réellement gérer.

xénoterracide
la source
6

Voici un autre point de vue, dans l’esprit de ce que la théorie de la sécurité suggérerait. D’autres affiches ont raison, les pratiques en matière de sécurité sont souvent excessivement zélées, mais la plupart des bases sont valables.

La théorie de la sécurité est généralement que vous n'activez que CE QU'IL VOUS FAUT. Un attaquant peut également utiliser d'autres éléments (par exemple, les réponses ping) pour analyser votre système, ou éventuellement comme vecteur d'attaque pour une vulnérabilité encore à découvrir.

En regardant les types de messages ICMP, de quoi avez-vous BESOIN pour un fonctionnement normal et correct de votre système?

  • echo réponse (ping) - pas tellement
  • destination inaccessible - beaucoup d'informations utiles ici. Désactivez ceci et vous interromprez l'accès à votre serveur pour certains clients.
  • source quench - obsolète depuis 1995 et apparemment retiré des implémentations d’hôte depuis (au plus tard) en 2005. tools.ietf.org/html/rfc6633#section-1.
  • rediriger - presque certainement pas
  • annonce et sollicitation de routeur - inutile de configurer vos itinéraires de manière statique et de les utiliser pour le déni de service. Je le bloquerais à moins que vous sachiez que vous en avez besoin, et si vous en avez besoin, codez peut-être une règle pour accepter les informations provenant uniquement des éventuels routeurs connus.
  • ttl dépassé - pas seulement pour traceroute, vous indique que votre trafic ne parvient pas à sa destination

...etc. Si vous voulez vraiment comprendre cela, allez en apprendre davantage sur les différents types d’ICMP et à quoi ils servent. L' article de Wikipédia est un bon point de départ.

En pratique, le plus moche est redirigé; si vous voulez simplement faire quelque chose de rapide et d’utile, bloquez-le et laissez le reste.

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

Dan Pritts
la source
2
En réalité, l'extinction de source est obsolète depuis 1995 et semble être retirée des implémentations d'hôte depuis (au plus tard) 2005 :). tools.ietf.org/html/rfc6633#section-1 .
sourcejedi
réponse mise à jour, merci. Si j'avais réfléchi un peu plus fort, je m'en serais souvenu, duh.
Dan Pritts
Je pense qu'ICMP PING est requis pour la découverte de PMTU (utilisée par de nombreux navigateurs et outils). Le refuser, c'est comme être impoli envers vos utilisateurs. Le ping est également utilisé à de nombreuses fins de diagnostic, et la plupart des grands acteurs le permettent. En outre, il est peu avantageux de le refuser.
Jjmontes
2
Les paquets d'écho (ping) ne sont pas requis pour la découverte de PMTU. La découverte PMTU est effectuée en définissant le bit Ne fragmentez pas (DF) sur les paquets sortants et dépend de la destination ICMP inaccessible - Fragmentation des messages nécessaires provenant des routeurs avec des MTU de liaison plus petites. Ping est certes utile pour le diagnostic, mais également pour la reconnaissance de réseau et potentiellement pour le DoS. Je sais que vous et moi savons qu'il existe un bogue de racine distante latent dans la pile ICMP sous Linux. Si votre norme est "ai-je besoin de cela", la réponse est "non".
Dan Pritts
1
(Notez que j'ai écrit dans la réponse que le blocage des messages inaccessibles de destination bloquerait les choses. La découverte de PMTU était en fait ce à quoi je pensais. :)
Dan Pritts
4

C'est un outil de diagnostic utile pour résoudre les problèmes de connectivité réseau.

Il vous permet également d'utiliser des connexions ailleurs sur Internet utilisant des MTU plus petits que ceux de votre réseau. Si vous essayez d'envoyer un paquet trop volumineux et ne pouvant pas être fragmenté, l'appareil le supprime et renvoie un paquet nécessaire à la fragmentation ICMP à l'expéditeur. Si vous supprimez tous les paquets ICMP, vous perdez ces événements étranges sur votre réseau.

La vraie question est "pourquoi bloquer ICMP?" Que gagnez-vous? Ayez juste de bonnes règles de filtrage à la frontière et devant vos précieux atouts.

chris
la source
3

ping est un bon outil de diagnostic, vous souhaiterez vraiment l'avoir un jour. J'utilise ces:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

vous voudrez peut-être aussi l'étrangler.

néoice
la source
8
Ceci est terriblement inadéquat pour les raisons que d'autres ont mentionnées ( ICMP est bien plus qu'un simple ping ). Vous devez bloquer de manière sélective des messages ICMP spécifiques potentiellement dangereux et autoriser d'autres messages de contrôle par le biais de la non-altération.
voretaq7
2

De nos jours, même limiter les paquets ICMP côté serveur peut créer des maux de tête lors d'attaques DDoS. Les attaques sont généralement effectuées en envoyant des demandes ICMP de fenêtre volumineuses à un serveur. Si le serveur tente de répondre à chacune d’elles, devinez ce qui se passe?

La principale chose qui fait que nous avons un serveur teamspeak qui reçoit de mauvais paquets tous les jours, c’était quelques jours en deux mois où nous avions un peu de temps libre. Ce que nous avions fait, c’est que nous avons complètement désactivé / bloqué les réponses ICMP, nous n’avons aucun serveur DNS sur le serveur, aucun serveur NTP, aucun serveur de messagerie, aucun serveur FTP, seulement deux Apache et teamspeak. tous les ports inutiles pour les services sont désactivés. Nous prévoyons de bloquer même le ssh et de ne laisser que deux ports ouverts. Aujourd'hui, il y a 21k (!) Interdictions permanentes.

La situation est que les attaquants utilisent principalement des tunnels ICMP et que peu de lignes de journalisation vraiment intéressantes ont été discutées avec les administrateurs du serveur et qu'ils ont déclaré avoir des requêtes ICMP sur le serveur. Cela semble bizarre mais c'est vrai.

Si vous n'avez pas besoin de diagnostics de votre serveur et si vous êtes capable de bloquer complètement les demandes ou de les filtrer pour supprimer des fenêtres énormes, faites-le. Je vous suggère également de bloquer complètement: la Chine, la Corée, la Thaïlande, la Turquie car la majorité des adresses IP provient de là. J'avais des listes entières de ces pays, mais presque chaque jour, de nouvelles en sortaient.

Je dis ce que je fais, si vous n'êtes pas d'accord - ne le faites pas. Aussi simple que cela. Bonne chance

Andrius Lukminas
la source
0

Au minimum, vous devez autoriser le passage des types icmp 3 (destination inaccessible), 4 (extinction de la source) et 11 (délai dépassé). Tous ces types sont utilisés pour traiter des problèmes de réseau et ne doivent pas être filtrés.

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(Le type d'extinction source est actuellement obsolète, mais il ne fera pas de mal de le laisser ouvert)

téléviseurs
la source
-2

J'autorise le trafic ICMP depuis l'intranet local, le bloque depuis Internet. De cette façon, mon serveur est quasiment invisible en ligne (il ne répond que sur un port SSH non standard).

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

Cela l'insère après la boucle de rappel standard, établie, la liste blanche LAN, la liste blanche du fournisseur VOIP et les ACCEPT de port SSH. J'autorise le trafic que je souhaite, puis je fais de mon mieux pour que le serveur reste invisible pour le reste du monde.

Dan
la source
1
Je pense comprendre ce que vous essayez de dire, mais cela n’est pas en corrélation avec les tableaux que vous avez écrits. Si vous supprimez des types ICMP spécifiques, que va-t-il arriver à ceux non spécifiés ??? Je suppose que Default-Allow, sinon pourquoi spécifier un bloc quand il serait intrinsèque. Vous indiquez ensuite "J'autorise le trafic que je veux", ce qui indiquerait un refus par défaut ou un abandon par défaut ... votre réponse est fondamentalement incohérente et, au mieux, source de confusion.
JM Becker