Skip to Content

Discourse

L'integrazione ufficiale di ProxyTracer per Discourse. Questo plugin aggiunge la threat intelligence di ProxyTracer alla tua community, rilevando e bloccando automaticamente VPN, proxy, datacenter e nodi Tor noti.

Il plugin è distribuito attraverso questo repository GitHub.

Caratteristiche

  • Controllo granulare che consente agli amministratori di imporre la convalida dell'IP durante la registrazione di nuovi utenti, l'autenticazione degli utenti esistenti o globalmente per tutti i visitatori del sito.
  • Il caching integrato che utilizza l'API nativa Redis di Discourse memorizza le valutazioni recenti degli indirizzi IP, riducendo drasticamente le chiamate API esterne e garantendo latenza zero.
  • In caso di timeout dell'API o errore di rete, il plugin dà priorità all'accesso degli utenti (fail-open) per prevenire blocchi generalizzati. Questo comportamento può essere modificato nelle impostazioni.
  • Supporto integrato per whitelist di indirizzi IP esatti e subnet CIDR (es. 192.168.1.0/24).

Installazione

  1. Accedi al tuo server via SSH e naviga nella directory di Discourse:
    cd /var/discourse
  2. Apri il file di configurazione del container per la modifica:
    nano containers/app.yml
  3. Individua la sezione hooks e aggiungi il comando di clone del repository direttamente sotto l'installazione di 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. Salva il file di configurazione e ricompila il container Discourse per compilare il plugin:
    ./launcher rebuild app

Configurazione:

  1. Ottieni una chiave API standard dalla Dashboard di ProxyTracer.
  2. Accedi al tuo pannello di amministrazione Discourse: Admin → Plugins → ProxyTracer per trovare le impostazioni di ProxyTracer.
  3. Inserisci la tua chiave API nel campo ProxyTracer API Key.
  4. Attiva i parametri di protezione selezionando Enabled during Signup, Enabled during Login e/o Enabled for All Visitors.
  5. Aggiungi eventuali IP o intervalli CIDR attendibili all'elenco Whitelisted IPs.
  6. (Opzionale) Regola i limiti di timeout dell'API e la durata della cache Redis in base alle esigenze specifiche di traffico del tuo server.
  7. (Opzionale) Personalizza il messaggio di blocco che appare agli utenti bloccati. Ad esempio, puoi aggiungere istruzioni per contattare l'amministrazione del sito nel caso in cui ritengano che il blocco non sia giustificato e non stiano accedendo tramite proxy o VPN.

Settings Screenshot

Configurazione di Rete: Cloudflare e Reverse Proxy

Affinché ProxyTracer funzioni in modo efficace, l'applicazione Discourse deve ricevere il vero indirizzo IP del client. Se la tua infrastruttura utilizza Cloudflare o un altro reverse proxy, Discourse potrebbe registrare per impostazione predefinita l'indirizzo IP del nodo proxy, rendendo inaffidabile il rilevamento di ProxyTracer.

Segui le linee guida di configurazione sottostanti corrispondenti all'architettura del tuo server per garantire un inoltro IP accurato.

Integrazione Diretta con Cloudflare (Installazione Standard)

Questo si applica se il tuo server Discourse si collega direttamente a Internet e utilizza Cloudflare esclusivamente per DNS e proxy edge. In questa configurazione standard, devi configurare Discourse in modo che consideri attendibili gli intervalli IP di Cloudflare ed estragga l'IP reale del client dagli header in entrata.

  1. Connettiti al tuo server via SSH e modifica la configurazione del container: nano /var/discourse/containers/app.yml
  2. Individua il blocco templates: e aggiungi il template ufficiale 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. Salva il file e ricompila il container Discourse per applicare le modifiche: ./launcher rebuild app

Architettura Proxy Multi-Livello (Cloudflare + Reverse Proxy Locale)

Questo si applica se la tua istanza Discourse è instradata attraverso un pannello di gestione server locale o un reverse proxy (es. CloudPanel, Nginx Proxy Manager, Traefik, Plesk) posizionato dietro Cloudflare. In un'architettura di reverse proxy a più livelli (o "doppio"), il template standard cloudflare.template.yml fallirà poiché il traffico viene passato a Discourse dalla tua interfaccia di rete locale e non direttamente da Cloudflare. Non utilizzare il template Cloudflare in questo scenario.

Devi invece configurare il tuo reverse proxy locale per estrarre l'IP reale del client dall'header CF-Connecting-IP, ma solo per il traffico proveniente da indirizzi IP Cloudflare attendibili. Passare ciecamente questo header senza verificare l'origine consente a utenti malintenzionati di aggirare rate limit e ban falsificando il proprio indirizzo IP.

Esempio Nginx: Per prima cosa, definisci gli intervalli IP di Cloudflare come proxy attendibili nella configurazione del blocco server (all'esterno del blocco location):
# IP IPv4 di Cloudflare, vedi 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; # IP IPv6 di Cloudflare 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;

Successivamente, individua la tua direttiva location / o @reverse_proxy. Grazie alla configurazione sopra, Nginx risolverà ora in modo sicuro $remote_addr verso l'IP reale del client solo se la richiesta è effettivamente passata attraverso Cloudflare. Modifica i tuoi header di inoltro IP come segue:

location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... }

Salva la configurazione e ricarica il servizio Nginx del tuo host. Non è necessaria la ricompilazione del container Discourse per questo passaggio.

Validazione e Test

Per verificare che la tua configurazione di rete stia trasmettendo con successo i dati corretti a ProxyTracer:

  1. Accedi alla dashboard amministrativa di Discourse: Admin → Users.
  2. Esamina le colonne Registration IP o Last IP per l'attività recente.
    • Configurazione Errata: Se osservi IP Cloudflare (vedi qui per l'elenco completo) o IP di rete locale (es. 127.0.0.1, 172.x.x.x), l'inoltro IP sta fallendo. ProxyTracer non può proteggere il tuo sito in questo stato.
    • Configurazione Corretta: Se osservi indirizzi IP residenziali standard e univoci, la tua architettura di rete è configurata correttamente e ProxyTracer sta monitorando attivamente il tuo traffico.

Accesso di Emergenza

💡
Bloccato fuori? Se blocchi accidentalmente il tuo indirizzo IP durante la configurazione di ProxyTracer (ad es. sei attualmente connesso a una VPN), puoi riottenere l'accesso disabilitando il plugin tramite SSH:
cd /var/discourse ./launcher enter app rails c SiteSetting.proxytracer_enabled = false exit exit

Licenza

Questo plugin è rilasciato sotto licenza GNU Affero General Public License v3.0 (AGPLv3).

Ultimo aggiornamento il