¿Es mejor configurar -j REJECT o -j DROP en iptables?

33

Hay un ejemplo de reglas de iptables en archlinux wiki:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

Hace unos días, mi amigo me preguntó por qué hay REJECTen las últimas tres reglas. Me dijo que debería DROPhaberlo, y mencionó algo sobre una mejor seguridad en caso de DROP.

Entonces, tengo dos preguntas:

  1. ¿Qué hacen las tres reglas?

  2. ¿Hay alguna diferencia cuando pongo allí DROPen su lugar REJECT --reject-with? En caso afirmativo, ¿cuál es la diferencia?

Mikhail Morfikov
fuente
3
Pregunta similar sobre seguridad de la información : ¿ Rechazar paquetes IP con un error ICMP o simplemente descartarlos?
Gilles 'SO- deja de ser malvado'

Respuestas:

33

¿Qué hacen las tres reglas?

Esas 3 reglas parecen explicarse por sí mismas:

  1. Rechace los paquetes UDP entrantes con un mensaje ICMP "puerto inalcanzable"
  2. Rechace los paquetes TCP entrantes con "tcp reset"
  3. Rechace los paquetes entrantes (de cualquier otro protocolo) con el mensaje ICMP "protocolo inalcanzable"

Si está buscando más detalles (sobre paquetes UDP / TCP, ICMP), necesita profundizar en los documentos de red, y tal vez man iptablestambién.

¿Hay alguna diferencia cuando pongo DROP en su lugar RECHAZAR --rechazar-? Si es así, ¿podría alguien explicarme la diferencia? Realmente lo agradeceré.

Hace la diferencia Y contrario a la creencia popular, DROPno da mejor seguridad que REJECT. Incomoda a los usuarios legítimos, y efectivamente no protege contra los maliciosos. Esta publicación explica el razonamiento en detalle:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

Una razón común para usar DROP en lugar de RECHAZAR es evitar revelar información sobre qué puertos están abiertos, sin embargo, descartar paquetes proporciona exactamente tanta información como el rechazo.

Con REJECT, realiza su análisis y clasifica los resultados en "conexión establecida" y "conexión rechazada".

Con DROP, clasifica los resultados en "conexión establecida" y "conexión agotada".

El escáner más trivial utilizará la llamada "conectar" del sistema operativo y esperará hasta que se complete un intento de conexión antes de comenzar con el siguiente. Este tipo de escáner se ralentizará considerablemente al descartar paquetes. Sin embargo, si el ataque establece un tiempo de espera de 5 segundos por intento de conexión, es posible escanear cada puerto reservado (1..1023) en una máquina en solo 1,5 horas. Los escaneos siempre están automatizados, y al atacante no le importa que el resultado no sea inmediato.

Un escáner más sofisticado enviará paquetes por sí mismo en lugar de depender de la implementación TCP del sistema operativo. Dichos escáneres son rápidos, eficientes e indiferentes a la elección de REJECT o DROP.

CONCLUSIÓN

DROP no ofrece una barrera efectiva contra las fuerzas hostiles, pero puede reducir drásticamente las aplicaciones ejecutadas por usuarios legítimos. DROP normalmente no debe usarse.

Detener el daño continuo a Mónica
fuente
@janos - podría escribir un poco más acerca de lo que realmente sucede cuando un paquete llega a cada una de las tres reglas?
Mikhail Morfikov
3
@ Kiwy - Lea el enlace y pruébelo usted mismo. DROP no brinda mejor seguridad que RECHAZAR. Incomoda a los usuarios legítimos, y efectivamente no protege contra los maliciosos. Esto se debe a que los usuarios legítimos sufren de una conexión lenta mientras esperan que la conexión se agote y los crackers simplemente configuran sus herramientas para que no esperen un tiempo de espera. el hecho de que la conexión es lenta (debido a la espera de una salida) muestra su servidor está ahí y un cortafuegos.
Pantera
2
No voy con esa conclusión. Rechazar genera una respuesta ICMP que puede analizarse. Según este análisis, los buenos motores de ataque pueden derivar el sistema operativo que se está utilizando. Entonces, en un sistema donde se conocen todos los puertos, la caída podría ser mejor. Esto se aplica a los servidores en un entorno de producción.
Nils
1
Un firewall que solo reenvía ciertos puertos es aún mejor. DROP an RECHAZO no son lo mismo que absolutamente ningún servicio se ejecuta en primer lugar. Muchos escáneres de puertos marcan a su host como un objetivo potencial para futuros escaneos con la esperanza de atrapar su firewall si encuentran RECHAZOS o GOTAS allí, ya que ambos se pueden detectar desde el exterior. chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf
1
Tenga en cuenta que el texto citado tiene un párrafo más, una actualización, que dice que la gota es mejor si tiene un ataque DDoS, que es relativamente rara, pero cuando ocurre, es probable que sea bueno tenerlo ... ¿qué te parece?
Alexis Wilke