Comment rejeter les requêtes avec un User-Agent vide ?

Je reçois beaucoup de mauvais bots/robots qui accèdent à mon site Discourse avec un User-Agent vide. Normalement, je modifierais la configuration nginx pour faire cela, mais ce n’est pas accessible lorsque j’utilise la méthode d’installation Docker. Je ne souhaite pas vraiment ajouter un RP supplémentaire juste pour cela si je peux l’éviter.

1 « J'aime »

Vous pouvez consulter discourse_docker/templates/web.ratelimited.template.yml at main · discourse/discourse_docker · GitHub comme exemple de la façon de modifier la configuration nginx à l’intérieur du conteneur.

5 « J'aime »

Pour tous ceux qui souhaitent faire cela spécifiquement, j’ai créé /var/discourse/templates/web.blockemptyua.yml avec le contenu suivant :

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; }

Ensuite, dans /var/discourse/containers/app.yml, j’ai ajouté ce nouveau fichier de modèle à la fin de la liste des modèles en haut du fichier, suivi de ./launcher rebuild app.

Nginx rejette maintenant toutes les requêtes avec un UA vide.

Modification : Changé la correspondance/remplacement pour être à un meilleur endroit.

4 « J'aime »

Je ne connais pas Docker, donc par mesure de sécurité, car je serai nerveux chaque fois que je verrai replace quelque part…

Cela ne remplace pas totalement le contenu de discourse.conf mais y ajoute, n’est-ce pas ?

Il remplace une ligne dans le fichier. Il trouve donc la première occurrence de :

listen 443 ssl http2;

Et le remplace par

listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }

Ainsi, nous ajoutons simplement une nouvelle ligne au fichier au bon endroit. Le reste du fichier n’est pas touché. Il utilise le même mécanisme que les modèles officiels pour patcher le fichier en toute sécurité.

2 « J'aime »

Comme je l’ai dit plus tôt, je ne connais pas Docker. Je suis juste un pauvre utilisateur final avec un doctorat en copier-coller.

C’est pourquoi un avis pour les futurs chercheurs :

web.blockemptyua.yml ne peut pas être le tout premier des modèles déclarés. Plus précisément, il doit venir après web.template.yml (ou peut-être même après tous les modèles web.*).

L’ordre a du sens ici, je pense, et si j’essaie de travailler avec lui comme premier, la reconstruction/le démarrage s’arrête avec une erreur car il n’y a pas de /etc/nginx/conf.d/discourse.conf à ce moment-là.

Eh bien, chaque jour quelque chose de nouveau :wink:

1 « J'aime »

En effet, il doit aller à la fin. J’ai modifié mon message pour l’inclure :+1:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.