Estoy recibiendo muchos bots/crawlers maliciosos que acceden a mi sitio de Discourse con un agente de usuario vacío. Normalmente editaría la configuración de nginx para hacer esto, pero esto no es accesible cuando se usa el método de instalación de Docker. Realmente no quiero agregar un RP adicional solo para esto si puedo evitarlo.
Puedes consultar discourse_docker/templates/web.ratelimited.template.yml at main · discourse/discourse_docker · GitHub como ejemplo de cómo modificar la configuración de nginx dentro del contenedor.
Para cualquier otra persona que quiera hacer esto específicamente, creé /var/discourse/templates/web.blockemptyua.yml con el siguiente contenido:
run:
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 443 ssl http2;/
to: |
listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }
Luego, en /var/discourse/containers/app.yml, agregué este nuevo archivo de plantilla al final de la lista de plantillas en la parte superior del archivo, seguido de ./launcher rebuild app.
Nginx ahora rechaza todas las solicitudes con una UA vacía.
Editar: Cambié la coincidencia/reemplazo para que estuviera en un mejor lugar.
No sé docker, así que, para estar seguro, porque me pondré nervioso cada vez que vea replace en cualquier lugar…
Esto no está reemplazando totalmente el contenido de discourse.conf, sino que lo está añadiendo, ¿verdad?
Está reemplazando una línea dentro del archivo. Así que encuentra la primera instancia de:
listen 443 ssl http2;
Y la reemplaza con
listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }
Así que solo estamos agregando una nueva línea al archivo en el lugar correcto. El resto del archivo no se toca. Utiliza el mismo mecanismo que las plantillas oficiales para parchear el archivo de forma segura.
Como dije antes, no sé nada de Docker. Solo soy un pobre usuario final con un doctorado en copiar y pegar.
Por eso, una nota para futuros buscadores:
web.blockemptyua.yml no puede ser la primera de las plantillas declaradas. Más precisamente, tiene que venir después de web.template.yml (o quizás incluso después de todas las plantillas web.*).
El orden tiene significado aquí, supongo, y si yo/nosotros intentamos trabajar con él como el primero, la reconstrucción/el arranque se detiene con un error porque no hay ningún /etc/nginx/conf.d/discourse.conf en ese momento.
Bueno, cada día algo nuevo ![]()
De hecho, tiene que ir al final. He editado mi publicación para incluir eso ![]()
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.