Discourse
Intégrez ProxyTracer avec Discourse pour détecter et bloquer automatiquement les VPN, proxys et botnets d'interagir avec votre forum, grâce à une installation de plugin très simple.
Le plugin est distribué via ce dépôt GitHub.
Fonctionnalités
- Contrôle granulaire permettant aux administrateurs d'imposer la validation IP lors des inscriptions de nouveaux utilisateurs, de l'authentification des utilisateurs existants, ou globalement pour tous les visiteurs du site.
- La mise en cache Redis intégrée stocke les évaluations récentes des adresses IP, réduisant considérablement les appels API externes et garantissant une latence nulle.
- En cas de timeout de l'API ou de défaillance réseau, le plugin privilégie l'accès des utilisateurs pour éviter les blocages massifs. Ce comportement peut être modifié via les options.
- Prise en charge intégrée de la liste blanche par IP exacte et sous-réseau CIDR.
Installation
-
Accédez à votre serveur via SSH et naviguez vers votre répertoire Discourse :
cd /var/discourse -
Ouvrez votre fichier de configuration de conteneur pour l'éditer :
nano containers/app.yml -
Localisez la section
hookset ajoutez la commande de clonage du dépôt directement sous l'installation dedocker_manager:hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/proxytracer/discourse-proxytracer.git -
Sauvegardez le fichier de configuration et reconstruisez votre conteneur Discourse pour compiler le plugin :
./launcher rebuild app
Configuration
- Procurez-vous une clé API standard depuis le Tableau de bord ProxyTracer.
- Naviguez vers votre panneau d'administration Discourse : Admin → Plugins → ProxyTracer pour trouver les paramètres de ProxyTracer.
-
Saisissez votre clé API dans le champ
ProxyTracer API Key. -
Activez les paramètres de protection en basculant
Enabled during Signup,Enabled during Loginet/ouEnabled for All Visitors. -
Ajoutez toutes les IP de confiance ou plages CIDR à la liste
Whitelisted IPs. - (Optionnel) Ajustez les limites de timeout de l'API et de durée du cache Redis en fonction des besoins spécifiques de trafic de votre serveur.
- (Optionnel) Personnalisez le message de blocage qui apparaît aux utilisateurs bloqués. Par exemple, vous pouvez ajouter des instructions pour contacter l'administration du site au cas où ils estiment que le blocage n'est pas justifié et qu'ils n'accèdent pas au site via un proxy ou VPN.

Configuration réseau : Cloudflare et reverse proxys
Veuillez suivre les directives de configuration ci-dessous correspondant à l'architecture de votre serveur pour garantir un transfert précis des adresses IP.
Directement derrière Cloudflare
Ceci s'applique si votre serveur Discourse se connecte directement à Internet et utilise Cloudflare exclusivement pour le DNS et le proxying edge. Dans cette configuration standard, vous devez configurer Discourse pour faire confiance aux plages IP de Cloudflare et extraire la véritable IP du client à partir des en-têtes entrants.
-
Connectez-vous à votre serveur via SSH et éditez votre configuration de conteneur :
nano /var/discourse/containers/app.yml -
Localisez le bloc
templates:et ajoutez le modèle officiel Cloudflaretemplates/cloudflare.template.yml:templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/cloudflare.template.yml" -
Sauvegardez le fichier et reconstruisez le conteneur Discourse pour appliquer les changements :
./launcher rebuild app
Architecture de proxy multi-couches (Cloudflare + reverse proxy local)
Ceci s'applique si votre instance Discourse est routée via un panneau de gestion de serveur local ou un reverse proxy (ex. : CloudPanel, Nginx Proxy Manager, Traefik, Plesk) situé derrière Cloudflare. Dans une architecture de reverse proxy multi-couches (ou « double »), le modèle standard Discourse cloudflare.template.yml échouera car le trafic est transmis à Discourse par votre interface réseau locale, et non directement par Cloudflare. N'utilisez pas le modèle Cloudflare dans ce scénario.
Vous devez plutôt configurer votre reverse proxy local pour extraire la véritable IP du client à partir de l'en-tête CF-Connecting-IP, mais uniquement pour le trafic provenant d'adresses IP Cloudflare de confiance. Transmettre cet en-tête aveuglément sans vérifier la source permet aux utilisateurs malveillants de contourner les limites de débit et les bannissements en usurpant leur adresse IP.
# IPv4 Cloudflare IPs, see https://www.cloudflare.com/ips/
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
# IPv6 Cloudflare IPs
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;Ensuite, localisez votre directive location / ou @reverse_proxy. Grâce à la configuration ci-dessus, Nginx résoudra désormais $remote_addr vers la véritable IP du client uniquement si la requête est effectivement passée par Cloudflare. Modifiez vos en-têtes de transfert IP comme suit :
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}Sauvegardez la configuration et rechargez le service Nginx de votre hôte. Une reconstruction du conteneur Discourse n'est pas nécessaire pour cette étape.
Validation & Tests
Pour vérifier que votre configuration réseau transmet correctement les données à ProxyTracer :
- Naviguez vers votre tableau de bord d'administration Discourse : Admin → Users.
-
Examinez les colonnes
Registration IPouLast IPpour l'activité récente.-
Configuration incorrecte : Si vous observez des IP Cloudflare (voir ici pour la liste complète) ou des IP de réseau local (ex. :
127.0.0.1,172.x.x.x), le transfert IP échoue. ProxyTracer ne peut pas protéger votre site dans cet état. - Configuration correcte : Si vous observez des adresses IP résidentielles standard et uniques, votre architecture réseau est correctement configurée et ProxyTracer surveille activement votre trafic.
-
Configuration incorrecte : Si vous observez des IP Cloudflare (voir ici pour la liste complète) ou des IP de réseau local (ex. :
Accès d'urgence
cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exitLicence
Ce plugin est distribué sous la licence GNU Affero General Public License v3.0 (AGPLv3).