Federação do Mastodon por trás de um proxy Cloudflare: Notas de configuração
🔍 WiseChecker

Federação do Mastodon por trás de um proxy Cloudflare: Notas de configuração

Ao executar uma instância do Mastodon atrás de um proxy Cloudflare, a federação com outras instâncias pode falhar silenciosamente. O Mastodon depende do endereço IP real dos servidores remotos para verificar assinaturas e aplicar limites de taxa. O proxy da Cloudflare oculta o IP de origem real e pode alterar cabeçalhos HTTPS. Este artigo explica como configurar o Mastodon, Nginx e Cloudflare para que a federação funcione de forma confiável.

Sem a configuração adequada, outras instâncias veem o IP da Cloudflare em vez do IP do seu servidor. A verificação de assinatura falha e sua instância pode ser bloqueada ou ignorada pelo fediverso. Abordamos as configurações necessárias da Cloudflare, alterações na configuração do Nginx e variáveis de ambiente do Mastodon para restaurar a federação adequada.

Principais conclusões: Federação do Mastodon atrás da Cloudflare

  • Cloudflare SSL/TLS > Full (strict): Necessário para preservar o certificado do cliente original e evitar erros de SSL durante a federação.
  • Módulo ngx_http_realip_module do Nginx: Restaura o IP remoto real a partir do cabeçalho CF-Connecting-IP da Cloudflare para que o Mastodon veja a origem correta.
  • Variável de ambiente TRUSTED_PROXY_IP do Mastodon: Informa ao Mastodon para confiar no intervalo de IPs da Cloudflare para verificação de assinatura e limitação de taxa.

Por que o proxy Cloudflare quebra a federação do Mastodon

O Mastodon usa assinaturas HTTP para verificar se as mensagens ActivityPub recebidas vêm de uma instância remota legítima. A assinatura inclui o endereço IP do remetente. Quando a Cloudflare atua como proxy reverso, ela substitui o IP do servidor remoto por um dos seus próprios endereços IP. O Mastodon então vê o IP do proxy e falha na validação da assinatura.

Além disso, o Mastodon aplica limites de taxa com base no IP de conexão. Se todos os servidores remotos parecerem vir do intervalo de IPs da Cloudflare, sua instância pode limitar o tráfego legítimo ou permitir abuso de um único ponto. A solução envolve três camadas: configuração SSL da Cloudflare, módulo de IP real do Nginx e configurações de proxy confiável do Mastodon.

Modo de criptografia SSL/TLS da Cloudflare

A Cloudflare oferece vários modos SSL/TLS. Para a federação do Mastodon, você deve usar Full (strict). Este modo exige um certificado SSL válido no servidor de origem e criptografa o tráfego de ponta a ponta. O modo Flexible descriptografa o tráfego na Cloudflare e o criptografa novamente para o seu servidor, o que quebra a cadeia de certificados que outras instâncias usam para verificar a identidade do seu servidor. Full (strict) garante que o certificado apresentado aos servidores federados seja o mesmo que sua origem serve.

Módulo de IP real do Nginx

O Nginx pode substituir o IP do cliente na solicitação pelo valor de um cabeçalho confiável. A Cloudflare envia o IP original do cliente no cabeçalho CF-Connecting-IP. Você deve configurar o Nginx para ler este cabeçalho e definir o IP real para todas as solicitações proxy. Sem isso, o Mastodon recebe o IP da Cloudflare como endereço remoto.

Configuração de proxy confiável do Mastodon

A variável de ambiente TRUSTED_PROXY_IP do Mastodon informa ao aplicativo quais intervalos de IP são seguros para extrair o IP real do cliente. Você deve incluir os intervalos de IP publicados pela Cloudflare. Isso permite que o Mastodon use o IP real para verificação de assinatura e limitação de taxa em vez do IP do proxy.

