Usando Discourse com Cloudflare: Melhores práticas

Usando o Discourse com Cloudflare

:bookmark: Este guia explica como configurar e usar o Discourse com Cloudflare, incluindo melhores práticas de segurança e dicas de solução de problemas.

:person_raising_hand: Nível de usuário necessário: Administrador

:information_source: O acesso ao console é necessário para instalações auto-hospedadas

Resumo

O Cloudflare pode aprimorar sua instância do Discourse com melhor desempenho através de CDN, camadas de segurança adicionais como proteção DDoS e suporte HTTPS. Este guia abrange o processo de configuração e as melhores práticas para uma configuração otimizada.

Por que usar Cloudflare com Discourse

Usar o Cloudflare com sua instância do Discourse oferece vários benefícios-chave:

  • Desempenho: A CDN do Cloudflare pode melhorar o acesso global a ativos comuns, aprimorando a experiência do usuário em todo o mundo (fonte)
  • Segurança: Camadas de proteção adicionais, incluindo:

:warning: Para instalações auto-hospedadas, embora o Cloudflare ofereça esses benefícios, ele adiciona complexidade à sua configuração.

Configurando o Cloudflare

  1. Familiarize-se com os Fundamentos do Cloudflare
  2. Siga as direções de configuração para configurar o Cloudflare para seu domínio e obter os benefícios de segurança, desempenho e confiabilidade

Melhores práticas de configuração

Configurações de DNS

  • Certifique-se de que os registros DNS que apontam para sua instância do Discourse estejam em proxy
  • Acesse as configurações de DNS em dash.cloudflare.com/?to=/:account/:zone/dns

Configuração de SSL/TLS

  • Defina o modo de criptografia como “Full (strict)”
  • Acesse as configurações de SSL/TLS em dash.cloudflare.com/?to=/:account/:zone/ssl-tls

:warning: Uma configuração incorreta de SSL/TLS pode causar loops de redirecionamento

Configuração de cache

  • Defina o nível de cache como “Standard”
  • Acesse as configurações de cache em dash.cloudflare.com/?to=/:account/:zone/caching/configuration

Regras de página

