Crear la imagen oficial de docker de nginx con el módulo testcookie

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 👌