Discourse
A integração oficial do ProxyTracer para o Discourse. Este plugin traz inteligência de IP de nível corporativo para sua comunidade, detectando automaticamente VPNs, proxies, datacenters e nós Tor conhecidos, e oferecendo a opção de impedi-los de se registrar, fazer login ou até mesmo de visualizar completamente seu fórum Discourse.
O plugin é distribuído através deste repositório no GitHub.
Recursos
- Controle granular que permite aos administradores aplicar a validação de IP durante novos cadastros de usuários, autenticação de usuários existentes ou globalmente para todos os visitantes do site.
- Cache Redis integrado que armazena avaliações recentes de endereços IP, reduzindo drasticamente as chamadas de API externa e garantindo zero latência.
- Em caso de timeout da API ou falha de rede, o plugin prioriza o acesso do usuário para evitar bloqueios em larga escala. Esse comportamento pode ser alterado através das opções.
- Suporte nativo para lista de permissões (whitelist) de IPs exatos e sub-redes CIDR.
Instalação
-
Acesse seu servidor via SSH e navegue até o diretório do Discourse:
cd /var/discourse -
Abra o arquivo de configuração do seu container para edição:
nano containers/app.yml -
Localize a seção
hookse adicione o comando de clonagem do repositório diretamente abaixo da instalação dodocker_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 -
Salve o arquivo de configuração e reconstrua o container do Discourse para compilar o plugin:
./launcher rebuild app
Configuração:
- Obtenha uma chave de API padrão no Painel do ProxyTracer.
- Navegue até o painel de administração do seu Discourse: Admin → Plugins → ProxyTracer para encontrar as configurações do ProxyTracer.
-
Insira sua chave de API no campo
ProxyTracer API Key. -
Ative os parâmetros de proteção marcando
Enabled during Signup,Enabled during Logine/ouEnabled for All Visitors. -
Adicione quaisquer IPs ou faixas CIDR confiáveis à lista
Whitelisted IPs. - (Opcional) Ajuste o timeout da API e os limites de duração do cache Redis para atender aos requisitos específicos de tráfego do seu servidor.
- (Opcional) Personalize a Mensagem de Bloqueio exibida para usuários bloqueados. Por exemplo, você pode adicionar instruções para entrar em contato com a administração do site caso acreditem que o bloqueio foi indevido e que não estão acessando o site por meio de um proxy ou VPN.

Configuração de Rede: Cloudflare e Proxies Reversos
Siga as diretrizes de configuração abaixo que correspondem à arquitetura do seu servidor para garantir o encaminhamento correto de IP.
Integração Direta com Cloudflare (Instalação Padrão)
Isso se aplica se o seu servidor Discourse se conecta diretamente à internet e utiliza a Cloudflare exclusivamente para DNS e proxy de borda. Nessa configuração padrão, você deve configurar o Discourse para confiar nas faixas de IP da Cloudflare e extrair o IP real do cliente a partir dos cabeçalhos recebidos.
-
Conecte-se ao seu servidor via SSH e edite a configuração do container:
nano /var/discourse/containers/app.yml -
Localize o bloco
templates:e adicione o template oficial da 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" -
Salve o arquivo e reconstrua o container do Discourse para aplicar as alterações:
./launcher rebuild app
Arquitetura de Proxy em Múltiplas Camadas (Cloudflare + Proxy Reverso Local)
Isso se aplica se a sua instância do Discourse for roteada por meio de um painel de gerenciamento de servidor local ou proxy reverso (ex.: CloudPanel, Nginx Proxy Manager, Traefik, Plesk) posicionado atrás da Cloudflare. Em uma arquitetura de proxy reverso em múltiplas camadas (ou "duplo"), o template padrão cloudflare.template.yml do Discourse falhará porque o tráfego é entregue ao Discourse pela sua interface de rede local, e não diretamente pela Cloudflare. Não use o template da Cloudflare neste cenário.
Em vez disso, você deve configurar seu proxy reverso local para extrair o IP real do cliente a partir do cabeçalho CF-Connecting-IP, mas apenas para o tráfego originado de endereços IP confiáveis da Cloudflare. Repassar esse cabeçalho de forma cega sem verificar a origem permite que usuários mal-intencionados burlem limites de taxa e banimentos falsificando seu endereço IP.
# IPs IPv4 da Cloudflare, consulte 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;
# IPs IPv6 da 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;Em seguida, localize a diretiva location / ou @reverse_proxy. Devido à configuração acima, o Nginx agora resolverá com segurança $remote_addr para o IP real do cliente somente se a requisição tiver realmente passado pela Cloudflare. Modifique os cabeçalhos de encaminhamento de IP da seguinte forma:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}Salve a configuração e recarregue o serviço Nginx do seu host. Não é necessário reconstruir o container do Discourse para esta etapa.
Validação e Testes
Para verificar se sua configuração de rede está repassando com sucesso os dados corretos para o ProxyTracer:
- Navegue até o painel administrativo do Discourse: Admin → Users.
-
Analise as colunas
Registration IPouLast IPpara atividades recentes.-
Configuração Incorreta: Se você observar IPs da Cloudflare (veja aqui a lista completa) ou IPs de rede local (ex.:
127.0.0.1,172.x.x.x), o encaminhamento de IP está falhando. O ProxyTracer não consegue proteger seu site neste estado. - Configuração Correta: Se você observar endereços IP residenciais padrão e exclusivos, sua arquitetura de rede está configurada corretamente e o ProxyTracer está monitorando ativamente o seu tráfego.
-
Configuração Incorreta: Se você observar IPs da Cloudflare (veja aqui a lista completa) ou IPs de rede local (ex.:
Acesso de Emergência
cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exitLicença
Este plugin é licenciado sob a GNU Affero General Public License v3.0 (AGPLv3).