La guía definitiva para proteger, fortalecer y mejorar el rendimiento del servidor web Nginx

¡Nginx significa poder!
¡Tecmint ama a Nginx!

La guía definitiva para proteger, fortalecer y mejorar el rendimiento del servidor web Nginx


 Consejos para el endurecimiento de la seguridad de Nginx  Consejos para el endurecimiento de la seguridad de Nginx Consejos para el endurecimiento de la seguridad de Nginx

Basado en las cosas maravillosas que ha escuchado sobre Nginx , tal vez decidiste intentarlo. Es posible que le haya gustado tanto que esté considerando reemplazar sus instalaciones de Apache con Nginx después de leer algunos de los artículos sobre el tema que hemos publicado en este sitio.

Si es así, estoy seguro de que lo hará dé la bienvenida a esta guía con los brazos abiertos, ya que vamos a cubrir 12 consejos para aumentar la seguridad de sus servidores Nginx. (que van desde mantener Nginx actualizado hasta usar TLS y redireccionar HTTP a HTTPS), y notarás que algunos de ellos son muy similares a los que harías con Apache.

No te pierdas.

13 Consejos de seguridad y refuerzo del servidor web Apache

25 trucos de Apache Htaccess para proteger el servidor web Apache

Pruebas de Nginx Medio ambiente

