Utiliser Discourse avec Cloudflare : meilleures pratiques

Utilisation de Discourse avec Cloudflare

:bookmark: Ce guide explique comment configurer et utiliser Discourse avec Cloudflare, y compris les meilleures pratiques de sécurité et les conseils de dépannage.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur

:information_source: L’accès à la console est requis pour les installations auto-hébergées

Résumé

Cloudflare peut améliorer votre instance Discourse avec des performances améliorées grâce au CDN, des couches de sécurité supplémentaires comme la protection DDoS et la prise en charge HTTPS. Ce guide couvre le processus de configuration et les meilleures pratiques pour une configuration optimale.

Pourquoi utiliser Cloudflare avec Discourse

L’utilisation de Cloudflare avec votre instance Discourse offre plusieurs avantages clés :

  • Performances : Le CDN de Cloudflare peut améliorer l’accès mondial aux actifs courants, améliorant l’expérience utilisateur à l’échelle mondiale (source)
  • Sécurité : Couches de protection supplémentaires comprenant :

:warning: Pour les installations auto-hébergées, bien que Cloudflare offre ces avantages, cela ajoute de la complexité à votre configuration.

Configuration de Cloudflare

  1. Familiarisez-vous avec les Fondamentaux de Cloudflare
  2. Suivez les instructions de configuration pour configurer Cloudflare pour votre domaine et bénéficier des avantages en matière de sécurité, de performances et de fiabilité

Meilleures pratiques de configuration

Paramètres DNS

  • Assurez-vous que les enregistrements DNS pointant vers votre instance Discourse sont proxysés
  • Accédez aux paramètres DNS à l’adresse dash.cloudflare.com/?to=/:account/:zone/dns

Configuration SSL/TLS

  • Définissez le mode de chiffrement sur “Full (strict)”
  • Accédez aux paramètres SSL/TLS à l’adresse dash.cloudflare.com/?to=/:account/:zone/ssl-tls

:warning: Une configuration SSL/TLS incorrecte peut entraîner des boucles de redirection

Configuration de la mise en cache

  • Définissez le niveau de mise en cache sur “Standard”
  • Accédez aux paramètres de mise en cache à l’adresse dash.cloudflare.com/?to=/:account/:zone/caching/configuration

Règles de page

