Pregunta RECHAZAR vs DROP al usar iptables


¿Hay alguna razón por la que me gustaría tener

iptables -A INPUT -j REJECT

en lugar de

iptables -A INPUT -j DROP

80
2017-07-04 09:49


origen




Respuestas:


Como regla general, use REJECT cuando quiera que el otro extremo sepa que el puerto no está disponible. Use DROP para las conexiones a los hosts que no quiere que vea la gente.

Generalmente, todas las reglas para las conexiones dentro de su LAN deben usar RECHAZAR. Para Internet, con la excepción de la identidad en ciertos servidores, las conexiones de Internet por lo general son APROBADAS.

El uso de DROP hace que la conexión parezca ser una dirección IP desocupada. Los escáneres pueden optar por no continuar explorando las direcciones que aparecen desocupadas. Dado que se puede usar NAT para redirigir una conexión en el firewall, la existencia de un servicio bien conocido no necesariamente indica la existencia de un servidor en una dirección.

La identificación debe ser aprobada o rechazada en cualquier dirección que proporcione el servicio SMTP. Sin embargo, el uso de las búsquedas de Ident por los servicios SMTP se ha dejado de usar. Hay protocolos de chat que también dependen de un servicio de identificación de trabajo.

EDITAR: Al usar las reglas DROP:  - Los paquetes UDP se eliminarán y el comportamiento será el mismo que el de la conexión a un puerto sin red de acceso sin servicio.  - Los paquetes TCP devolverán un ACK / RST que es la misma respuesta con la que responderá un puerto abierto sin servicio. Algunos enrutadores responderán con ACK / RST en nombre de los servidores que están inactivos.

Cuando se usan las reglas de RECHAZO, se envía un paquete ICMP que indica que el puerto no está disponible.


72
2017-07-04 16:40



Esto no es verdad. Incluso cuando la regla dice "DROP", el sistema seguirá respondiendo al paquete entrante con un TCP SYN / ACK como si estuviera abierto. Para eliminar realmente un paquete, el sistema debe responder con un TCP RST / ACK, para el cual no hay una regla de firewall. Como tal, la mejor configuración de firewall es aquella en la que solo se reenvían los puertos seleccionados. Su regla DROP anunciará su cortafuegos y los escáneres de puertos sabrán que usted tiene cortafuegos y seguirán golpeando con la esperanza de atrapar su cortafuegos. - Dagelf
@Dagelf Ver mi edición. El RST / ACK no indica a los escáneres que está ejecutando ningún tipo de servidor de seguridad. Si bien algunos piratas informáticos pueden continuar investigando después de esta respuesta, eso debe basarse en conocer sus servicios, no la respuesta del firewall. Definitivamente redujo el número y la longitud de los escaneos que experimenté. - BillThor
Lo que quiero decir es que es detectable desde el exterior, ya sea que esté o no conectando un servidor de seguridad por el simple hecho de que su pila TCP se comporte diferente cuando GOTE que cuando no tiene un servicio ejecutándose en primer lugar. - Dagelf
No altera el hecho de que hay botnets que capitalizan la diferencia y, como consecuencia, controlan sus puertos. - Dagelf
@Dagelf ¿de dónde obtiene la información que DROP envía una respuesta? Esa es una gran noticia y va en contra de todo lo que he observado y dicho. ¿Tiene un enlace a la documentación que describe este comportamiento? - Score_Under


La diferencia es que el objetivo RECHAZAR envía una respuesta de rechazo a la fuente, mientras que el objetivo DROP no envía nada.

Esto puede ser útil, por ejemplo. para el servicio de ident. Si usa RECHAZAR, entonces los clientes no necesitan esperar un tiempo de espera.

Más sobre esto: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


25
2017-07-04 09:59



El objetivo DROP no envía nada. ¡Compruebe mi comentario sobre la respuesta aceptada e investigue el tema usted mismo si está interesado en los detalles! - Dagelf


Por lo general, usted quiere ignorar sondeos de atacantes a ciertos puertos, por lo que quiero decir que no desea devolver "conexión rechazada". "Conexión rechazada" significa: "hay un servidor aquí", y posiblemente regala más información, mientras que la eliminación de un paquete no da pistas sobre versiones de software, posibles vulnerabilidades o incluso el hecho de que un servidor está escuchando su IP.

Lo anterior es una de las razones principales para usar DROP en lugar de RECHAZAR.


8
2017-07-04 13:09



Sin las reglas de iptables, un puerto cerrado por defecto es RECHAZAR. Si usted GOTA todos los puertos, es una buena alternativa (su host aparece abajo) pero si GOTE solo puertos específicos, en realidad les está dando más información que RECHAZAR. Si alguien usa una sonda de cobertura como nmap, los puertos específicos que descargan los paquetes aparecerán como "filtrados", lo que significa que saben que hay un servicio allí que se está ocultando. - Raptor007


Veo muchas respuestas conflictivas aquí y dado que este es el primer artículo en Google con las palabras clave adecuadas; Aquí está la explicación correcta.
Es sencillo:

DROP no hace nada en absoluto con el paquete. No se reenvía a un host, no se responde. La página de manual de IPtables dice que deja caer el paquete en el piso, es decir, no hace nada con el paquete.

RECHAZO difiere en DROP que envía un paquete de vuelta, pero la respuesta es como si un servidor se encuentra en la IP, pero no tiene el puerto en un estado de escucha. IPtables enviará un RST / ACK en caso de TCP o con UDP, un puerto de destino ICMP inalcanzable.


6
2018-01-11 12:29



