Respuestas:
Como regla general, use RECHAZAR cuando desee que el otro extremo sepa que el puerto es inalcanzable 'use DROP para conexiones a hosts que no desea que la gente vea.
Por lo general, todas las reglas para las conexiones dentro de su LAN deben usar RECHAZAR. Para Internet, con la excepción de ident en ciertos servidores, las conexiones de Internet generalmente se CAÍEN.
El uso de DROP hace que la conexión parezca estar en una dirección IP desocupada. Los escáneres pueden optar por no continuar escaneando las direcciones que parecen desocupadas. Dado que NAT se puede utilizar 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.
Ident se debe pasar o rechazar en cualquier dirección que proporcione el servicio SMTP. Sin embargo, el uso de búsquedas de Ident por parte de SMTP sirve ha caído en desuso. Existen protocolos de chat que también se basan en un servicio de identificación en funcionamiento.
EDITAR: cuando se utilizan reglas DROP: - Los paquetes UDP se descartarán y el comportamiento será el mismo que el de conectarse a un puerto no controlado 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 utilizan las reglas REJECT, se envía un paquete ICMP que indica que el puerto no está disponible.
La diferencia es que el objetivo REJECT 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 identificación. Si usa REJECT, entonces los clientes no necesitan esperar el tiempo de espera.
Más sobre esto: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
Por lo general, desea ignorar las sondas de los atacantes a ciertos puertos, con lo que quiero decir que no desea devolver la "conexión rechazada". 'Conexión rechazada' significa: 'hay un servidor aquí', y posiblemente regala más información, mientras que dejar caer 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 principales razones para usar DROP en lugar de RECHAZAR.
Veo muchas respuestas conflictivas aquí y dado que este es el primer artículo en Google con las palabras clave correctas; Aquí está la explicación correcta.
Es simple:
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 al suelo, es decir, no hace nada con el paquete.
RECHAZAR difiere de DROP en que envía un paquete de vuelta, pero la respuesta es como si un servidor estuviera ubicado en la IP, pero no tuviera el puerto en estado de escucha. IPtables enviará un RST / ACK en caso de TCP o con UDP un puerto de destino ICMP inalcanzable.
Si está tratando de ocultar la existencia de su máquina por completo, -j DROP
es apropiado. Por ejemplo, puede usar esto para implementar una lista negra.
Si está tratando de ocultar el hecho de que un puerto está abierto, debe imitar el comportamiento que ocurriría si el puerto no estuviera abierto:
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
Si un escáner de puertos ve que algunos puertos descartan paquetes mientras que la mayoría los rechaza, puede suponer que los paquetes descartados están en puertos abiertos pero ocultos.
A pesar de muchas respuestas correctas, solo mis dos centavos:
Aquí hay un breve PoC FW.IDS-DROP-vs-RECHAZAR de mí al tema con respecto a las reglas para el sistema de prohibición (firewall, IDS, etc.).
Dentro de poco:
DROP
puede usarse para intrusos reincidentes, si se prohíbe todos los puertos (por lo que parece que el servidor está inactivo en el lado del intruso)REJECT --reject-with tcp-reset
es la mejor opción para la prohibición de múltiples puertos, ya que parece comportarse como un verdadero puerto cerradoDROP
y REJECT
(sin tcp-reset
) le dará al intruso una "señal" de que hay algo bloqueando (para que pueda estimularlo a continuar el "ataque" con la esperanza de proporcionar los datos requeridos en algún momento)Sí, usar DROP no tiene sentido. Use RECHAZAR.
Incluso cuando la regla dice "DROP", el sistema aún 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 registran 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, sino con un RST / ACK, su regla DROP anunciará su firewall y los escáneres de puertos sabrán que está cortando un firewall y podrían seguir martillándolo con la esperanza de atrapar tu firewall
Esto 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 firewall "invisible" es aquella en la que un dispositivo dedicado se ubica entre sus dispositivos y solo reenvía puertos selectivamente.
Si realmente quiere meterse con los escáneres básicos, puede TARCP conexiones tcp, que establece la ventana TCP en 0 para que no se puedan transferir datos después de abrir la conexión, ignorando las solicitudes para cerrar la conexión, lo que significa que el escáner tiene que esperar para que ocurra 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 sea mejor usar REJECT o colocar un dispositivo de reenvío de puertos dedicado entre su servidor e Internet.
O simplemente ejecutando servicios en sus máquinas con conexión a Internet que no requieren firewall.
En general, RECHAZAR es el mejor para los servidores web, ya que cualquier servicio que intente acceder a él (probablemente la mayoría de las veces, usted) obtendrá rápidamente una respuesta y los usuarios u otros servicios no se quedarán esperando preguntándose si hay una interrupción de la red.
DROP
emitirá un SYN/ACK
? Nunca vi esto en mis máquinas.
DROP
devuelve a SYN/ACK
. Yo tampoco he visto este comportamiento bajo ninguna versión de iptables
. Si tiene una fuente que respalde su reclamo, sería más útil verla; ciertamente, los volcados de paquetes que acabo de hacer no respaldan su reclamo.