Cómo utilizar el módulo ngx_http_limit_req_module para prevenir ataques
La seguridad es una de las principales preocupaciones de cualquier desarrollador web. Cuando se trata de prevenir ataques, hay varias herramientas que están disponibles para nosotros. En este artículo, exploraremos cómo utilizar el módulo ngx_http_limit_req_module de Nginx.
Este módulo es útil para prevenir ataques DoS (Denial of Service) y DDoS (Distributed Denial of Service), que pueden hacer que nuestro servidor web sea inaccesible debido a una sobrecarga de peticiones. Con el módulo ngx_http_limit_req_module, podemos controlar el número de peticiones que se realizan por segundo y por direcciones IP.
Instalación
Antes de comenzar, debemos asegurarnos de que nuestro servidor web tiene instalado Nginx con el módulo ngx_http_limit_req_module. Para ello, podemos usar los siguientes comandos:
```
sudo apt-get update
sudo apt-get install nginx-extras
```
Una vez instalado, debemos habilitar el módulo en la configuración de Nginx. Para ello, abrimos el archivo `/etc/nginx/nginx.conf` y añadimos la siguiente línea dentro del bloque `http`:
```
http {
# ...
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
# ...
}
```
Aquí estamos definiendo una nueva zona llamada `mylimit` con un tamaño máximo de 10 MB y un límite de 1 petición por segundo por cada dirección IP.
Configuración
Una vez que hemos habilitado el módulo ngx_http_limit_req_module, podemos configurarlo para que se aplique a nuestro sitio web. Para ello, abrimos el archivo de configuración de nuestro sitio (por ejemplo, `/etc/nginx/sites-available/mi-sitio`) y añadimos las siguientes líneas dentro del bloque `server`:
```
server {
# ...
location / {
# ...
limit_req zone=mylimit;
# ...
}
# ...
}
```
Aquí estamos indicando que queremos limitar las peticiones para la ruta raíz de nuestro sitio (`/`) utilizando la zona `mylimit`.
Pruebas
Una vez que hemos configurado el módulo ngx_http_limit_req_module, podemos probar su funcionamiento. Para ello, podemos utilizar la herramienta `ab` (Apache Bench), que nos permitirá simular múltiples peticiones a nuestro sitio.
Para instalar `ab` en Ubuntu, podemos utilizar el siguiente comando:
```
sudo apt-get install apache2-utils
```
Una vez instalado, podemos ejecutar el siguiente comando para hacer 1000 peticiones a nuestro sitio:
```
ab -n 1000 -c 10 http://mi-sitio.com/
```
Aquí estamos indicando que queremos hacer 1000 peticiones (`-n 1000`) con un máximo de 10 conexiones simultáneas (`-c 10`) a la URL de nuestro sitio (`http://mi-sitio.com/`).
Después de ejecutar este comando, veremos que si intentamos acceder a nuestro sitio, recibiremos un mensaje de error indicando que se ha alcanzado el límite de peticiones permitidas.
Conclusiones
En este artículo hemos explorado cómo utilizar el módulo ngx_http_limit_req_module de Nginx para prevenir ataques DoS y DDoS en nuestro sitio web. Hemos visto cómo instalar y configurar este módulo, así como cómo probar su funcionamiento.
Es importante tener en cuenta que la configuración de este módulo debe ser ajustada cuidadosamente para evitar falsos positivos (bloquear usuarios legítimos) o falsos negativos (permitir ataques). Además, este módulo no es una solución completa para la seguridad de nuestro sitio web, sino que debe ser utilizado como parte de una estrategia más amplia de seguridad.