Skip to Content

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

  1. Acesse seu servidor via SSH e navegue até o diretório do Discourse:
    cd /var/discourse
  2. Abra o arquivo de configuração do seu container para edição:
    nano containers/app.yml
  3. Localize a seção hooks e adicione o comando de clonagem do repositório diretamente abaixo da instalação do 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. Salve o arquivo de configuração e reconstrua o container do Discourse para compilar o plugin:
    ./launcher rebuild app

Configuração:

  1. Obtenha uma chave de API padrão no Painel do ProxyTracer.
  2. Navegue até o painel de administração do seu Discourse: Admin → Plugins → ProxyTracer para encontrar as configurações do ProxyTracer.
  3. Insira sua chave de API no campo ProxyTracer API Key.
  4. Ative os parâmetros de proteção marcando Enabled during Signup, Enabled during Login e/ou Enabled for All Visitors.
  5. Adicione quaisquer IPs ou faixas CIDR confiáveis à lista Whitelisted IPs.
  6. (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.
  7. (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.

Settings Screenshot

Configuração de Rede: Cloudflare e Proxies Reversos

Para que o ProxyTracer funcione com eficiência, a aplicação Discourse deve receber o endereço IP real do cliente. Se a sua infraestrutura utiliza Cloudflare ou outro proxy reverso, o Discourse pode, por padrão, registrar o endereço IP do nó de proxy, tornando a análise do ProxyTracer imprecisa.

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.

  1. Conecte-se ao seu servidor via SSH e edite a configuração do container: nano /var/discourse/containers/app.yml
  2. Localize o bloco templates: e adicione o template oficial da 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. 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.

Exemplo com Nginx: Primeiro, defina as faixas de IP da Cloudflare como proxies confiáveis na configuração do seu bloco de servidor (fora do bloco location):
# 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:

  1. Navegue até o painel administrativo do Discourse: Admin → Users.
  2. Analise as colunas Registration IP ou Last IP para 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.

Acesso de Emergência

💡
Ficou bloqueado? Se você bloquear acidentalmente seu próprio endereço IP durante a configuração do ProxyTracer (ex.: se você estiver conectado a uma VPN no momento), poderá recuperar o acesso desativando o plugin via SSH:
cd /var/discourse ./launcher enter app rails c SiteSetting.proxytracer_enabled = false exit exit

Licença

Este plugin é licenciado sob a GNU Affero General Public License v3.0 (AGPLv3).

Última atualização