Créez les règles de page suivantes à l’adresse dash.cloudflare.com/?to=/:account/:zone/rules :

  • Définissez le niveau de mise en cache sur “Bypass” pour community.example.com/session/*
  • Configurez les paramètres des règles pour normaliser les URL entrantes

Paramètres réseau

Configurez les éléments suivants à l’adresse dash.cloudflare.com/?to=/:account/:zone/network :

Activer :

  • Compatibilité IPv6
  • Géolocalisation IP
  • Journalisation des erreurs réseau
  • Routage Onion

Désactiver :

  • Pseudo IPv4
  • Mise en mémoire tampon des réponses
  • En-tête True-Client-IP
  • gRPC

Définissez la taille maximale de téléchargement conformément à la politique de votre site (100 Mo recommandés)

Paramètres du pare-feu d’applications Web (WAF)

Si votre plan Cloudflare prend en charge les règles gérées, créez les éléments suivants :

  1. Ignorer le WAF lors de la création/modification de publications :
    (http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})
    
  2. Pour les utilisateurs du plugin Data Explorer, ignorer le WAF lors des requêtes d’administration :
    (http.request.uri.path contains "/admin/plugins/explorer/queries/" and http.request.method eq "PUT")
    

Pour les deux règles :

  • Choisissez “Ignorer toutes les règles restantes”
  • Activez “Journaliser les requêtes correspondantes”

Accédez aux paramètres du WAF à l’adresse dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules

Optimisation du contenu

Configurez les éléments suivants à l’adresse dash.cloudflare.com/?to=/:account/:zone/speed/optimization :

  • Activer Brotli
  • Désactiver Rocket Loader™
  • Désactiver la minification automatique

:warning: Discourse signale fréquemment des pannes de site en raison de l’activation de Rocket Loader™

Configuration supplémentaire pour les installations auto-hébergées

Pour garantir le transfert correct de l’adresse IP, ajoutez ce qui suit à la section des modèles dans votre containers/app.yml :

- "templates/cloudflare.template.yml"

Associé : Comment configurer Cloudflare ?

Ressources de support

Dépannage

Problèmes de politique de sécurité du contenu (CSP)

Si vous rencontrez des erreurs CSP :

  • Vérifiez que Rocket Loader est désactivé
  • Vérifiez que les scripts sont correctement ajoutés au paramètre de site content security policy script src

Fonctionnalité OneBox

Si OneBox est bloqué :

  • Vérifiez si le mode Super Bot Fight est activé
  • Ajustez le paramètre “Certainement automatisé” s’il est défini sur “Géré” ou “Bloquer”
  • Envisagez de créer une règle WAF personnalisée pour l’agent utilisateur OneBox
28 « J'aime »

Bonjour,

Merci pour ce guide que j’ai suivi à la lettre mais je rencontre un problème, à chaque fois que j’active Cloudflare dans ma console j’ai une erreur avec le CSP qui m’affiche (Refused to execute inline script because it violates the following Content Security Policy directive: "script-src) et après m’avoir indiqué les urls présentes dans mon CSP : (Either the ‘unsafe-inline’ keyword, a hash (‘sha256-VCiGKEA…=’), or a nonce (‘nonce-…’) is required to enable inline execution.

J’ai beau chercher partout je ne trouve pas de solution autre que de désactiver le proxy ce qui résout mon problème ?

MERCI.

Pouvez-vous vérifier si Rocket Loader est désactivé ?

Une autre chose est de vérifier que les scripts sont correctement ajoutés à content security policy script src dans les paramètres du site.

Si rien de tout cela ne fonctionne, je vous suggère de contacter Cloudflare à l’adresse https://community.cloudflare.com/t/using-discourse-with-cloudflare-best-practices/602890.

1 « J'aime »

Merci @nat et @tcloonan

C’était sur ma liste de choses à faire depuis un an ou deux, mais j’ai été rebuté par l’ancienneté de certains des anciens fils de discussion sur ce sujet :smiley:

Y a-t-il des problèmes ou des choses spéciales pour les personnes utilisant AWS S3 pour le stockage et pour les sauvegardes ? :thinking:

Avez-vous encore besoin du modèle Cloudflare dans app.yml pour les adresses IP réelles ou cela a-t-il changé au fil des ans ?

1 « J'aime »

Oui. Vous avez besoin du modèle cloudflare. Sans lui, tout le trafic semblera provenir des serveurs de cloudflare plutôt que de l’adresse IP du navigateur de l’utilisateur.

Je ne le vois pas mentionné dans le message d’origine, ce qui semble être une omission flagrante. Comment avez-vous déduit que vous en aviez besoin ?

2 « J'aime »

Salut ! Je suis là depuis 2014 (certaines années surtout silencieux) mais nous travaillons à la migration de notre communauté depuis 2020 avec un importateur personnalisé, et nous travaillons sur la deuxième version de notre plugin interne pour insérer et activer bbob en tant que moteur bbcode dans Discourse. Vous pouvez suivre nos progrès ici : GitHub - RpNation/bbcode: RpNation's Official BBCode Implementation for Discourse

Je respire ce logiciel depuis un moment. Nous utilisons Cloudflare, j’ai donc re-recherché quels problèmes, le cas échéant, il a avec Discourse, puisque nous sommes maintenant au stade où je peux commencer à m’inquiéter de choses moins vitales qui ne sont pas considérées comme des blocages.

@nat Pourriez-vous ajouter une modification concernant le modèle pour les instances auto-hébergées !

4 « J'aime »

C’est fait, merci à vous deux d’avoir signalé cela !

4 « J'aime »

Merci beaucoup ! C’était probablement aussi la raison pour laquelle mon site est soudainement devenu inaccessible. J’ai dû jouer un peu trop avec les paramètres de Cloudflare.

Comme mon ancien fournisseur de domaine ne prenait en charge DNSSec que de manière inadéquate et incorrecte, j’ai dû en chercher un nouveau. C’est là que Cloudflare m’est venu à l’esprit. Le plan gratuit me suffit complètement. C’est dommage que les tarifs ne s’adaptent même pas raisonnablement aux exigences.

2 « J'aime »

Est-ce que cela s’ajoute à cet emplacement ?

1 « J'aime »

Pour plus de précision, la requête pour l’exclusion WAF est :

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

Vous pouvez la copier-coller si vous cliquez sur Edit expression à gauche au lieu d’utiliser la sélection de formulaire.

Remarqué aujourd’hui alors que je mettais à jour et que soudainement la moitié du forum ne fonctionnait pas à cause de Auto Minify :weary:

Edit : je viens de remarquer que c’est un post wiki. Idiot de ma part, j’ai modifié le post initial.

3 « J'aime »

Mode de chiffrement SSL/TLS : Complet (strict). Y aura-t-il un problème s’il n’est pas désactivé ? Le SSL automatique ne sera-t-il pas défini de toute façon ?

Pour ajouter à cela, il semble que la fonctionnalité OneBox soit bloquée lorsque le mode Super Bot Fight est activé et que le paramètre « Certainement automatisé » est défini sur « Géré » ou « Bloquer »…

Vous pouvez contourner cela en configurant une règle WAF personnalisée pour l’agent utilisateur Onebox, mais existe-t-il peut-être un moyen plus sécurisé de le faire ?

En relation avec

cette partie pourrait avoir besoin d’une meilleure formulation :

@supermathie Suggestion :

vous voudrez ajouter la ligne suivante à la fin de votre section de modèles dans containers/app.yml.

comme illustré dans Using Discourse with Cloudflare: Best Practices - #11 by shawa

Au mieux, un lien vers un guide général sur les modèles dans la configuration du serveur pourrait également être fourni, ce que je n’ai pas pu trouver à première vue.

Je suggérerais de désactiver les robots IA dans Cloudflare. Vous trouverez cela sous Sécurité → Robots → Bloquer les robots IA.

Les robots IA submergeaient mon site avec 30 000 à 40 000 pages vues par jour. Après avoir activé ce filtre, mon trafic de robots IA a considérablement diminué.

4 « J'aime »

Le code ci-dessus doit être modifié comme suit :

 - "templates/cloudflare.template.yml"

Merci,
Major

2 « J'aime »

Est-il vraiment vrai que la prise en charge des WebSockets doit être activée dans Cloudflare ?

Cela a bien fonctionné pour nous sans pendant des années, et d’après les informations que j’ai pu trouver ici sur le forum, Discourse n’utilise aucun WebSocket.

Je ne comprends pas si je dois faire ça

Vous avez raison. Je ne pense pas que nous utilisions les WebSockets.

Je l’ai supprimé et j’ai également mis à jour l’extrait de modèle de l’utilisateur ci-dessus.

2 « J'aime »

Tant qu’à faire, je pense que tous les paramètres Réseau sont sans importance pour Discourse :

  • La compatibilité IPv6 ne peut plus être désactivée, et bien sûr Discourse ne dépend pas d’elle, mais peut parfaitement fonctionner sur un système IPv4 uniquement.
  • La géolocalisation IP ajoute l’en-tête CF-IPCountry aux requêtes, qui n’est cependant pas utilisé par Discourse. Il utilise sa propre fonctionnalité (facultative) MaxMind.
  • La journalisation des erreurs réseau ajoute l’en-tête de réponse Report-To, que les navigateurs peuvent utiliser pour signaler des erreurs. Il est cependant déprécié, et même si la fonctionnalité peut être activée avec tous les plans Cloudflare, l’élément du tableau de bord pour visualiser les rapports n’est disponible qu’avec le plan Entreprise. Donc, dans ce cas, pour certains anciens navigateurs, cela pourrait simplement être une régression de la confidentialité et une surcharge réseau.
  • Le routage Onion améliore la confidentialité des requêtes provenant du réseau Tor. Discourse ne s’en souciera pas et ne le saura même pas.
  • La fonctionnalité Pseudo IPv4 pourrait même être nécessaire si l’hôte exécute un logiciel, comme un ancien outil d’analyse ou similaire, qui ne prend en charge que les adresses IPv4. Les en-têtes proxy de Cloudflare, tels que Cf-Connecting-IP (ou d’autres, selon la configuration), peuvent alors être ajustés pour avoir une adresse IPv4 plus ou moins unique, au lieu de l’adresse IPv6 réelle du client, pour contourner le fait que le support IPv6 pour les requêtes client->Cloudflare ne peut plus être désactivé. Encore une fois, Discourse ne s’en souciera pas. Je veux dire que ce serait un problème pour, par exemple, la détection GeoIP, mais la fonctionnalité est désactivée par défaut, et les administrateurs ne devraient bien sûr l’activer que si elle est strictement requise par le logiciel qu’ils exécutent, en acceptant l’inconvénient de ne pas avoir les véritables adresses IP des clients. Elle peut également être configurée pour ajouter uniquement un nouvel en-tête avec l’adresse IPv4 pseudo, et les outils d’analyse (ou autre) peuvent alors réécrire les en-têtes d’IP client si nécessaire, tandis que les requêtes vers Discourse ne seraient pas affectées. Dans tous les cas, pour le fonctionnement général de Discourse, la fonctionnalité est sans importance.
  • L’en-tête True-Client-IP ajoute simplement cet en-tête en plus de CF-Connecting-IP et X-Forwarded-For. Discourse ne l’utilise pas, et le modèle de configuration de Discourse utilise également CF-Connecting-IP à la place. Il n’a donc aucun effet.
  • gRPC n’est pas utilisé par Discourse, mais avoir Cloudflare activé pour transférer les requêtes gRPC ne fait pas de mal non plus, tout comme avec WebSockets. Les deux peuvent être nécessaires pour d’autres logiciels exécutés sur le même domaine Cloudflare.
  • La taille maximale de téléchargement de 100 Mo est la valeur par défaut et minimale. Les tailles de téléchargement plus importantes nécessitent les plans Business ou Entreprise, et Discourse ne plantera pas si Cloudflare autorise des téléchargements plus importants.

La seule chose dont je ne suis pas sûr quant à son éventuel effet est la mise en mémoire tampon des réponses. Et je ne peux pas tester car il s’agit d’une fonctionnalité réservée aux entreprises. Mais je n’arrive pas à imaginer que le client se soucie de savoir si les paquets sont diffusés à partir du bord de CF au fur et à mesure qu’ils arrivent, ou s’ils sont envoyés en un seul bloc une fois terminés au bord. Pour les données mises en cache (mises en cache par Cloudflare, je veux dire), cela se fait toujours de toute façon, et cela ne cause pas de problèmes, du moins. Cette fonctionnalité n’affecte que les données non mises en cache.

Donc, en gros, je supprimerais toute la section “Paramètres réseau” comme étant sans importance pour le fonctionnement de Cloudflare, mais d’autres logiciels pourraient nécessiter certains paramètres ou les administrateurs pourraient les préférer d’une certaine manière, et devraient savoir que Discourse fonctionnera dans tous les cas.

1 « J'aime »