Skip to Content

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

  1. Accédez à votre serveur via SSH et naviguez vers votre répertoire Discourse :
    cd /var/discourse
  2. Ouvrez votre fichier de configuration de conteneur pour l'éditer :
    nano containers/app.yml
  3. Localisez la section hooks et ajoutez la commande de clonage du dépôt directement sous l'installation de docker_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
  4. Sauvegardez le fichier de configuration et reconstruisez votre conteneur Discourse pour compiler le plugin :
    ./launcher rebuild app

Configuration

  1. Procurez-vous une clé API standard depuis le Tableau de bord ProxyTracer.
  2. Naviguez vers votre panneau d'administration Discourse : Admin → Plugins → ProxyTracer pour trouver les paramètres de ProxyTracer.
  3. Saisissez votre clé API dans le champ ProxyTracer API Key.
  4. Activez les paramètres de protection en basculant Enabled during Signup, Enabled during Login et/ou Enabled for All Visitors.
  5. Ajoutez toutes les IP de confiance ou plages CIDR à la liste Whitelisted IPs.
  6. (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.
  7. (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.

Settings Screenshot

Configuration réseau : Cloudflare et reverse proxys

Pour que ProxyTracer fonctionne efficacement, l'application Discourse doit recevoir la véritable adresse IP du client. Si votre infrastructure utilise Cloudflare ou un autre reverse proxy, Discourse peut par défaut enregistrer l'adresse IP du nœud proxy, rendant ainsi le travail de ProxyTracer peu fiable.

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.

  1. Connectez-vous à votre serveur via SSH et éditez votre configuration de conteneur : nano /var/discourse/containers/app.yml
  2. Localisez le bloc templates: et ajoutez le modèle officiel Cloudflare templates/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"
  3. 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.

Exemple Nginx : Tout d'abord, définissez les plages IP de Cloudflare comme proxys de confiance dans la configuration de votre bloc serveur (en dehors de votre bloc location) :
# 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 :

  1. Naviguez vers votre tableau de bord d'administration Discourse : Admin → Users.
  2. Examinez les colonnes Registration IP ou Last IP pour 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.

Accès d'urgence

💡
Verrouillé dehors ? Si vous bloquez accidentellement votre propre adresse IP lors de la configuration de ProxyTracer (par exemple, vous êtes actuellement connecté à un VPN), vous pouvez retrouver l'accès en désactivant le plugin via SSH :
cd /var/discourse ./launcher enter app rails c SiteSetting.proxytracer_enabled = false exit exit

Licence

Ce plugin est distribué sous la licence GNU Affero General Public License v3.0 (AGPLv3).

Last updated on