Passos para configurar a federação do Mastodon atrás da Cloudflare

  1. Defina o SSL/TLS da Cloudflare como Full (strict)
    No painel da Cloudflare para seu domínio, vá em SSL/TLS > Overview e selecione Full (strict). Certifique-se de que seu servidor de origem tenha um certificado SSL válido instalado. Este modo criptografa o tráfego de ponta a ponta e apresenta seu certificado de origem às instâncias federadas.
  2. Instale o módulo de IP real do Nginx
    A maioria das instalações do Nginx inclui o módulo ngx_http_realip_module por padrão. Verifique com nginx -V 2>&1 | grep realip. Se estiver faltando, recompile o Nginx com --with-http_realip_module.
  3. Adicione a configuração de IP real ao bloco do servidor
    Edite o arquivo de configuração do Nginx do Mastodon (geralmente /etc/nginx/sites-available/mastodon). Dentro do bloco server, adicione:
    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;
    real_ip_header CF-Connecting-IP;
    Estes são os intervalos IPv4 da Cloudflare. Adicione linhas semelhantes para IPv6 se sua instância suportar. A diretiva real_ip_header informa ao Nginx qual cabeçalho contém o IP original.
  4. Reinicie o Nginx
    Execute sudo systemctl restart nginx para aplicar as alterações. Verifique se o Nginx está usando o IP real observando os logs de acesso: tail -f /var/log/nginx/access.log. Você deve ver IPs remotos que não são endereços da Cloudflare.
  5. Defina a variável de ambiente TRUSTED_PROXY_IP do Mastodon
    Edite o arquivo de ambiente do Mastodon (geralmente .env.production). Adicione ou atualize a linha:
    TRUSTED_PROXY_IP=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22
    Inclua intervalos IPv6 se aplicável. Salve o arquivo.
  6. Reinicie os serviços do Mastodon
    Execute sudo systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming. Isso recarrega a variável de ambiente e aplica a configuração de proxy confiável.
  7. Teste a federação a partir de outra instância
    Use uma conta do Mastodon em uma instância diferente para seguir uma conta na sua instância. Verifique os logs do seu servidor em busca de erros de assinatura. Execute sudo journalctl -u mastodon-web -f e procure por linhas contendo HTTP Signature ou verification failed. Se não houver erros, a federação está funcionando corretamente.

Problemas comuns após a configuração do proxy Cloudflare

Solicitações de federação expiram ou retornam 502 Bad Gateway

Isso geralmente significa que a Cloudflare não consegue alcançar seu servidor de origem. Verifique se seu firewall permite tráfego dos intervalos de IP da Cloudflare. Verifique também se seu certificado SSL é válido e se o bloco do servidor escuta na porta 443. Se você usar um certificado autoassinado, o Full (strict) da Cloudflare o rejeitará.

Instâncias remotas recebem erros de certificado SSL

Quando a Cloudflare está configurada como Flexible SSL, seu certificado de origem não é validado. Outras instâncias veem o certificado da Cloudflare, que não corresponde ao certificado esperado do seu domínio. Mude para Full (strict) e certifique-se de que sua origem tenha um certificado confiável de uma CA pública como Let’s Encrypt.

Limitação de taxa bloqueia tráfego legítimo

Se o Mastodon ainda vir IPs da Cloudflare, os limites de taxa serão aplicados a todo o tráfego do pool de IPs da Cloudflare. Verifique se TRUSTED_PROXY_IP inclui os intervalos corretos e se o real_ip_header do Nginx está definido como CF-Connecting-IP. Reinicie tanto o Nginx quanto o Mastodon após as alterações.

Cloudflare vs Conexão Direta para Federação do Mastodon

Item Atrás do Proxy Cloudflare Conexão Direta
Visibilidade do IP IP da Cloudflare mostrado para instâncias federadas IP real do seu servidor mostrado
Configuração SSL Full (strict) necessário; certificado deve estar na origem Qualquer certificado válido na origem funciona
Limitação de taxa Deve configurar TRUSTED_PROXY_IP para evitar bloqueios falsos Funciona automaticamente
Proteção DDoS Cloudflare filtra tráfego malicioso antes de chegar ao servidor Você deve lidar com DDoS por conta própria
Latência Salto adicional pode aumentar ligeiramente a latência Conexão direta é mais rápida

Após concluir a configuração, sua instância do Mastodon federará corretamente com o resto do fediverso. Teste seguindo uma conta em uma instância remota e verificando se as postagens aparecem em sua linha do tempo federada. Para monitoramento avançado, ative temporariamente MASTODON_DEBUG=true no arquivo de ambiente para registrar dados detalhados do handshake de federação. Remova-o após o teste para reduzir o ruído do log.