¿Por qué no bloquear ICMP?

53

Creo que casi tengo mi configuración de iptables completa en mi sistema CentOS 5.3. Aquí está mi guión ...

# 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

Por contexto, esta máquina es un host de aplicación web de servidor privado virtual.

En una pregunta anterior , Lee B dijo que debería "bloquear ICMP un poco más". ¿Por qué no simplemente bloquearlo por completo? ¿Qué pasaría si hiciera eso (qué cosa mala sucedería)?

Si no necesito bloquear ICMP, ¿cómo podría bloquearlo más?

Agvorth
fuente
44
iptables -A INPUT -j DROP <incorrecto (opinión) debe establecer la política en iptables -P INPUT DROP, que es básicamente lo mismo que establecer un valor predeterminado. NEGAR POR DEFECTO.
xenoterracide
2
Descubra por qué es una mala idea bloquear icmp: security.stackexchange.com/a/22713/485
Rory Alsop el

Respuestas:

117

ICMP es mucho más que "traceroute" y "ping". Se utiliza para comentarios cuando ejecuta un servidor DNS (puerto inalcanzable) que, en un servidor DNS moderno, puede ayudar a seleccionar una máquina diferente para consultar más rápido.

ICMP también se utiliza, como se mencionó anteriormente, para el descubrimiento de MTU de ruta. Lo más probable es que su sistema operativo establezca "DF" (no fragmente) en los paquetes TCP que envía. Se espera recuperar un paquete de "fragmentación requerida" ICMP si algo a lo largo de la ruta no puede manejar ese tamaño de paquete. Si bloquea todos los ICMP, su máquina tendrá que usar otros mecanismos alternativos, que básicamente usan un tiempo de espera para detectar un "agujero negro" PMTU y nunca se optimizará correctamente.

Además, debe preguntarse por qué desea bloquear ICMP. ¿Qué estás tratando de prevenir específicamente aquí? Está bastante claro que no entiendes para qué se usa ICMP, que es bastante común. Sería extremadamente cauteloso al bloquear algo que no entiendes completamente.

Para que sea aún más difícil aprender sobre esto, muchos libros de firewall comunes dicen "bloquear ICMP": está claro que sus autores nunca han leído un RFC o han tenido que resolver problemas relacionados con dichos consejos. Es un mal consejo bloquear todos los ICMP.

Ahora, limitar la velocidad también puede doler. Si su máquina está ocupada, o incluso si no lo está, puede obtener una buena cantidad de tráfico ICMP. Mi servidor web probablemente recibe entre 10 y 100 paquetes ICMP por minuto, la mayoría de los cuales es el descubrimiento de PMTU. Incluso si alguien elige atacar mi servidor con paquetes ICMP de algún tipo, realmente no es tan importante. Si su máquina acepta incluso una conexión TCP (ssh, http, mail, etc.), es probable que sea un vector de ataque más grande que el ICMP mal entendido.

Michael Graff
fuente
44
No podría haberlo dicho mejor. +1
Massimo
99
Hay un tipo de ICMP que puede ser dañino redirect. Ese es el único tipo de ICMP que debería considerar bloquear.
Hubert Kario
2
@Hubert sería muy útil si pudiera vincular a más consejos sobre cómo bloquear el redirect. Ahora entiendo que debería considerarlo, pero no estoy mejor, todavía no puedo decidir de una forma u otra :) ¿Es un riesgo o no?
RomanSt
El mensaje Redirect ICMP le dice al host (los enrutadores nunca deberían aceptarlos) que tal y tal subred o host está disponible en una puerta de enlace diferente (generalmente por un enrutador más rápido). Al menos eso es lo que dice RFC1122.
Hubert Kario
2
Creo que las redirecciones se ignoran por defecto en Linux. Pero sí, mejor filtrar eso.
Fox
26

ICMP se utiliza para una variedad de funciones de diagnóstico (por ejemplo, ping, traceroute) y control de red (por ejemplo, descubrimiento de PMTU). El bloqueo indiscriminado de ICMP causa a otras personas todo tipo de acidez estomacal, y a menos que sepa exactamente lo que está haciendo, debe dejarlo solo.

womble
fuente
14

Nunca he entendido por qué las personas registran ICMP, como se dijo anteriormente, solo causa dolores de cabeza a usted y a los demás. Puede determinar si un host está funcionando con suficiente facilidad y siempre y cuando sea lo suficientemente limitado como para no ser utilizado como DOS, nunca he escuchado ninguna razón convincente para bloquearlo. (Si alguien puede encontrar una razón, publique)

