Realice solicitudes nginx para dejar de lado el cliente a propósito

2

Quiero evitar que nginx procese las solicitudes y oculte el hecho de que incluso existe en una determinada IP al no responder en absoluto. Las solicitudes se deben descartar y el navegador del cliente debe cerrarse por sí solo. ¿Es eso posible?

Supongo que un proxy_pass podría ayudar, pero no estoy seguro de que solo eso lo haga.

Podría configurar un return 50x; , pero eso revelaría un servidor en ejecución.

    
pregunta berbt 04.03.2016 - 11:08
fuente

2 respuestas

6
  

Haga que las solicitudes de eliminación de nginx se agoten a propósito del cliente

No es posible descartar solicitudes HTTP para ocultar el servidor, sin importar si está utilizando nginx u otro servidor. La solicitud HTTP solo se enviará después de establecer la conexión TCP. Esta conexión solo se puede cerrar con o sin respuesta. También puede mantenerlo abierto para que el navegador agote el tiempo de espera, pero cada conexión abierta necesita recursos en el servidor.

Solo puede ocultar el servidor para clientes en función de la IP de origen, no del contenido de la solicitud HTTP (es decir, la URL específica). Pero esto no se haría en el servidor web sino en el servidor de seguridad (es decir, iptables, ipfw, pf o lo que sea que tenga).

Si su intención es molestar a los bots típicos que prueban posibles explotaciones, entonces puede intentarlo con un redireccionamiento a una IP o puerto no existente. Cualquier acceso a este puerto podría ser eliminado por el firewall para que el bot se agote. Hago esto en mi sitio y, según mi experiencia, esto ralentizará los bots porque la mayoría con mucho gusto seguirán tales redirecciones.

    
respondido por el Steffen Ullrich 04.03.2016 - 11:16
fuente
1

En los servidores que solo necesitan acceso limitado, simplemente uso iptables para restringir el acceso a las direcciones IP que tienen permiso para ver el sitio. Las demás direcciones IP se comportarán exactamente como usted desea, con un tiempo de espera como si no hubiera nada allí.

Para cada (rango de) direcciones IP permitidas, defina y ejecute:

# /sbin/iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT

(reemplazando $ip con la IP deseada (rango))

Para IPv6 puedes hacer lo mismo, excepto ejecutar /sbin/ip6tables .

Luego suelta todo lo demás:

# /sbin/iptables -P INPUT DROP
# /sbin/ip6tables -P INPUT DROP

Asegúrese de permitir SSH desde su IP también, por supuesto, o se bloqueará si la máquina es remota.

También recuerda que, de forma predeterminada, estas reglas no sobreviven a un reinicio. El lugar donde se guardan las reglas difiere incluso entre las distribuciones de Linux, pero en Debian yo uso:

# /sbin/iptables-save > /etc/iptables/rules.v4
# /sbin/ip6tables-save > /etc/iptables/rules.v6
    
respondido por el Mark Koek 04.03.2016 - 11:24
fuente

Lea otras preguntas en las etiquetas