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
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:
O canalice lo anterior a grep para encontrarlo más rápido:
nginx -V 2>&1 | grep -o with-http_stub_status_module
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».
Á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.
Ahora pruebe su configuración:
Si todo va bien, envía a tu servidor una señal de recarga:
sudo systemctl reload 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
En el navegador, lo anterior se parece a la siguiente imagen.
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ó.
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:
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.