Discourse mit Cloudflare verwenden: Best Practices

Discourse mit Cloudflare verwenden

:bookmark: Diese Anleitung erklärt, wie Sie Discourse mit Cloudflare konfigurieren und verwenden, einschließlich Best Practices für die Sicherheit 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 zur Leistungssteigerung, zusätzliche Sicherheitsebenen wie DDoS-Schutz und HTTPS-Unterstützung verbessern. Diese Anleitung behandelt den Einrichtungsprozess und Best Practices für eine optimale Konfiguration.

Warum Cloudflare mit Discourse verwenden

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

  • Leistung: Cloudflares CDN kann den weltweiten Zugriff auf gängige Assets verbessern und so das Benutzererlebnis global steigern (Quelle)
  • Sicherheit: Zusätzliche Schutzebenen, einschließlich:

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

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

Best Practices für die Konfiguration

DNS-Einstellungen

  • Stellen Sie sicher, dass DNS-Einträge, die auf Ihre Discourse-Instanz verweisen, proxied sind
  • Greifen Sie auf 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 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 den Cache-Level auf „Standard“ ein
  • Greifen Sie auf Caching-Einstellungen unter dash.cloudflare.com/?to=/:account/:zone/caching/configuration zu

Cache-Regeln

Cloudflare hat Seitenregeln zugunsten seines modernen Rules-Systems eingestellt. Erstellen Sie die folgenden Regeln mit Cache Rules unter dash.cloudflare.com/?to=/:account/:zone/rules:

  • Legen Sie den Cache Level für community.example.com/session/* auf „Bypass“ fest
  • Konfigurieren Sie die Einstellungen zur URL-Normalisierung, um eingehende URLs zu normalisieren

Netzwerkeinstellungen

Die Netzwerkeinstellungen unter dash.cloudflare.com/?to=/:account/:zone/network wirken sich im Allgemeinen nicht auf die Discourse-Funktionalität aus. Discourse verwendet keine WebSockets, gRPC oder die Header CF-IPCountry / True-Client-IP. Diese Einstellungen können auf ihren Standardwerten belassen werden, es sei denn, andere Software auf derselben Domain erfordert eine spezifische Konfiguration.

WAF (Web Application Firewall)-Einstellungen

Wenn Ihr Cloudflare-Plan verwaltete Regeln unterstützt, erstellen Sie Folgendes:

  1. WAF bei Beitrags*erstellung/-bearbeitung überspringen:
(starts_with(http.request.uri.path, "/posts") and http.request.method in {"POST" "PUT"})
  1. Für Benutzer des Data Explorer-Plugins WAF bei Admin-Abfragen überspringen:
((http.request.uri.path contains "/admin/plugins/explorer/queries/" or http.request.uri.path contains "/admin/plugins/discourse-data-explorer/queries/") and http.request.method eq "PUT")

Für beide Regeln:

  • Wählen Sie „Alle verbleibenden Regeln überspringen“
  • Aktivieren Sie „Übereinstimmende Anfragen protokollieren“

:information_source: Wenn Sie ein Business-Abonnement oder höher haben, können Sie den Regex-Operator matches für eine präzisere Übereinstimmung verwenden. Die oben verwendeten Operatoren starts_with und contains funktionieren auf allen Plänen, einschließlich Free und Pro.

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

Inhaltsoptimierung

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

  • Brotli aktivieren
  • Rocket Loader™ deaktivieren

:warning: Aufgrund der Aktivierung von Rocket Loader™ werden häufig Meldungen über eine nicht erreichbare Website für Discourse gemeldet (siehe Suche nach Rocket Loader-Problemen auf Discourse Meta)

Zusätzliche Konfiguration für selbst gehostete Installationen

Um eine korrekte Weiterleitung der IP-Adresse zu gewährleisten, fügen Sie Ihrem containers/app.yml im Abschnitt „templates“ Folgendes hinzu:

- "templates/cloudflare.template.yml"

:warning: Nach dem Hinzufügen der Vorlage müssen Sie Ihren Container mit ./launcher rebuild app neu erstellen, damit die Änderungen wirksam werden.

Verwandt: Wie richtet man Cloudflare ein?

Support-Ressourcen

Fehlerbehebung

Content Security Policy (CSP)-Probleme

Wenn CSP-Fehler auftreten:

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

OneBox-Funktionalität

Wenn OneBox blockiert wird:

  • Überprüfen Sie, ob der Super Bot Fight Mode aktiviert ist
  • Passen Sie die Einstellung „Definitiv automatisiert“ an, wenn sie auf „Verwaltet“ oder „Blockieren“ eingestellt ist
  • Erwägen Sie das Erstellen einer benutzerdefinierten WAF-Regel für den OneBox-User-Agent
29 „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.

4 „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.

5 „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“