Antitribu
fuente
55
Es parte del culto a la seguridad de la información. Las personas de seguridad sienten que no necesitan justificar las cosas, porque los simples mortales no pueden entender las implicaciones de seguridad. Por otro lado, los dolores de cabeza de los administradores de redes y sistemas se pueden atribuir a la simple pereza. Después de todo, si los administradores sabían lo que estaba pasando, las cosas no romper ...
duffbeer703
me parece extraño matar las herramientas de diagnóstico esencialmente por el simple hecho de hacerlo; ya que la información en la que estaría interesado un atacante podría derivarse suponiendo que tenga algún otro servicio ejecutándose en la máquina. Tu derecho; parece muy "culto" y no cuestiones solo hazlo.
Antitribu el
66
Nunca he entendido por qué los autores de los libros de firewall parecen extrañar por completo que ICMP es mucho más que "ping" y "traceroute" y, sin embargo, los libros y blogs y los CÓMO todos dicen "bloquear ICMP".
Michael Graff el
1
niveles y niveles de esto, su respuesta fue votada correctamente, bien dicho. Principalmente sé que cuando está bloqueado, nunca se puede saber qué está mal con las cosas intermitentes, especialmente cuando hay múltiples bloques ICMP en el camino.
Antitribu
8

puedes intentar limitar icmp de esa manera, no se puede usar como un ataque DOS. pero hay demasiadas herramientas de solución de problemas como ping, mtr (olvido el equivalente de Windows), traceroute (tracert), que usan icmp. dejarlos caer por completo es una tontería. Es una buena manera de verificar si su instancia está activa aunque no pueda hacer telnet en ningún puerto.

--limit 10/second
para su (s) regla (s) icmp es probablemente un límite decente dado cuánto puede manejar realmente una computadora.

xenoterracida
fuente
6

Aquí hay un punto de vista alternativo, en el espíritu de lo que sugeriría la teoría de la seguridad. Otros carteles tienen razón en que la práctica de seguridad a menudo es demasiado celosa, pero hay una buena base para ello.

La teoría de seguridad es generalmente que solo habilitas LO QUE NECESITAS. Un atacante puede usar otras cosas (que podrían ser útiles, por ejemplo, respuestas de ping) para examinar su sistema, o posiblemente como un vector de ataque para alguna vulnerabilidad aún por descubrir.

Entonces, mirando los tipos de mensajes ICMP, ¿qué NECESITA para el funcionamiento normal y adecuado de su sistema?

  • respuesta de eco (ping): no tanto
  • destino inalcanzable: mucha información útil aquí. Deshabilite esto y romperá el acceso a su servidor para algunos clientes.
  • apagado de fuente: obsoleto desde 1995, y aparentemente eliminado de las implementaciones de host desde (a más tardar) 2005. tools.ietf.org/html/rfc6633#section-1.
  • redirigir - casi seguro que no
  • anuncio y solicitud de enrutador: no es necesario si configura estáticamente sus rutas y podría usarse para DoS. Lo bloquearía a menos que sepa que lo necesita, y si lo necesita, tal vez codifique una regla para aceptar información de solo los posibles enrutadores conocidos.
  • ttl excedido: no solo para traceroute, le dice que su tráfico no llega a su destino

...y así. Si realmente quiere entender esto, aprenda sobre los diversos tipos de ICMP y para qué sirven. El artículo de Wikipedia es un buen punto de partida.

En la práctica, el realmente feo es la redirección; Si desea hacer algo rápido y útil, bloquee eso y permita el resto.

Agregaría que el seguimiento de conexión de IPtables permitirá los paquetes ICMP de retorno apropiados para conexiones activas. Entonces, si está ejecutando conntrack, debería poder bloquear la mayoría de las entradas ICMP, siempre que acepte paquetes RELACIONADOS (antes de bloquear ICMP en su conjunto de reglas).

Dan Pritts
fuente
2
En realidad, el apagado de origen está en desuso desde 1995, y aparentemente se eliminó de las implementaciones de host desde (a más tardar) 2005 :). tools.ietf.org/html/rfc6633#section-1 .
sourcejedi
respuesta actualizada, gracias. Si hubiera pensado un poco más, lo habría recordado, duh.
Dan Pritts
Creo que ICMP PING es necesario para el descubrimiento de PMTU (que utilizan muchos navegadores y herramientas). No permitirlo es como ser descortés con tus usuarios. Ping también se usa para muchos propósitos de diagnóstico, y la mayoría de los grandes jugadores lo permiten. Además, hay pocos beneficios al no permitirlo.
jjmontes
2
Los paquetes de eco (ping) no son necesarios para el descubrimiento de PMTU. El descubrimiento de PMTU se realiza configurando el bit Don't Fragment (DF) en los paquetes salientes, y depende del destino ICMP inalcanzable: la fragmentación necesitaba mensajes que regresaban de enrutadores con MTU de enlace más pequeños. Ping es ciertamente útil para fines de diagnóstico, pero también es útil para el reconocimiento de red y potencialmente para DoS. Para todos ustedes y yo sabemos que hay un error latente de raíz remota en la pila ICMP en Linux. Si su estándar es "necesito esto", la respuesta es "no".
Dan Pritts
1
(Tenga en cuenta que escribí en la respuesta que el bloqueo de mensajes inalcanzables en el destino romperá las cosas. El descubrimiento de PMTU fue de hecho lo que estaba pensando. :)
Dan Pritts
4