Crie as seguintes regras de página em dash.cloudflare.com/?to=/:account/:zone/rules:

  • Defina o Nível de Cache como “Bypass” para community.example.com/session/*
  • Configure as Configurações de Regras para normalizar URLs de entrada

Configurações de rede

Configure o seguinte em dash.cloudflare.com/?to=/:account/:zone/network:

Habilitar:

  • Compatibilidade com IPv6
  • Geolocalização de IP
  • Registro de Erros de Rede
  • Roteamento Onion

Desabilitar:

  • Pseudo IPv4
  • Buffering de Resposta
  • Cabeçalho True-Client-IP
  • gRPC

Defina o Tamanho Máximo de Upload de acordo com a política do seu site (100 MB recomendado)

Configurações de WAF (Web Application Firewall)

Se o seu plano Cloudflare suportar Regras Gerenciadas, crie o seguinte:

  1. Ignorar WAF na criação/edição de posts:
(http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})
  1. Para usuários do plugin Data Explorer, ignorar WAF em consultas de administrador:
(http.request.uri.path contains "/admin/plugins/explorer/queries/" and http.request.method eq "PUT")

Para ambas as regras:

  • Escolha “Skip all remaining rules” (Ignorar todas as regras restantes)
  • Habilite “Log matching requests” (Registrar solicitações correspondentes)

Acesse as configurações de WAF em dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules

Otimização de conteúdo

Configure o seguinte em dash.cloudflare.com/?to=/:account/:zone/speed/optimization:

  • Habilitar Brotli
  • Desabilitar Rocket Loader™
  • Desabilitar Auto Minify

:warning: O Discourse frequentemente recebe relatórios de site fora do ar devido ao Rocket Loader™ estar habilitado

Configuração adicional para instalações auto-hospedadas

Para garantir o encaminhamento correto do endereço IP, adicione o seguinte à seção de templates em seu containers/app.yml:

- "templates/cloudflare.template.yml"

Relacionado: Como configurar o Cloudflare?

Recursos de suporte

Solução de problemas

Problemas de Política de Segurança de Conteúdo (CSP)

Se você encontrar erros de CSP:

  • Verifique se o Rocket Loader está desabilitado
  • Verifique se os scripts estão corretamente adicionados à configuração do site content security policy script src

Funcionalidade OneBox

Se o OneBox estiver sendo bloqueado:

  • Verifique se o Super Bot Fight Mode está habilitado
  • Ajuste a configuração “Definitely automated” se estiver definida como “Managed” ou “Block”
  • Considere criar uma regra de WAF personalizada para o agente do usuário do OneBox
28 curtidas

Bom dia,

Obrigado por este guia que segui à risca, mas encontro um problema, cada vez que ativo o Cloudflare no meu console recebo um erro com o CSP que me exibe (Recusou-se a executar o script inline porque viola a seguinte diretiva de Política de Segurança de Conteúdo: “script-src”) e depois de me indicar os URLs presentes no meu CSP: (É necessária a palavra-chave ‘unsafe-inline’, um hash (‘sha256-VCiGKEA…’) ou um nonce (‘nonce-…’) para ativar a execução inline.

Tentei procurar em todo o lado, mas não consigo encontrar uma solução que não seja desativar o proxy, o que resolve o meu problema?

OBRIGADO.

Você pode verificar se o Rocket Loader está desativado?

Outra coisa é verificar se os scripts são adicionados corretamente à configuração do site content security policy script src.

Se nada disso funcionar, sugiro entrar em contato com a Cloudflare em https://community.cloudflare.com/t/using-discourse-with-cloudflare-best-practices/602890.

1 curtida

Obrigado por isso @nat e @tcloonan

Isso está na minha lista de coisas a fazer há um ou dois anos, mas fui desanimado pela idade de alguns dos tópicos mais antigos sobre este assunto :smiley:

Algum problema ou coisa especial para pessoas que usam AWS S3 para armazenamento e para backups? :thinking:

Você ainda precisa do template do Cloudflare em app.yml para endereços IP verdadeiros ou isso mudou ao longo dos anos?

1 curtida

Sim. Você precisa do template cloudflare. Sem ele, todo o tráfego parecerá vir dos servidores da cloudflare em vez do IP do navegador do usuário.

Não o vejo mencionado no OP, o que parece uma omissão gritante. Como você inferiu que precisava dele?

2 curtidas

Olá! Estou por aqui desde 2014 (alguns anos em silêncio) mas tenho trabalhado para migrar nossa comunidade desde 2020 com um importador personalizado, e estamos trabalhando na segunda versão do nosso plugin interno para inserir e habilitar o bbob como um motor bbcode no Discourse. Você pode acompanhar nosso progresso aqui: GitHub - RpNation/bbcode: RpNation's Official BBCode Implementation for Discourse

Tenho respirado este software há um tempo. Nós usamos Cloudflare, então tenho pesquisado novamente quais, se houver, problemas ele tem com o Discourse, já que agora estamos no estágio em que posso começar a me preocupar com coisas menos vitais que não são consideradas bloqueadoras.

@nat Você poderia adicionar uma edição sobre o template para instâncias auto-hospedadas!

4 curtidas

Feito, obrigado a ambos por apontarem isso!

4 curtidas

Muito obrigado! Esse provavelmente também foi o motivo pelo qual meu site de repente ficou inacessível. Devo ter mexido um pouco demais nas configurações do Cloudflare.

Como meu antigo provedor de domínio só suportava DNSSec de forma inadequada e incorreta, tive que procurar algo novo. Foi quando o Cloudflare me veio à mente. O plano gratuito é completamente suficiente para mim. É uma pena que as tarifas nem sequer escalonem razoavelmente para os requisitos.

2 curtidas

Isso está sendo adicionado a esta localização?

1 curtida

Apenas para fins de precisão, a consulta para a exclusão do WAF é:

(http.request.uri.path eq \"/posts(/[0-9]+)?\" and http.request.method in {\"POST\" \"PUT\"})

Você pode copiar e colar se clicar em Edit expression à esquerda em vez de usar a seleção de formulário.

Notei hoje, quando atualizei, que metade do fórum parou de funcionar devido ao Auto Minify :weary:

Editar: Acabei de notar que este é um post wiki. Tolo de mim, editei o post inicial.

3 curtidas

Modo de criptografia SSL/TLS Completo (estrito). Haverá algum problema se não for fechado? O SSL automático não será definido de qualquer maneira?

Apenas para adicionar a isso, parece que a funcionalidade do OneBox está sendo bloqueada quando o Super Bot Fight Mode está ativado e a configuração Definitely automated está definida como Managed ou block.

Você pode contornar isso configurando uma regra WAF personalizada para o user agent do Onebox, mas talvez haja uma maneira mais segura de fazer isso?

Relacionado a

esta parte pode precisar de uma redação melhor:

@supermathie Sugestão:

você desejará adicionar a seguinte linha ao final da sua seção de templates em containers/app.yml.

conforme ilustrado em Using Discourse with Cloudflare: Best Practices - #11 by shawa

Na melhor das hipóteses, um link para um guia geral sobre templates na configuração do servidor também poderia ser fornecido, o que não consegui encontrar à primeira vista.

Eu sugiro desativar os bots de IA no Cloudflare. Isso pode ser encontrado em segurança → bots → bloquear bots de IA.

Os bots de IA estavam sobrecarregando meu site com 30.000 a 40.000 visualizações de página diariamente. Após ativar este filtro, meu tráfego de bots de IA caiu significativamente.

4 curtidas

O código acima deve ser alterado para:

 - "templates/cloudflare.template.yml"

Obrigado,
Major

2 curtidas

É realmente verdade que o suporte a WebSockets deve ser habilitado no Cloudflare?

Funcionou bem para nós sem por anos, e até onde pude encontrar informações aqui no fórum, o Discourse não faz uso de WebSockets.

Eu não entendo se tenho que fazer isso

Você está certo. Não acredito que usemos WebSockets.

Removi-o e também atualizei o trecho do modelo do usuário acima.

2 curtidas

Enquanto isso, acho que todas as configurações de Rede são irrelevantes para o Discourse:

  • A compatibilidade com IPv6 não pode mais ser desativada e, claro, o Discourse não depende dela, mas pode funcionar perfeitamente em um sistema somente IPv4.
  • A Geolocalização de IP adiciona o cabeçalho CF-IPCountry às solicitações, que, no entanto, não é usado pelo Discourse. Ele usa seu próprio recurso (opcional) do MaxMind.
  • O Registro de Erros de Rede adiciona o cabeçalho de resposta Report-To, que os navegadores podem usar para relatar erros. No entanto, ele está obsoleto e, mesmo que o recurso possa ser ativado com todos os planos do Cloudflare, o elemento do painel para realmente visualizar os relatórios está disponível apenas no plano Enterprise. Portanto, neste caso, para alguns navegadores antigos, pode ser apenas uma regressão de privacidade e sobrecarga de rede.
  • O Roteamento Onion aprimora a privacidade para solicitações provenientes da rede Tor. O Discourse não se importará ou sequer saberá disso.
  • O recurso Pseudo IPv4 pode ser necessário se o host executar algum software, como análises antigas ou similar, que suporta apenas endereços IPv4. Os cabeçalhos proxy do Cloudflare, como Cf-Connecting-IP (ou outros, dependendo do que for configurado), podem ser ajustados para ter um endereço IPv4 mais ou menos único, em vez do endereço IPv6 real do cliente, para contornar o fato de que o suporte a IPv6 para solicitações cliente->Cloudflare não pode mais ser desativado. Novamente, o Discourse não se importará. Quero dizer, seria um problema para, por exemplo, a detecção de GeoIP, mas o recurso está desativado por padrão, e os administradores, é claro, devem ativá-lo apenas se for estritamente necessário pelo software que executam, aceitando a desvantagem de IPs de cliente não verdadeiros. Ele também pode ser configurado para adicionar apenas um novo cabeçalho com o endereço pseudo IPv4, e as análises (ou o que quer que seja) podem então reescrever os cabeçalhos de IP do cliente onde necessário, enquanto as solicitações para o Discourse não seriam afetadas. Em qualquer caso, para a funcionalidade geral do Discourse, o recurso é irrelevante.
  • O Cabeçalho True-Client-IP adiciona apenas este cabeçalho além de CF-Connecting-IP e X-Forwarded-For. O Discourse não o utiliza, e o modelo de configuração do Discourse usa CF-Connecting-IP em vez disso. Portanto, não tem efeito.
  • O gRPC não é usado pelo Discourse, mas ter o Cloudflare habilitado para encaminhar solicitações gRPC não prejudica, assim como com WebSockets. Ambos podem precisar estar habilitados para outro software em execução no mesmo domínio do Cloudflare.
  • O Tamanho Máximo de Upload de 100 MB é o padrão e o mínimo. Tamanhos de upload maiores exigem planos Business ou Enterprise, e o Discourse não falhará se o Cloudflare permitir uploads maiores.

A única coisa sobre a qual não tenho certeza se pode ter um efeito é o Buffer de Resposta. E não posso testar, pois é um recurso exclusivo do Enterprise. Mas não consigo imaginar que o cliente se importe se os pacotes são transmitidos do edge do CF conforme chegam, ou enviados em um único bloco quando concluídos no edge. Para dados em cache (em cache no Cloudflare, quero dizer), isso é feito sempre de qualquer maneira e não causa problemas, pelo menos. Este recurso afeta apenas dados não em cache.

Portanto, basicamente, eu removeria toda a seção “Configurações de Rede” como algo irrelevante para a funcionalidade do Cloudflare, mas outro software pode exigir certas configurações ou os administradores podem preferi-las de uma certa maneira, e devem saber que o Discourse funcionará em qualquer caso.

1 curtida