📒  Confianza y seguridad

Cómo prevenir un ataque ddos en Nginx

Como prevenir ataques ddosen nginx, aprende a bloquear ciertos Ataques DDoS con el servidor Web Nginx con esta configuración de protección ddos nginx, esto ayudará a tu servidor a prevenir y bloquear ciertos Ataques DDoS comunes, con la configuración y hardening de Nginx puedes bloquear algunos ataques en tu servidor.

Alexhost ofrece Protección Anti-DDoS gratuita contra ciertos ataques, puede utilizar nuestros Servidores VPS o Servidores Dedicados, ofrecemos Protección Anti-DDoS gratuita, sin embargo la capacidad de mitigación, métodos, filtrado será diferente basado en la ubicación que elija.

Requerimientos:
Nginx (necesita tener Nginx instalado en su servidor actual)
Algunos conocimientos (se requiere saber utilizar comandos básicos de Linux y cómo acceder a algunos archivos de Nginx, se esperan conocimientos técnicos)
Servidor VPS o Servidor Dedicado (puedes usar una VM en tu localhost)
Protección DDoS (de su proveedor de alojamiento es necesario para poder mitigar los ataques DDoS más complejos)
Linux (cualquier distribución que Nginx se puede instalar)
Nginx (es posible que tenga que leer su documentación Nginx con el fin de probar y comprobar si sigue siendo fiable)

Limitaciones: Este tutorial no es una “prueba de balas” para proteger contra todos los ataques DDoS, esto probablemente limitará el ataque mediante el bloqueo de ciertos tipos de ataques comunes y ayudar a su servidor para estar en línea. Hay algunas limitaciones contra algunos ataques DDoS, necesitará que su proveedor de alojamiento ofrezca algún tipo de protección DDoS con el fin de bloquear y prevenir, esta configuración no puede proteger contra todos los ataques contra su servidor. Esta configuración es para prevenir y bloquear algunos ataques, pero no bloqueará todos los ataques sin Protección DDoS de su Hosting.

Advertencia: Alexhost no le recomienda utilizar esta configuración en su servidor de producción, le recomendamos probarlo antes de hacer nada. Alexhost no se hace responsable de cualquier tipo de problema que esto pueda crear o no. Practique una buena seguridad del servidor, antes de implementar cualquier cosa haga una copia de seguridad de todo en caso de que necesite restaurar. Por favor, lea la documentación de Nginx para la protección DDoS para entender cómo funciona.

Prevenir ataques DDoS por endurecimiento Nginx

La configuración de Nginx para la protección DDoS y el endurecimiento contra las capas de ataque comunes implica la implementación de diversas estrategias para mitigar y prevenir los ataques. Aquí está una guía sobre cómo configurar Nginx para mejorar la seguridad y aprender Cómo prevenir el ataque DDoS en Nginx por el endurecimiento de su servidor web:

  1. Actualizar Nginx: Asegúrese de que está utilizando la última versión estable de Nginx para beneficiarse de los últimos parches de seguridad y mejoras.
  2. Limite las conexiones: Utilice el módulo limit_conn para restringir el número de conexiones desde una única dirección IP. Esto ayuda a evitar que los ataques DDoS saturen su servidor con demasiadas conexiones simultáneas.

http {
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s;

    servidor {
        limit_req zone=req_limit_per_ip burst=5;
        # Otras configuraciones del servidor...
    }
}

Lista blanca/blanca de IPs: Utilice las directivas allow y deny para poner en la lista blanca las direcciones IP de confianza y bloquear las maliciosas.
nginx

http {
    # Lista blanca de direcciones IP de confianza
    allow 192.168.1.0/24;
    deny all;
    # Otras configuraciones del servidor...
}

Implemente un cortafuegos de aplicaciones web (WAF): Utilice módulos de terceros como ModSecurity con Nginx para detectar y bloquear el tráfico HTTP malicioso.

Habilite HTTPS: cifre la comunicación entre los clientes y el servidor mediante HTTPS para evitar la interceptación de datos y los ataques de intermediario.

Desactivar módulos no utilizados: Deshabilite los módulos de Nginx innecesarios para reducir la superficie de ataque y mejorar el rendimiento.
nginx

./configure --without-http_autoindex_module --without-http_ssi_module
  1. Ajuste de la configuración de Nginx: Optimice los parámetros de configuración de Nginx, como los procesos de los trabajadores, las conexiones de los trabajadores y los tiempos de espera, basándose en las capacidades de hardware de su servidor y en el tráfico esperado.
  2. Monitorización y registro: Supervise regularmente los registros del servidor en busca de actividad sospechosa y configure sistemas de alerta para notificar a los administradores posibles ataques.
  3. Implantar servicios de protección DDoS: Considere el uso de servicios o dispositivos especializados de protección DDoS frente a Nginx, como Cloudflare, AWS Shield o Akamai.
  4. Copias de seguridad periódicas: Asegúrese de realizar copias de seguridad periódicas de los datos críticos para minimizar el impacto de los ataques exitosos.

Recuerde que la seguridad es un proceso continuo, y es crucial mantenerse actualizado con las últimas prácticas y amenazas de seguridad para proteger eficazmente su servidor contra posibles ataques.

Configuración de la protección ddos de Nginx:

#Define una zona para rastrear conexiones desde cada IP

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
    # Definir una zona para realizar un seguimiento de las solicitudes de cada IP
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
    servidor {
        listen 80;
        nombre_servidor ejemplo.com;
        # Limitar solicitudes
        limit_req zone=limite_peticiones_por_ip burst=20;
        # Limitar el número máximo de conexiones desde una única IP
        limit_conn conn_limit_per_ip 20;
        # Denegar peticiones con cuerpos de petición grandes para mitigar algunos tipos de ataques
        client_body_buffer_size 1k;
        client_header_buffer_size 1k;
        client_max_body_size 1k;
        large_client_header_buffers 2 1k;
        # Activar la compresión Gzip para ahorrar ancho de banda
        gzip on;
        gzip_comp_level 5;
        gzip_min_length 256;
        gzip_proxied any;
        gzip_vary on;
        # Añadir cabeceras de seguridad para mejorar la seguridad
        add_header X-Content-Type-Options "nosniff";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Frame-Options "SAMEORIGIN";
        add_header Referrer-Policy "same-origin";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" siempre;
        # Bloquear agentes de usuario vulnerables comunes
        if ($http_user_agent ~* (wget|curl) ) {
            return 403;
        }
        # Bloquear el acceso a archivos ocultos
        location ~ /\. {
            deny all;
        }
        # Bloquear el acceso a ciertos tipos de archivos
        location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php_ {
            denegar todo;
            return 403;
        }
        # Lista blanca de su IP para acceso administrativo
        location /admin {
            allow tu_ip_admin;
            deny all;
        }
        # Denegar el acceso a ciertos directorios
        location ~ /(sistema|vendedor) {
            deny all;
            return 403;
        }
        # Proxy pass requests to your application server
        location / {
            proxy_pass http://your_backend_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Esta configuración hace lo siguiente:

  1. Limitación de velocidad: Limita el número de peticiones de cada dirección IP a 10 peticiones por segundo con una ráfaga de 20 peticiones.
  2. Limitación de conexiones: Limita el número máximo de conexiones desde cada dirección IP a 20.
  3. Limitación del tamaño del cuerpo de la solicitud: Limita el tamaño de los cuerpos de solicitud para mitigar los ataques que envían cuerpos de solicitud grandes.
  4. Compresión gzip: Activa la compresión gzip para ahorrar ancho de banda.
  5. Cabeceras de seguridad: Añade cabeceras de seguridad para mejorar la seguridad.
  6. Bloqueo de agentes de usuario vulnerables: Bloquea las peticiones de los agentes de usuario vulnerables más comunes.
  7. Bloqueo de archivos ocultos: Bloquea el acceso a archivos y directorios ocultos.
  8. Lista blanca de acceso al administrador: Permite el acceso al área de administración sólo desde su dirección IP.
  9. Denegación de acceso a determinados directorios: Bloquea el acceso a directorios sensibles como sistema y proveedor.
  10. Paso de proxy: Reenvía las peticiones a su servidor de aplicaciones.

Asegúrese de personalizar la configuración según sus requisitos específicos, como nombres de dominio, direcciones de servidor backend y direcciones IP administrativas. Además, supervise regularmente los registros de su servidor y ajuste las configuraciones según sea necesario para adaptarse a la evolución de las amenazas.

La configuración proporcionada está pensada para ser añadida al archivo nginx.conf o incluida desde archivos de configuración independientes. Aquí tienes una guía paso a paso sobre dónde añadir la configuración:

  1. Localice el archivonginx.conf: Dependiendo de tu instalación de Nginx, el archivo nginx.conf puede estar ubicado en diferentes directorios. Algunas ubicaciones comunes son /etc/nginx/nginx.conf, /usr/local/nginx/conf/nginx.conf o /etc/nginx/sites-available/default.
  2. Abre el archivonginx.conf: Puedes abrir el archivo utilizando un editor de texto o un editor de texto de línea de comandos como nano, vim o emacs.
  3. Añade la configuración dentro del bloquehttp: Dentro del bloque http, que define la configuración del servidor HTTP, añadirá la configuración proporcionada. Normalmente, encontrarás el bloque http cerca de la parte superior del archivo nginx.conf.
  4. Pega la configuración proporcionada: Pega toda la configuración proporcionada anteriormente dentro del bloque http. Asegúrate de sustituir los valores de los marcadores de posición como ejemplo.com, tu_ip_admin y tu_servidor_backend por los valores reales.
  5. Guarde y salga del archivo: Después de añadir la configuración, guarda el archivo nginx.conf y sal del editor de texto.
  6. Prueba la configuración de Nginx: Antes de reiniciar Nginx, es una buena práctica para probar la configuración de los errores de sintaxis.
  7. Puedes hacerlo ejecutando el siguiente comando:
    nginx -t

Si no hay errores de sintaxis, verás un mensaje indicando que la prueba del archivo de configuración se ha realizado correctamente.

Reinicia Nginx: Por último, reinicia Nginx para aplicar los cambios. Puedes hacerlo con el siguiente comando:
sudo service nginx restart

  1. Si no estás usando un sistema con systemd, puedes usar diferentes comandos para reiniciar Nginx.

Siguiendo estos pasos, añadirás la configuración proporcionada a tu servidor Nginx, mejorando su seguridad con protección DDoS y otras medidas de seguridad, este tutorial te ayudará acómo prevenir ataques ddos en nginx configurando Nginx.