¿Rechazar paquetes IP con un error de ICMP, o simplemente eliminarlos?

23

Considere un host orientado a Internet (el firewall externo). ¿Qué se debe hacer con el tráfico no deseado: simplemente descárguelo o envíe un error ICMP, como un puerto inalcanzable? (En términos de Linux: iptables -P DROP o iptables -j REJECT ?)

Esto no se trata de la seguridad de nuestra red, los paquetes no están llegando de ninguna manera. Se trata de ser un buen ciudadano. REJECT podría hacer que nuestro firewall participe en un DDoS, si los paquetes entrantes tienen un origen falso. ¿Pero es siempre la elección correcta? ¿Hay circunstancias en las que es mejor enviar un error ICMP adecuado?

    
pregunta Gilles 23.04.2011 - 16:27
fuente

2 respuestas

17

Por lo general, voto por devolver un error ICMP para UDP y un paquete RST para TCP. Hace que los problemas de depuración sean mucho más fáciles. Y evita los tiempos de espera molestos: los servidores de correo e IRC a menudo intentan realizar una consulta de identidad o verificar que el cliente no sea un proxy abierto.

Si se hace en el firewall más alejado, no se revelará información relevante. Dependiendo de la configuración, puede incluso ocultar que hay un firewall. Si no hubiera respuesta, sería obvio que hay un agujero negro.

Es importante que los servidores no envíen respuesta a los paquetes enviados a una dirección de transmisión para evitar un efecto de amplificación en una situación de DoS. Está bien que el firewall envíe el mensaje de error en esta situación, lo que resulta en una sola respuesta.

Los paquetes de errores ICMP y TCP-RST no son más grandes que el paquete original más pequeño. Así que estos no son interesantes para los ataques DDoS.

Editar : los servidores con autoridad de DNS (y los resolutores de DNS mal configurados) son mucho más interesantes para los ataques DDoS reflexivos porque las respuestas de DNS son más grandes que las consultas y, por lo tanto, le dan al atacante una amplificación gratuita.

    
respondido por el Hendrik Brummermann 23.04.2011 - 16:41
fuente
5

Mencionas iptables , por lo que estás implicando a linux (al menos como un ejemplo para un sistema operativo con políticas de red ajustables).

Desde hace mucho tiempo, linux ha tenido un límite en el número de mensajes de error ICMP enviados. El valor predeterminado es muy bajo: 1 mensaje / s.

Este comportamiento de Linux se puede ajustar con los parámetros de red sysctl : icmp_ratelimit sysctl

icmp_ratelimit - INTEGER
    Limit the maximal rates for sending ICMP packets whose type matches
    icmp_ratemask (see below) to specific targets.
    0 to disable any limiting,
    otherwise the minimal space between responses in milliseconds.
    Default: 1000

Tenga en cuenta que, de forma predeterminada, icmp_ratelimit solo se aplica a los mensajes de error de ICMP y la inactivación de origen, no todas las respuestas de ICMP:

icmp_ratemask - INTEGER
    Mask made of ICMP types for which rates are being limited.
    Significant bits: IHGFEDCBA9876543210
    Default mask:     0000001100000011000 (6168)

    Bit definitions (see include/linux/icmp.h):
        0 Echo Reply
        3 Destination Unreachable *
        4 Source Quench *
        5 Redirect
        8 Echo Request
        B Time Exceeded *
        C Parameter Problem *
        D Timestamp Request
        E Timestamp Reply
        F Info Request
        G Info Reply
        H Address Mask Request
        I Address Mask Reply

    * These are rate limited by default (see default mask above)

por lo que esta limitación de velocidad no se aplica a la respuesta de eco de forma predeterminada.

Con la configuración predeterminada, la DOSIFICACIÓN de un objetivo con mensajes de error de ICMP enviados por una caja de linux parece muy difícil.

  

Los (...) paquetes ICMP inalcanzables son muy pequeños

No, no siempre son pequeños: bajo linux, el mensaje de error de ICMP capturará todo el contexto posible del paquete que lo causó, hasta el 576 (o la MTU de destino) , para hacer posible la demultiplexión del mensaje de error incluso cuando se ha utilizado una encapsulación compleja en IP , siguiendo RFC 1812 :

4.3.2.3 Original Message Header

   Historically, every ICMP error message has included the Internet
   header and at least the first 8 data bytes of the datagram that
   triggered the error.  This is no longer adequate, due to the use of
   IP-in-IP tunneling and other technologies.  Therefore, the ICMP
   datagram SHOULD contain as much of the original datagram as possible
   without the length of the ICMP datagram exceeding 576 bytes. 
    
respondido por el curiousguy 25.09.2011 - 07:56
fuente

Lea otras preguntas en las etiquetas