A veces tenemos que usar módulos de nginx para mitigar ataques o evitar scrapeos de bots, decidí usar el módulo testcookie de nginx que obliga al cliente a tener una cookie para poder navegar por el contenido o sino el cliente recibirá una respuesta HTTP 307
con su correspondiente error, esto me está evitando el comportamiento de algunos bots de red pero no recomiendo activarlo globalmente por ejemplo si usas rutas de federación, hay instancias como la API de Mastodon
que acepta la cookie para enviar datos pero otras instancias no, y se perdería información en el camino.
Lo primero que hacemos es clonar el repositorio oficial de nginx de docker y usaremos su Dockerfile que está en la carpeta modules, creando una carpeta con la ruta hasta el código fuente del módulo de nginx que vamos a añadir a la imagen de docker:
$ git clone https://github.com/nginxinc/docker-nginx
$ mkdir docker-nginx/modules/testcookie
$ echo 'https://codeload.github.com/kyprizel/testcookie-nginx-module/legacy.tar.gz/refs/heads/master' > docker-nginx/modules/testcookie/source
Normalmente usamos docker con compose para crear los contenedores, añadiendo la siguiente configuración a nuestro compose.yml
solamente tendremos que usar el comando docker compose build
y construirá nuestra imagen con los módulos que añadamos, se pueden especificar varios en la variable ENABLED_MODULES
separados por espacios:
services:
nginx:
build:
context: ./docker-nginx/modules/
args:
NGINX_FROM_IMAGE: nginx
ENABLED_MODULES: testcookie
image: nginx:testcookie
...
Una vez compilada la imagen de docker configuramos el módulo testcookie al gusto y levantamos el contenedor, probamos que funcione correctamente:
$ curl -L https://manalejandro.com
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Couldn't connect to server
Mi configuración después de intentar setear la cookie cuatro veces te envía a localhost, así que por el momento mitigaré los bots y comportamientos tóxicos automatizados 👌
Comments
No comments yet. Be the first to react!