Lo haremos utilice el siguiente entorno en esta guía:

  1. Debian GNU/Linux 8.1 (jessie).
  2. Dirección IP: 192.168.0.25. ( tecmintlovesnginx.com. y 192.168.0.26 ( nginxmeanspower.com. , como se describe en la sección de hosts virtuales basados ​​en IP en
    1. “Cómo configurar y hosts virtuales basados ​​en IP (bloques de servidor) con Nginx “
  3. Versión de Nginx: nginx/1.6.2.
  4. Para su conveniencia, aquí está el archivo de configuración final (enlace Pastebin).

Con eso en mente, comencemos.

SUGERENCIA # 1: Mantenga Nginx actualizado

freestar .config.enabled_slots.push

En el momento de escribir este artículo, las últimas versiones de Nginx en CentOS (en EPEL. y los repositorios de Debian son 1.6.3. y 1.6.2-5. respectivamente.

No se pierda: Instale la última versión estable de Nginx desde los repositorios y la fuente

Aunque instale El software de los repositorios es más fácil que compilar el programa a partir del código fuente, esta última opción tiene dos ventajas: 1) le permite construir módulos adicionales en Nginx (como mod_security), y 2) siempre proporcionará una versión más nueva que la repositorios ( 1.9.9. a partir de hoy). Las notas de la versión siempre están disponibles en el sitio web de Nginx.

No Señorita.

Proteja Apache contra ataques de fuerza bruta y DDoS usando Mod_Security y Mod_Evasive

SUGERENCIA # 2: Elimine módulos innecesarios en Nginx

Para eliminar explícitamente módulos de Nginx mientras instalando desde la fuente, haga:

# ./configure–without-module1–without-module2–without-module3

Por ejemplo:

# ./configure–without-http_dav_module-withouthttp_spdy_module

Como probablemente adivinará, eliminar módulos de una instalación anterior de Nginx desde la fuente requiere realizar la compilación nuevamente.

Una advertencia. Las directivas de configuración son proporcionadas por módulos. ¡Asegúrese de no deshabilitar un módulo que contenga una directiva que necesitará más adelante! Debe consultar los documentos de nginx para ver la lista de directivas disponibles en cada módulo antes de tomar una decisión sobre la deshabilitación. módulos.

SUGERENCIA # 3: Deshabilitar la directiva server_tokens en Nginx

La directiva server_tokens le dice a Nginx que muestre su cu versión actual en las páginas de error. Esto no es deseable ya que no desea compartir esa información con el mundo para evitar ataques en su servidor web causados ​​por vulnerabilidades conocidas en esa versión específica.

Para deshabilitar la directiva server_tokens, establezca if en dentro de un bloque de servidor:

servidor escuchar 192.168.0.25:80; server_tokens off; nombre_servidor tecmintlovesnginx.com www.tecmintlovesnginx.com; access_log/var/www/logs/tecmintlovesnginx.access.log; error_log/var/www/logs/tecmintlovesnginx.error.log error; root/var/www/tecmintlovesnginx.com/public_html; index index.html index.htm;

Reinicie nginx y verifique los cambios:

Ocultar información de la versión de Nginx  Ocultar información de la versión de Nginx Ocultar información de la versión de Nginx

SUGERENCIA # 4 : Denegar agentes de usuario HTTP en Nginx

Un agente de usuario HTTP es un software que se utiliza para la negociación de contenido contra un servidor web. Esto también incluye robots y rastreadores de malware que pueden terminar afectando el rendimiento de su servidor web al desperdiciar recursos del sistema.

Para mantener más fácilmente la lista de agentes de usuario no deseados, cree un archivo (/etc/nginx/blockuseragents.rules por ejemplo) con el siguiente contenido:

map $ http_user_agent $ blockedagent predeterminado 0; ~ * malicioso 1; ~ * bot 1; ~ * puerta trasera 1; ~ * rastreador 1; ~ * bandido 1;

A continuación, coloque la siguiente línea antes de la definición del bloque del servidor:

include/etc/nginx/blockuseragents.rules;

Y una declaración if para devolver una respuesta 403 si la cadena del agente de usuario está en la lista negra definida anteriormente:

 Deshabilitar agentes de usuario en Nginx  Deshabilitar agentes de usuario en Nginx Deshabilitar agentes de usuario en Nginx

Reinicie nginx, y todos los agentes de usuario cuya cadena coincida con la anterior no podrán acceder a su servidor web. Reemplace 192.168.0.25. con la IP de su servidor y no dude en elegir una cadena diferente para el cambio–user-agent de wget.

# wget http://192.168.0.25/index.html # wget–user-agent “Soy un bandido jaja” http://192.168.0.25/index.html  Bloquear agentes de usuario en Nginx Bloque Agentes de usuario en Nginx Bloquear agentes de usuario en Nginx

SUGERENCIA # 5: Deshabilitar métodos HTTP no deseados en Nginx

También conocidos como verbos, métodos HTTP Indique la acción que desea tomar en un recurso servido por Nginx. Para aplicaciones y sitios web comunes, solo debe permitir GET. POST. y HEAD. y deshabilitar todos los demás.

Para hacerlo, coloque las siguientes líneas dentro de un bloque de servidor. Una respuesta HTTP 444. significa una respuesta vacía y se usa a menudo en Nginx para engañar a los ataques de malware:

if ($ request_method! ~ ^ (GET | HEAD | POST) $) return 444;

Para probar, use curl. para enviar una solicitud DELETE. y compare el resultado con cuando envía un GET. normal:

# curl-X DELETE http://192.168.0.25/index.html # curl-X POST http://192.168.0.25/index.html  Deshabilitar solicitudes HTTP no deseadas en Nginx Deshabilitar solicitudes HTTP no deseadas en Nginx Deshabilitar solicitudes HTTP no deseadas en Nginx

SUGERENCIA # 6: Establecer limitaciones de tamaño de búfer en Nginx

Para evitar ataques de desbordamiento de búfer contra su Nginx servidor web, configure las siguientes directivas en un archivo separado (creat e un nuevo archivo llamado/etc/nginx/conf.d/buffer.conf, por ejemplo):

client_body_buffer_size 1k; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;

Las directivas anteriores garantizarán que las solicitudes realizadas a su servidor web no provoquen un desbordamiento del búfer en su sistema. Una vez más, consulte los documentos para obtener más detalles sobre lo que hace cada uno de ellos.

Luego agregue una directiva include en el archivo de configuración:

include/etc/nginx/conf.d/*. conf;  Establecer tamaño de búfer en Nginx  Establecer tamaño de búfer en Nginx Establecer tamaño de búfer en Nginx

SUGERENCIA # 7: Limite el número de conexiones por IP en Nginx

Para limitar las conexiones por IP, utilice limit_conn_zone (en un contexto http o al menos fuera del bloque del servidor) y limit_conn (en un http, bloque de servidor o ubicación context).

Sin embargo, tenga en cuenta que no se cuentan todas las conexiones, sino solo aquellas que tienen una solicitud procesada por el servidor y se ha leído todo el encabezado de la solicitud.

Por ejemplo, establezcamos el número máximo de conexiones ciones a 1 (sí, es una exageración, pero funcionará bien en este caso) en una zona llamada addr (puede configurar esto con el nombre que desee):

limit_conn_zone $ binary_remote_addr zone = addr: 5 m; limit_conn addr 1;  Número límite de HTTP Solicitudes en Nginx  Limitar el número de solicitudes HTTP en Nginx Limitar el número de HTTP Solicitudes en Nginx

Una prueba simple con Apache Benchmark (Realizar carga de Nginx) donde se realizan 10 conexiones en total con 2 solicitudes simultáneas nos ayudará a demostrar nuestro punto:

# ab-n 10-c 2 http://192.168.0.25/index.html

Consulte el siguiente consejo para obtener más detalles.

SUGERENCIA # 8: Configure los registros del monitor para Nginx

Una vez que haya realizado la prueba descrita en el consejo anterior, verifique el registro de errores que se define para el servidor ver bloque:

 Ancho de registro de errores de Nginx  Registro de errores de Nginx Registro de errores de Nginx

Es posible que desee utilizar grep. para filtrar los registros de solicitudes fallidas realizadas a la zona agregar. r definida en TIP # 7.

# grep addr/var/www/logs/tecmintlovesnginx.error.log–color = auto  Nginx Log Monitoring Nginx Log Monitoring Nginx Log Monitoring

Asimismo, puede filtrar el registro de acceso para obtener información de interés, como:

  1. Cliente IP
  2. Tipo de navegador
  3. Tipo de solicitud HTTP
  4. Recurso solicitado
  5. Bloque del servidor que responde a la solicitud (útil si varios hosts virtuales están iniciando sesión el mismo archivo).

Y tome las medidas adecuadas si detecta alguna actividad inusual o no deseada.

SUGERENCIA # 9: Evite el enlace directo de imágenes en Nginx

El enlace directo de imágenes ocurre cuando una persona muestra en otro sitio una imagen alojada en el suyo. Esto provoca un aumento en el uso de ancho de banda (por el que paga) mientras que la otra persona muestra felizmente la imagen como si fuera de su propiedad. En otras palabras, es una pérdida doble para usted.

Por ejemplo, digamos que tiene un subdirectorio llamado img dentro de su bloque de servidor donde almacena todas las imágenes utilizadas en ese host virtual. Para evitar que otros sitios utilicen sus imágenes, deberá insertar el siguiente bloque de ubicación dentro de su definición de host virtual:

location/img/valid_referers ninguno bloqueado 192.168.0.25; if ($ invalid_referer) return 403;

Luego, modifique el archivo index.html en cada host virtual de la siguiente manera:

192.168.0.26

192.168.0.25

Nginx significa poder

¡Nginx significa poder!