+1 de mi parte, pero las respuestas realmente no están en desacuerdo. Todos están de acuerdo, por lo que puedo ver, a excepción de Dagelf, que está equivocado. - MadHatter
Bien, aquí hay un pequeño truco para ti: haz un "nmap localhost". Ahora elija cualquier puerto que no esté "abierto" ... y agregue una regla que "no hace nada", por ejemplo: "iptables -I INPUT -p tcp --dport 888 -j DROP". Ahora "nmap localhost" de nuevo. ¿Que ves? ... - Dagelf


Si estás tratando de ocultar la existencia de tu máquina por completo, -j DROPes apropiado. Por ejemplo, puede usar esto para implementar una lista negra.

Si intenta ocultar el hecho de que un puerto está abierto, debe imitar el comportamiento que se produciría si el puerto no estuviera abierto:

  • TCP: -p tcp -j REJECT --reject-with tcp-reset
  • UDP: -p udp -j REJECT --reject-with icmp-port-unreachable

Si un escáner de puertos ve que algunos puertos están eliminando paquetes mientras que la mayoría los rechazan, puede asumir que los paquetes perdidos están en puertos que están abiertos pero ocultos.


3
2017-08-13 01:29



¿Qué sucede si abres unos cuantos puertos (es decir, 22, 25, 53, 80, 443) y luego elimitas todo lo demás? Ahora, si tengo MySQL, PostgreSQL, SQLite o Cassandra en ejecución ... el escáner no puede decirlo, ¿verdad? - Alexis Wilke
@AlexisWilke En ese caso, la única información adicional que le está dando al escáner de puertos es que tiene algún tipo de servidor de seguridad en su lugar con una política predeterminada DROP. - Raptor007


A pesar de las muchas respuestas correctas, solo mis dos centavos:

Aquí hay un breve PoC FW.IDS-DROP-vs-REJECT De mi parte al tema con respecto a las reglas para el sistema de prohibición (firewall, IDS, etc.).

Dentro de poco:

  • DROP se puede usar para los intrusos reincidentes, si se prohíben todos los puertos (por lo que parece que el servidor está en el lado del intruso)
  • REJECT --reject-with tcp-reset es la mejor opción para la prohibición de puertos múltiples, ya que parece comportarse como un puerto cerrado real
  • si algunos puertos están respondiendo (el intruso sabe que el host está vivo), DROP y REJECT (sin tcp-reset) le dará al intruso una "señal" de que algo está bloqueando (lo que podría estimularlo a continuar el "ataque" con la esperanza de proporcionar los datos necesarios en algún momento)

0
2017-09-20 16:49





Sí, usar DROP no tiene sentido. Utilice RECHAZAR.

Incluso cuando la regla dice "DROP", el sistema todavía responde a un SYN entrante con un TCP RST / ACK, que es el comportamiento predeterminado para los puertos sin servicios en ejecución. (tcpdump et al no registra esto).

Si se está ejecutando un servicio, el SYN se cumple con TCP SYN / ACK.

Debido a que el DROP no responde de manera normal con un TCP SYN / ACK, pero con un RST / ACK en su lugar, su regla DROP anunciará su firewall y los escáneres de puertos sabrán que usted está atacando algo y puede seguir atacándolo con la esperanza de atrapar tu cortafuegos.

Este es ahora nmap puede informar "filtrado" en lugar de "cerrado", por ejemplo:

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http
1111/tcp filtered lmsocialserver

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -D INPUT 1

Como tal, la única configuración de cortafuegos "invisible" es aquella en la que un dispositivo dedicado se encuentra entre sus dispositivos y solo reenvía puertos de forma selectiva.

Si realmente quiere meterse con los escáneres básicos, puede TARPIT las conexiones tcp, que establecen la Ventana TCP en 0 para que no se transfieran datos después de que se abra la conexión, ignorando las solicitudes para cerrar la conexión, lo que significa que el escáner tiene que esperar para que se produzca el tiempo de espera de la conexión, si quiere estar seguro. Pero es trivial para un atacante detectar esto y hacer que su tiempo de espera sea muy corto.

A fin de cuentas, probablemente lo mejor sea usar REJECT - o colocar un dispositivo dedicado de reenvío de puertos entre su servidor e Internet.

O simplemente ejecute servicios en sus máquinas con acceso a Internet que no requieran firewall.

En general, REJECT es el mejor para servidores web, ya que cualquier servicio que intente acceder a él (probablemente la mayoría de las veces, usted) recibirá una respuesta rápida y los usuarios u otros servicios no se quedarán esperando para saber si hay un corte de la red.


-3



Esta respuesta es incorrecta. Se puede demostrar fácilmente con tcpdump que la regla DROP hará que el sistema no envíe NINGUNA respuesta, como cabría esperar. Y su declaración "Para eliminar realmente un paquete, el sistema debe responder con un TCP RST / ACK" no tiene sentido, ya que responder algo obviamente no es "eliminar realmente un paquete". Si realmente "sueltas" un paquete, simplemente no respondes y esto es demostrablemente el efecto de la regla DROP. - Juliane Holzt
¿Podría proporcionar una fuente para la alegación de que DROP emitirá un SYN/ACK? Nunca vi esto en mis máquinas. - motobói
@Dagelf Su artículo dice "DROP (también conocido como DENY, BLACKHOLE) Prohibir que un paquete pase. No envíe ninguna respuesta". - JeanT
No envía la respuesta normal, pero envía una como se explica, independientemente. - Dagelf
El documento al que se vincula dice "GOTA ... No enviar respuesta"y, por lo que puedo ver, no respalda su afirmación de que DROP devuelve un SYN/ACK. Yo también nunca he visto este comportamiento en ninguna versión de iptables. Si tiene una fuente que respalda su reclamo, sería muy útil verlo; ciertamente, los volcados de paquetes que acabo de hacer no son compatibles con su reclamación. - MadHatter