Es una herramienta de diagnóstico útil para resolver problemas de conectividad de red.

También le permite usar conexiones en otros lugares de Internet que usan MTU más pequeñas que las de su red. Si intenta enviar un paquete a un lugar que es demasiado grande y no puede fragmentarse, el dispositivo descarta el paquete y envía un paquete de fragmentación ICMP necesario al remitente. Si descarta todos los paquetes ICMP, los pierde y suceden cosas extrañas en su red.

La verdadera pregunta es "¿por qué bloquear ICMP?" Que ganas Solo tenga buenas reglas de filtrado en su frontera y frente a sus activos valiosos.

Chris
fuente
3

ping es una buena herramienta de diagnóstico, realmente desearás haberla tenido algún día. Estoy usando estos:

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

También es posible que desee estrangularlo.

neoice
fuente
8
Esto es lamentablemente inadecuado por otras razones que otros han señalado ( ICMP es mucho más que solo ping ). Debe bloquear selectivamente mensajes ICMP específicos y potencialmente dañinos , y permitir otros mensajes de control sin ser molestados.
voretaq7
2

Hoy en día, incluso limitar los paquetes ICMP en el lado del servidor puede crear dolor de cabeza en los ataques DDoS. Los ataques se realizan principalmente mediante el envío de solicitudes de ICMP de gran ventana a un servidor y si el servidor está tratando de responder a cada uno de ellos, ¿adivina qué sucede?

Lo principal es que tenemos un servidor de TeamSpeak que recibe paquetes incorrectos todos los días, hubo pocos días en dos meses que tuvimos algo de "tiempo libre". Lo que habíamos hecho es la respuesta ICMP completamente deshabilitada / bloqueada, no tenemos servidores DNS en el servidor, ni servidores NTP, ni servidores de correo, ni servidores FTP, solo dos apache y teamspeak. todos los puertos que no son necesarios para los servicios están apagados. Estamos planeando bloquear incluso el ssh y dejar solo dos puertos abiertos. Hoy hay 21k (!) Prohibiciones permanentes.

La situación es que los atacantes usan principalmente túneles ICMP y se discutieron pocas líneas de registro realmente interesantes con los administradores del servidor y dijeron que tenían solicitudes ICMP del servidor, por lo que los atacantes usaron eso para hacer un túnel a través del ataque y atacarnos. Suena raro pero es cierto.

Si no necesita el diagnóstico de su servidor y si puede bloquear completamente las solicitudes o filtrarlas para colocar ventanas enormes, por ejemplo, hágalo. También le sugiero que bloquee completamente: China, Corea, Tailandia, Turquía porque la mayoría de las direcciones IP provienen de allí. Tenía listas inetnum completas de estos países, pero casi todos los días aparecen algunas nuevas.

Digo lo que hago, si no estás de acuerdo, no lo hagas. Simple como eso. Buena suerte

Andrius Lukminas
fuente
0

Como mínimo, debe permitir pasar los tipos de ICMP 3 (destino inalcanzable), 4 (apagado de origen) y 11 (tiempo excedido). Todos estos tipos se utilizan para tratar problemas de red y no se deben filtrar.

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

(El tipo de enfriamiento de origen está actualmente en desuso, pero no hará daño dejar que se abra)

televisores
fuente
-2

Permito el tráfico ICMP desde la intranet local, lo bloqueo de Internet. De esa manera, mi servidor es casi invisible en línea (solo responde en un puerto SSH no estándar).

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

Esto lo inserta después del loopback estándar, establecido, la lista blanca de LAN, la lista blanca de proveedores de VOIP y las ACEPTACIONES de puerto SSH. Permito el tráfico que quiero, y luego hago todo lo posible para mantener el servidor invisible para el resto del mundo.

Dan
fuente
1
Creo que entiendo lo que estás tratando de decir, pero no se correlaciona con las tablas que escribiste. Si está abandonando tipos específicos de ICMP, ¿qué le sucede a los no especificados? Asumiría Default-Allow, de lo contrario, ¿por qué especificar un bloque cuando sería intrínseco? Luego declaras "Permito el tráfico que quiero", lo que indicaría Default-Deny o Default-Drop ... básicamente tu respuesta es inconsistente y, en el mejor de los casos, confusa.
JM Becker