LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Basado en las cosas maravillosas que ha escuchado sobre Nginx , quizás haya decidido probarlo. 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 recibirá esta guía con los brazos abiertos, ya que cubriremos 12 consejos para aumentar la seguridad de sus servidores Nginx (que van desde mantener Nginx actualizado hasta usar TLS y redirigir HTTP a HTTPS), y notará que algunos de ellos son muy similares a lo que haría con Apache.

​CONSEJO #1: Mantenga Nginx actualizado

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

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

CONSEJO n.º 2: elimine los módulos innecesarios en Nginx

Para eliminar módulos de Nginx explícitamente durante la instalación desde la fuente, haga lo siguiente:

# ./configure --without módulo1 --without módulo2 --without módulo3

Por ejemplo:

# ./configure  --without http_dav_module --without http_spdy_module 

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

PRECAUCIÓN : las directivas de configuración las proporcionan los 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 desactivación de módulos.

CONSEJO n.º 3: deshabilite la directiva server_tokens en Nginx

La directiva server_tokens le dice a Nginx que muestre su 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 a su servidor web causados ​​por vulnerabilidades conocidas en esa versión específica.

Para deshabilitar la server_tokensdirectiva, configure si está desactivado dentro de un bloque de servidor:

server {
    listen       192.168.0.25:80;
    server_tokens        off;
    server_name  lxpartylovesnginx.com www.lxpartylovesnginx.com;
    access_log  /var/www/logs/lxpartylovesnginx.access.log;
    error_log  /var/www/logs/lxpartylovesnginx.error.log error;
        root   /var/www/lxpartylovesnginx.com/public_html;
        index  index.html index.htm;
}

Reinicie nginx y verifique los cambios:

Ocultar información de la versión de Nginx

CONSEJO #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 con un servidor web. Esto también incluye bots 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.rulespor ejemplo) con los siguientes contenidos:

map $http_user_agent $blockedagent {
        default         0;
        ~*malicious     1;
        ~*bot           1;
        ~*backdoor      1;
        ~*crawler       1;
        ~*bandit        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

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 siéntase libre de elegir una cadena diferente para el --user-agentcambio de wget :

# wget http://192.168.0.25/index.html
# wget --user-agent "I am a bandit haha" http://192.168.0.25/index.html 

Bloquear agentes de usuario en Nginx

​CONSEJO #5: Deshabilite los métodos HTTP no deseados en Nginx

También conocidos como verbos, los métodos HTTP indican la acción que se desea realizar en un recurso servido por Nginx. Para sitios web y aplicaciones 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 la salida 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

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

Para evitar ataques de desbordamiento de búfer contra su servidor web Nginx, configure las siguientes directivas en un archivo separado (cree 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 asegurarán que las solicitudes realizadas a su servidor web no causen un desbordamiento de 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 de inclusión en el archivo de configuración:

include /etc/nginx/conf.d/*.conf;

Establecer el tamaño del búfer en Nginx

​CONSEJO #7: Limite el Número de Conexiones por IP en Nginx

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

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 1(sí, es una exageración, pero funcionará bien en este caso) en una zona llamada addr (puede establecer esto con el nombre que desee):

limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 1;

Limite el número de solicitudes HTTP en Nginx

Una prueba simple con Apache Benchmark (Realizar Nginx Load) donde 10se realizan conexiones totales con 2solicitudes 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.

CONSEJO n.º 8: Configuración de 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 bloque del servidor:

Registro de errores de Nginx

Es posible que desee utilizar grep para filtrar los registros de solicitudes fallidas realizadas en la zona add r definida en el TIP #7 :

# grep addr /var/www/logs/lxpartylovesnginx.error.log --color=auto

Supervisión de registros de Nginx

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

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

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

CONSEJO n.º 9: Evitar el hotlinking de imágenes en Nginx

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

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

location /img/ {
  valid_referers none blocked 192.168.0.25;
   if ($invalid_referer) {
     return   403;
   }
}

Luego modifique el index.htmlarchivo en cada host virtual de la siguiente manera:

192.168.0.26

192.168.0.25

<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>Nginx significa poder</title>
</head>
<body>
<h1>¡Nginx significa poder!</h1>
<img src=”http://192.168.0.25/img/nginx.png” />
</cuerpo>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>lxparty ama a Nginx</title>
</head>
<body>
<h1>¡lxparty ama a Nginx!</h1>
<img src=”img/nginx.png” />
</cuerpo>
</html>

Ahora navegue a cada sitio y, como puede ver, la imagen se muestra correctamente en 192.168.0.25 pero se reemplaza por una respuesta 403 en 192.168.0.26 :

Deshabilitar la vinculación activa de imágenes de Nginx

Tenga en cuenta que este consejo depende de que el navegador remoto envíe el campo Referer.

CONSEJO n.° 10: deshabilite SSL y solo habilite TLS en Nginx

Siempre que sea posible, haz lo que sea necesario para evitar SSL en cualquiera de sus versiones y usa TLS en su lugar. Lo siguiente ssl_protocolsdebe colocarse en un contexto de servidor o http en su archivo de host virtual o es un archivo separado a través de una directiva de inclusión (algunas personas usan un archivo llamado ssl.conf, pero depende totalmente de usted):

ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

Por ejemplo:

Deshabilite SSL y habilite TLS en Nginx

​CONSEJO #11: Crear Certificados en Nginx

En primer lugar, genere una clave y un certificado. Siéntase libre de usar un tipo diferente de encriptación si lo desea:

# openssl genrsa -aes256 -out lxpartylovesnginx.key 1024
# openssl req -new -key lxpartylovesnginx.key -out lxpartylovesnginx.csr
# cp lxpartylovesnginx.key lxpartylovesnginx.key.org
# openssl rsa -in lxpartylovesnginx.key.org -out lxpartylovesnginx.key
# openssl x509 -req -days 365 -in lxpartylovesnginx.csr -signkey lxpartylovesnginx.key -out lxpartylovesnginx.crt

Luego agregue las siguientes líneas dentro de un bloque de servidor separado en preparación para el siguiente consejo ( http --> httpsredireccionamiento) y mueva las directivas relacionadas con SSL al nuevo bloque también:

server {
    listen 192.168.0.25:443 ssl;
    server_tokens off;
    server_name  lxpartylovesnginx.com www.lxpartylovesnginx.com;
    root   /var/www/lxpartylovesnginx.com/public_html;
    ssl_certificate /etc/nginx/sites-enabled/certs/lxpartylovesnginx.crt;
    ssl_certificate_key /etc/nginx/sites-enabled/certs/lxpartylovesnginx.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
}

En el siguiente consejo, verificaremos cómo nuestro sitio ahora usa un certificado autofirmado y TLS.

​CONSEJO #12: Redirigir el tráfico HTTP a HTTPS en Nginx

Agregue la siguiente línea al primer bloque del servidor:

return 301 https://$server_name$request_uri;

Redirigir HTTP a HTTPS en Nginx

La directiva anterior devolverá una respuesta 301 (Movido permanentemente), que se usa para la redirección de URL permanente cada vez que se realiza una solicitud al puerto 80 de su servidor virtual, y redirigirá la solicitud al bloque de servidor que agregamos en el consejo anterior.

La siguiente imagen muestra la redirección y confirma el hecho de que estamos usando TLS 1.2 y AES-256 para el cifrado:

Verificar el cifrado TLS Nginx

Resumen

En este artículo, hemos compartido algunos consejos para asegurar su servidor web Nginx. Nos encantaría saber lo que piensa y, si tiene otros consejos que le gustaría compartir con el resto de la comunidad, no dude en hacérnoslo saber enviándonos una nota utilizando el formulario de comentarios a continuación.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías