Verwendung von Discourse mit Cloudflare: Beste Praktiken

Verwendung von Discourse mit Cloudflare

:bookmark: Diese Anleitung erklärt, wie Sie Discourse mit Cloudflare konfigurieren und verwenden, einschließlich bewährter Sicherheitspraktiken und Tipps zur Fehlerbehebung.

:person_raising_hand: Erforderliches Benutzerniveau: Administrator

:information_source: Für selbst gehostete Installationen ist Konsolenzugriff erforderlich

Zusammenfassung

Cloudflare kann Ihre Discourse-Instanz durch CDN-gestützte verbesserte Leistung, zusätzliche Sicherheitsebenen wie DDoS-Schutz und HTTPS-Unterstützung aufwerten. Diese Anleitung behandelt den Einrichtungsprozess und bewährte Praktiken für eine optimale Konfiguration.

Warum Cloudflare mit Discourse verwenden?

Die Verwendung von Cloudflare mit Ihrer Discourse-Instanz bietet mehrere wichtige Vorteile:

  • Leistung: Das CDN von Cloudflare kann den weltweiten Zugriff auf gängige Assets verbessern und die Benutzererfahrung global verbessern (Quelle).
  • Sicherheit: Zusätzliche Schutzebenen, einschließlich:

:warning: Bei selbst gehosteten Installationen fügt Cloudflare zwar diese Vorteile hinzu, erhöht aber die Komplexität Ihrer Einrichtung.

Cloudflare einrichten

  1. Machen Sie sich mit den Cloudflare Fundamentals vertraut.
  2. Folgen Sie den Einrichtungsanweisungen, um Cloudflare für Ihre Domain zu konfigurieren und die Sicherheits-, Leistungs- und Zuverlässigkeitsvorteile zu nutzen.

Konfiguration Best Practices

DNS-Einstellungen

  • Stellen Sie sicher, dass DNS-Einträge, die auf Ihre Discourse-Instanz verweisen, weitergeleitet werden.
  • Greifen Sie auf die DNS-Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/dns zu.

SSL/TLS-Konfiguration

  • Stellen Sie den Verschlüsselungsmodus auf “Full (strict)” ein.
  • Greifen Sie auf die SSL/TLS-Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/ssl-tls zu.

:warning: Eine falsche SSL/TLS-Konfiguration kann zu Weiterleitungsschleifen führen.

Caching-Konfiguration

  • Stellen Sie die Caching-Stufe auf “Standard” ein.
  • Greifen Sie auf die Caching-Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/caching/configuration zu.

Seitenregeln

