Wie lassen sich Anfragen mit einem leeren User-Agent fallen lassen?

Ich bekomme viele schlechte Bots/Crawler, die meine Discourse-Seite mit einem leeren User-Agent treffen. Normalerweise würde ich die Nginx-Konfiguration bearbeiten, um dies zu tun, aber diese ist bei der Docker-Installationsmethode nicht zugänglich. Ich möchte keinen zusätzlichen RP nur dafür hinzufügen, wenn ich es vermeiden kann.

1 „Gefällt mir“

Sie können sich discourse_docker/templates/web.ratelimited.template.yml at main · discourse/discourse_docker · GitHub als Beispiel ansehen, wie Sie die Nginx-Konfiguration innerhalb des Containers ändern können.

5 „Gefällt mir“

Für alle anderen, die dies speziell tun möchten, habe ich /var/discourse/templates/web.blockemptyua.yml mit folgendem Inhalt erstellt:

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

Dann habe ich in /var/discourse/containers/app.yml diese neue Vorlagendatei am Ende der Liste der Vorlagen am Anfang der Datei hinzugefügt, gefolgt von ./launcher rebuild app.

Nginx lehnt nun alle Anfragen mit einer leeren UA ab.

Bearbeiten: Die Übereinstimmung/Ersetzung wurde an eine bessere Stelle verschoben.

4 „Gefällt mir“

Ich kenne Docker nicht, also nur um sicherzugehen, weil ich jedes Mal nervös wäre, wenn ich irgendwo replace sehe…

Das ersetzt nicht den gesamten Inhalt von discourse.conf, sondern fügt etwas hinzu, oder?

Es ersetzt eine Zeile in der Datei. Es findet also die erste Instanz von:

listen 443 ssl http2;

Und ersetzt sie durch

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

So wird nur eine neue Zeile an der richtigen Stelle in die Datei eingefügt. Der Rest der Datei wird nicht verändert. Es verwendet denselben Mechanismus wie die offiziellen Vorlagen, um die Datei sicher zu patchen.

2 „Gefällt mir“

Wie ich bereits sagte, kenne ich Docker nicht. Ich bin nur ein armer Endbenutzer mit einem Doktortitel im Kopieren und Einfügen.

Deshalb ein Hinweis für zukünftige Suchende:

web.blockemptyua.yml kann nicht die allererste der deklarierten Vorlagen sein. Genauer gesagt muss sie nach web.template.yml (oder vielleicht sogar nach jeder web.* Vorlage) kommen.

Die Reihenfolge hat hier eine Bedeutung, nehme ich an, und wenn ich/wir versuchen, damit als erste zu arbeiten, stoppt der Wiederaufbau/die Initialisierung mit einem Fehler, weil zu diesem Zeitpunkt noch keine /etc/nginx/conf.d/discourse.conf vorhanden ist.

Nun, jeden Tag etwas Neues :wink:

1 „Gefällt mir“

In der Tat muss es am Ende stehen. Ich habe meinen Beitrag bearbeitet und das hinzugefügt :+1:

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