Nginx Prevent Ddos Attack Featured

Cómo prevenir un ataque DDoS con Nginx

Los ataques de denegación de servicio distribuido o “DDoS” secuestran los recursos de un servidor a través de tácticas de comunicación digital abusivas. Este tipo de ataques son la incursión organizada del mundo informático. Numerosas acciones anti-like molestas se combinan para crear una amenaza lo suficientemente formidable como para detener a un servidor experimentado en seco. Lo peor de todo es que existen múltiples medios para librar una guerra de guerrillas en la web contra servidores desprevenidos. Afortunadamente, los servidores se pueden configurar para defenderse.

Nginx, un sistema de servidor muy popular para máquinas Unix, viene con suficiente funcionalidad integrada para limitar en gran medida la efectividad de los ataques DDoS.

Aquí hay algunas opciones efectivas para manejar tales amenazas en un servidor con tecnología Nginx:

Haga una copia de seguridad de su archivo de configuración

Antes de cambiar cualquier configuración, asegúrese de hacer una copia de seguridad rápida de la configuración de su servidor. El siguiente comando funciona para esto:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original

Configuración de copia de Nginx

Una vez hecho esto, estás listo para seguir adelante.

Comprobación del tráfico

Vigilar el tráfico de su servidor facilita la optimización de la seguridad y la implementación de tácticas adicionales en el futuro. Nginx tiene un módulo hecho específicamente para esto.

Configurar una página de estado

Nginx generalmente viene con un módulo llamado «estado de código auxiliar» (http_stub_status_module) que permite que este tipo de funcionalidad se integre en su entorno de servidor con bastante facilidad. Primero, verifíquelo usando el siguiente comando:

Módulo de búsqueda de Nginx

O canalice lo anterior a grep para encontrarlo más rápido:

nginx -V 2>&1 | grep -o with-http_stub_status_module

Módulo Nginx Grep

Si su salida se parece a la salida anterior, está listo para comenzar; de lo contrario, deberá reinstalar o volver a compilar su instalación de Nginx con el módulo incluido.

Configurar una página de estado que pueda verificar es simple, pero también deberá limitar el acceso a ella al mínimo (su máquina) para mantenerla segura. Comience abriendo el archivo de configuración principal de su servidor que se encuentra en «/etc/nginx/nginx.conf».

Archivo de configuración de Nginx

Ábralo y agregue el siguiente código a la «directiva http» para activar el módulo, sustituyendo su propia información en lugar de «localhost», «/status_page» y «127.0.0.1»:

server {
	listen 80;
	listen [::]:80;
	server_name localhost;	
 
	##
	# Status Page Settings
	##	
 
	location /status_page {
		stub_status on;
		allow 127.0.0.1;
		allow ::1;
		deny all; 		
	}
 
}

Nota: necesitará privilegios sudo para modificar este archivo.

Código de estado de Nginx

Ahora pruebe su configuración:

Configuración de prueba de Nginx

Si todo va bien, envía a tu servidor una señal de recarga:

sudo systemctl reload nginx

Servidor de recarga Nginx

Para acceder a su página de estado, visite la ubicación de su nombre_servidor seguido de “/status_page” en un navegador web o usando una herramienta de línea de comandos como curl. (Esto es útil si el caché de su navegador no se actualiza automáticamente). El siguiente es el comando curl para acceder a la página en nuestros ejemplos:

curl localhost/status_page

Estado de rizo de Nginx

En el navegador, lo anterior se parece a la siguiente imagen.

Estado del navegador Nginx

Comprobar registros de acceso

Si observa un tráfico anormal al verificar la página de estado configurada anteriormente, puede ser una buena idea verificar el registro de acceso del servidor. Esto se puede encontrar en «/var/log/nginx/access.log». El registro enumera los métodos HTTP utilizados, la fecha/hora de los intentos de acceso, los agentes de usuario y las páginas a las que se accedió.

Registro de acceso de Nginx

Limitación de conexiones

Entre las muchas tácticas útiles que vale la pena probar para evitar ataques DDoS, una de las más simples y efectivas es la limitación de las tasas de tráfico entrante.

Idealmente, debe restringir el acceso lo suficiente para evitar que los bots maliciosos dominen su servidor a tasas inhumanas mientras mantiene tasas razonables para los clientes humanos. En Nginx, esto se puede lograr con el limit_req_zone y limit_req directivas. El siguiente código establece restricciones de velocidad y memoria para usar en cualquier ubicación que su servidor esté configurado para mostrar:

limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;

“Zona” especifica el nombre y el tamaño (en Megabytes en este caso) del espacio en la memoria donde se almacenan las solicitudes de los usuarios. “Tasa” establece el número total de solicitudes que Nginx aceptará cada segundo (10 en este ejemplo). Piense en este código como una regla y en el código siguiente como el uso de esa regla:

limit_req zone=speedbump burst=20;

El código anterior en realidad hace un poco más que simplemente implementar nuestra regla de limitación; también agrega una pequeña cola de hasta veinte solicitudes para manejar suavemente las conexiones legítimas que aparecen un poco más rápido de lo normal, exceder tanto la regla como la cola da como resultado un error 503 para el cliente. Así es como se ven ambas directivas en nginx.conf:

Código de límite de Nginx

Dirección IP de la lista negra

Si puede obtener la dirección IP que está DDoSing su servidor, simplemente puede incluirlo en la lista negra y eliminar cualquier conexión que se origine en esta dirección IP.

Agregue el siguiente código a su directiva de servidor:

location / {
    deny 123.123.123.0/28;
    # ...
}

Solicitud de bloqueo a ciertos archivos

Si el ataque DDoS está dirigido a ciertos archivos en su servidor, por ejemplo, el archivo xmlrpc.php en WordPress (este es un archivo muy específico en la mayoría de los servidores de WordPress), puede bloquear todas las solicitudes. Agregue este código a su directiva de servidor:

location /xmlrpc.php {
    deny all;
}

Siga el procedimiento anterior y podrá limitar la mayoría de los ataques DDoS. Asegúrese de revisar el Documentación de Nginx para obtener opciones de seguridad adicionales que puede implementar.

Experto Geek - Tu Guía en Tendencias Tecnológicas