Erstellen Sie die folgenden Seitenregeln unter dash.cloudflare.com/?to=/:account/:zone/rules:

  • Stellen Sie die Caching-Stufe für community.example.com/session/* auf “Bypass”.
  • Konfigurieren Sie die Regeln-Einstellungen, um eingehende URLs zu normalisieren.

Netzwerkeinstellungen

Konfigurieren Sie die folgenden Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/network:

Aktivieren:

  • IPv6-Kompatibilität
  • IP-Geolokalisierung
  • Network Error Logging
  • Onion Routing

Deaktivieren:

  • Pseudo-IPv4
  • Response Buffering
  • True-Client-IP Header
  • gRPC

Stellen Sie die maximale Upload-Größe gemäß Ihrer Website-Richtlinie ein (100 MB empfohlen).

WAF (Web Application Firewall)-Einstellungen

Wenn Ihr Cloudflare-Plan Managed Rules unterstützt, erstellen Sie Folgendes:

  1. WAF bei der Erstellung/Bearbeitung von Beiträgen überspringen:
    (http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})
    
  2. Für Benutzer des Data Explorer-Plugins: WAF bei Admin-Abfragen überspringen:
    (http.request.uri.path contains "/admin/plugins/explorer/queries/" and http.request.method eq "PUT")
    

Für beide Regeln:

  • Wählen Sie “Alle verbleibenden Regeln überspringen”.
  • Aktivieren Sie “Anfragen mit Übereinstimmung protokollieren”.

Greifen Sie auf die WAF-Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules zu.

Inhaltsoptimierung

Konfigurieren Sie die folgenden Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/speed/optimization:

  • Brotli aktivieren
  • Rocket Loader™ deaktivieren
  • Auto Minify deaktivieren

:warning: Discourse meldet häufig Berichte über nicht erreichbare Websites, da Rocket Loader™ aktiviert ist.

Zusätzliche Konfiguration für selbst gehostete Installationen

Um die korrekte Weiterleitung von IP-Adressen sicherzustellen, fügen Sie Folgendes zum Abschnitt “templates” in Ihrer containers/app.yml hinzu:

- "templates/cloudflare.template.yml"

Verwandt: Wie richtet man Cloudflare ein?

Support-Ressourcen

Fehlerbehebung

Content Security Policy (CSP)-Probleme

Wenn CSP-Fehler auftreten:

  • Stellen Sie sicher, dass Rocket Loader deaktiviert ist.
  • Überprüfen Sie, ob Skripte korrekt zur Website-Einstellung content security policy script src hinzugefügt wurden.

OneBox-Funktionalität

Wenn OneBox blockiert wird:

  • Prüfen Sie, ob Super Bot Fight Mode aktiviert ist.
  • Passen Sie die Einstellung “Definitely automated” an, wenn sie auf “Managed” oder “Block” gesetzt ist.
  • Erwägen Sie die Erstellung einer benutzerdefinierten WAF-Regel für den OneBox-User-Agent.
28 „Gefällt mir“

Guten Morgen,

vielen Dank für diese Anleitung, der ich bis ins kleinste Detail gefolgt bin, aber ich stoße auf ein Problem. Jedes Mal, wenn ich Cloudflare in meiner Konsole aktiviere, erhalte ich eine Fehlermeldung mit dem CSP, die mir angezeigt wird (Refused to execute inline script because it violates the following Content Security Policy directive: „script-src“) und nachdem mir die URLs in meinem CSP angezeigt wurden: (Entweder das Schlüsselwort „unsafe-inline“, ein Hash („sha256-VCiGKEA…=“) oder ein Nonce („nonce-…“) ist erforderlich, um die Inline-Ausführung zu aktivieren.

Ich habe überall gesucht, aber keine andere Lösung gefunden, als den Proxy zu deaktivieren, was mein Problem löst?

DANKE.

Ist Rocket Loader deaktiviert?

Überprüfen Sie außerdem, ob die Skripte ordnungsgemäß zu den Website-Einstellungen für content security policy script src hinzugefügt wurden.

Wenn keine dieser Lösungen funktioniert, empfehle ich, sich an Cloudflare zu wenden unter https://community.cloudflare.com/t/using-discourse-with-cloudflare-best-practices/602890.

1 „Gefällt mir“

Danke @nat und @tcloonan

Das stand schon ein oder zwei Jahre auf meiner To-Do-Liste, aber das Alter einiger älterer Threads zu diesem Thema hat mich abgeschreckt :smiley:

Gibt es Probleme oder Besonderheiten für Leute, die AWS S3 für die Speicherung und für Backups verwenden? :thinking:

Benötigen Sie die Cloudflare-Vorlage noch in app.yml für echte IP-Adressen oder hat sich das im Laufe der Jahre geändert?

1 „Gefällt mir“

Ja. Sie benötigen die Cloudflare-Vorlage. Ohne sie wird der gesamte Datenverkehr von den Servern von Cloudflare und nicht von der IP-Adresse des Browsers des Benutzers zu kommen scheinen.

Ich sehe es nicht in der OP erwähnt, was eine auffällige Auslassung zu sein scheint. Wie sind Sie darauf gekommen, dass Sie es brauchen?

2 „Gefällt mir“

Hallo! Bin seit 2014 dabei (einige Jahre meistens still), aber wir arbeiten seit 2020 mit einem benutzerdefinierten Importer daran, unsere Community zu migrieren, und wir arbeiten an der zweiten Version unseres Inhouse-Plugins, um bbob als bbcode-Engine in Discourse einzufügen und zu aktivieren. Sie können unseren Fortschritt hier verfolgen: GitHub - RpNation/bbcode: RpNation's Official BBCode Implementation for Discourse

Ich atme diese Software schon eine Weile. Wir verwenden Cloudflare, daher recherchiere ich erneut, welche Probleme es mit Discourse gibt oder nicht, da wir uns jetzt in der Phase befinden, in der ich mich um weniger wichtige Dinge kümmern kann, die nicht als Blocker gelten.

@nat Könnten Sie eine Bearbeitung bezüglich der Vorlage für selbst gehostete Instanzen hinzufügen!

4 „Gefällt mir“

Erledigt, danke euch beiden, dass ihr darauf hingewiesen habt!

4 „Gefällt mir“

Vielen Dank! Das war wahrscheinlich auch der Grund, warum meine Seite plötzlich nicht mehr erreichbar war. Ich muss wohl ein bisschen zu viel mit den Cloudflare-Einstellungen herumgespielt haben.

Da mein alter Domainanbieter DNSSec nur unzureichend und falsch unterstützte, musste ich mich nach etwas Neuem umsehen. Da kam mir Cloudflare in den Sinn. Die kostenlose Version ist für mich völlig ausreichend. Schade, dass die Tarife nicht einmal vernünftig auf die Anforderungen skalieren.

2 „Gefällt mir“

Wird dies an diesem Ort hinzugefügt?

1 „Gefällt mir“

Nur zur Genauigkeit, die Abfrage für den WAF-Ausschluss lautet:

(http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})

Sie können ihn kopieren und einfügen, wenn Sie auf der linken Seite auf Edit expression klicken, anstatt die Formularauswahl zu verwenden.

Mir ist heute aufgefallen, dass die Hälfte des Forums aufgrund von Auto Minify nicht funktionierte :weary:

Bearbeiten: Mir ist gerade aufgefallen, dass dies ein Wiki-Post ist. Dumm von mir, ich habe den ursprünglichen Beitrag bearbeitet.

3 „Gefällt mir“

SSL/TLS-Verschlüsselungsmodus Vollständig (streng). Gibt es ein Problem, wenn er nicht geschlossen wird? Wird SSL nicht sowieso automatisch definiert?

Nur um dies zu ergänzen: Anscheinend wird die OneBox-Funktionalität blockiert, wenn der Super Bot Fight Mode aktiviert ist und die Einstellung „Definitely automated“ auf „Managed“ oder „block“ gesetzt ist.

Sie können dies umgehen, indem Sie eine benutzerdefinierte WAF-Regel für den Onebox-Benutzeragenten einrichten, aber vielleicht gibt es eine sicherere Methode, dies zu tun?

Bezugnehmend auf

könnte dieser Teil eine bessere Formulierung gebrauchen:

@supermathie Vorschlag:

Sie möchten die folgende Zeile am Ende Ihres Vorlagenabschnitts in containers/app.yml hinzufügen.

wie in Using Discourse with Cloudflare: Best Practices - #11 by shawa veranschaulicht

Im besten Fall könnte auch ein Link zu einer allgemeinen Anleitung für Vorlagen in der Serverkonfiguration bereitgestellt werden, die ich auf den ersten Blick nicht finden konnte.

Ich würde vorschlagen, KI-Bots in Cloudflare zu deaktivieren. Dies finden Sie unter Sicherheit → Bots → KI-Bots blockieren.

Die KI-Bots haben meine Website täglich mit 30.000 bis 40.000 Seitenaufrufen überlastet. Nachdem ich diesen Filter aktiviert hatte, ging mein KI-Bot-Traffic erheblich zurück.

4 „Gefällt mir“

Der obige Code sollte wie folgt geändert werden:

 - "templates/cloudflare.template.yml"

Danke,
Major

2 „Gefällt mir“

Ist es wirklich wahr, dass WebSockets in Cloudflare aktiviert sein sollten?

Es hat jahrelang gut ohne funktioniert, und soweit ich hier im Forum Informationen finden konnte, nutzt Discourse keine WebSockets.

Ich verstehe nicht, ob ich das tun muss.

Sie haben Recht. Ich glaube nicht, dass wir Websockets verwenden.

Ich habe es entfernt und auch den Vorlagenausschnitt des Benutzers oben aktualisiert.

2 „Gefällt mir“

Während wir dabei sind, denke ich, dass die gesamten Netzwerkeinstellungen für Discourse irrelevant sind:

  • IPv6-Kompatibilität kann nicht mehr deaktiviert werden, und natürlich ist Discourse nicht davon abhängig, sondern kann perfekt auf einem reinen IPv4-System laufen.
  • IP-Geolokalisierung fügt den Header CF-IPCountry zu Anfragen hinzu, der jedoch von Discourse nicht verwendet wird. Es verwendet eine eigene (optionale) MaxMind-Funktion.
  • Network Error Logging fügt den Antwortheader Report-To hinzu, den Browser zum Melden von Fehlern verwenden können. Er ist jedoch veraltet, und selbst wenn die Funktion mit allen Cloudflare-Plänen aktiviert werden kann, ist das Dashboard-Element zur tatsächlichen Anzeige der Berichte nur im Enterprise-Plan verfügbar. In diesem Fall könnte es für einige alte Browser lediglich eine Datenschutzregression und einen Netzwerk-Overhead darstellen.
  • Onion Routing verbessert die Privatsphäre für Anfragen aus dem Tor-Netzwerk. Discourse kümmert sich nicht darum oder weiß es nicht einmal.
  • Die Pseudo-IPv4-Funktion könnte sogar benötigt werden, wenn der Host Software wie alte Analysetools oder ähnliches ausführt, die nur IPv4-Adressen unterstützen. Die Proxy-Header von Cloudflare, wie Cf-Connecting-IP (oder andere, je nach Konfiguration), können dann angepasst werden, um eine mehr oder weniger eindeutige IPv4-Adresse anstelle der tatsächlichen IPv6-Adresse des Clients zu erhalten, um die Tatsache zu umgehen, dass die IPv6-Unterstützung für Client-zu-Cloudflare-Anfragen nicht mehr deaktiviert werden kann. Auch hier kümmert sich Discourse nicht darum. Ich meine, es wäre ein Problem für z. B. die GeoIP-Erkennung, aber die Funktion ist standardmäßig deaktiviert, und Administratoren sollten sie natürlich nur aktivieren, wenn sie von der jeweiligen Software, die sie ausführen, unbedingt benötigt wird, und die Nachteile von nicht echten Client-IPs in Kauf nehmen. Sie kann auch so konfiguriert werden, dass nur ein neuer Header mit der Pseudo-IPv4-Adresse hinzugefügt wird, und Analysetools (oder was auch immer) können dann bei Bedarf Client-IP-Header überschreiben, während Anfragen an Discourse nicht betroffen wären. In jedem Fall ist die Funktion für die allgemeine Funktionalität von Discourse irrelevant.
  • True-Client-IP Header fügt zusätzlich zu CF-Connecting-IP und X-Forwarded-For nur diesen Header hinzu. Discourse verwendet ihn nicht, und auch die Discourse-Konfigurationsvorlage verwendet stattdessen CF-Connecting-IP. Daher hat er keine Auswirkung.
  • gRPC wird von Discourse nicht verwendet, aber es schadet auch nicht, wenn Cloudflare zum Weiterleiten von gRPC-Anfragen aktiviert ist, genauso wie bei WebSockets. Beide müssen möglicherweise für andere Software aktiviert sein, die auf derselben Cloudflare-Domäne läuft.
  • Maximale Upload-Größe 100 MB ist Standard und Minimum. Größere Upload-Größen erfordern Business- oder Enterprise-Pläne, und Discourse wird nicht fehlschlagen, wenn Cloudflare größere Uploads zulässt.

Das Einzige, worüber ich mir nicht sicher bin, ob es Auswirkungen haben kann, ist Response Buffering. Und ich kann es nicht testen, da es eine reine Enterprise-Funktion ist. Aber ich kann mir nicht vorstellen, dass der Client sich darum kümmert, ob Pakete von der CF-Edge gestreamt werden, sobald sie eintreffen, oder ob sie in einem Stück gesendet werden, sobald sie an der Edge fertig sind. Für gecachte Daten (ich meine von Cloudflare gecachte Daten) geschieht dies ohnehin immer und verursacht zumindest keine Probleme. Diese Funktion betrifft nur nicht gecachte Daten.

Im Grunde würde ich also die gesamte Sektion “Netzwerkeinstellungen” entfernen, da sie für die Cloudflare-Funktionalität irrelevant ist, aber andere Software möglicherweise bestimmte Einstellungen erfordert oder Administratoren sie möglicherweise auf eine bestimmte Weise bevorzugen und wissen sollten, dass Discourse in jedem Fall funktioniert.

1 „Gefällt mir“