O autor selecionou a Electronic Frontier Foundation para receber uma doação como parte do programa Write for DOnations.
Introdução
O Cloudflare é um serviço que fica entre o visitante e o servidor do proprietário do site, atuando como um proxy reverso para websites. O Cloudflare fornece uma Rede de Distribuição de Conteúdo (CDN), bem como mitigação de DDoS e serviços de servidor de nomes de domínio distribuídos.
O Nginx é um servidor web popular responsável por hospedar alguns dos maiores e mais movimentados sites na internet. É comum que organizações sirvam websites com Nginx e usem o Cloudflare como CDN e provedor de DNS.
Neste tutorial, você irá proteger seu website servido pelo Nginx com um certificado Origin CA do Cloudflare e então configurar o Nginx para usar solicitações de extração autenticadas. As vantagens de usar essa configuração são que você se beneficia do CDN do Cloudflare e de uma rápida resolução DNS, enquanto garante que todas as conexões passem pelo Cloudflare. Isso impede que qualquer solicitação maliciosa alcance seu servidor.
Pré-requisitos
Para completar este tutorial, você precisará do seguinte:
- Um servidor Ubuntu 22.04 configurado seguindo o guia de configuração inicial do servidor Ubuntu 22.04, incluindo um usuário não root com permissões de
sudo
e um firewall. - O Nginx instalado em seu servidor. Você pode seguir nosso guia sobre como instalar o Nginx no Ubuntu 22.04.
- A Cloudflare account.
- A registered domain added to your Cloudflare account that points to your Nginx server. Our guide on how to mitigate DDoS attacks against your website with Cloudflare can help you set this up. Our introduction to DNS terminology, components, and concepts can also provide assistance.
- Um Bloco de Servidor Nginx configurado para seu domínio, o que pode ser feito seguindo a Etapa 5 de Como Instalar o Nginx no Ubuntu 22.04.
Etapa 1 — Gerando um Certificado TLS do Origin CA
O Cloudflare Origin CA permite que você gere um certificado TLS gratuito assinado pelo Cloudflare para instalar em seu servidor Nginx. Ao usar o certificado TLS gerado pelo Cloudflare, você pode garantir a conexão entre os servidores do Cloudflare e seu servidor Nginx.
Para gerar um certificado com o Origin CA, faça login na sua conta do Cloudflare em um navegador da web. Selecione o domínio que deseja proteger e vá para a seção SSL/TLS do painel do Cloudflare. A partir daí, acesse a guia Servidor de Origem e clique no botão Criar Certificado:
Deixe a opção padrão de Gerar chave privada e CSR com o Cloudflare selecionada.
Clique em Criar e você verá um diálogo com o Certificado de Origem e a Chave Privada. Você precisa transferir tanto o certificado de origem quanto a chave privada do Cloudflare para o seu servidor. Por razões de segurança, as informações da Chave Privada não serão exibidas novamente, então copie a chave para o seu servidor antes de clicar em Ok.
Você usará o diretório /etc/ssl
no servidor para armazenar os arquivos de certificado de origem e chave privada. A pasta já existe no servidor.
Primeiro, copie o conteúdo do Certificado de Origem exibido na caixa de diálogo no seu navegador.
Em seguida, no seu servidor, abra o arquivo /etc/ssl/cert.pem
no seu editor de texto preferido:
Cole o conteúdo do certificado no arquivo. Em seguida, salve e saia do editor. Se estiver usando o nano
, pressione Ctrl+X
, depois quando solicitado, Y
e depois Enter.
Então volte ao seu navegador e copie o conteúdo da Chave privada. Abra o arquivo /etc/ssl/key.pem
para edição:
Cole a chave privada no arquivo, salve o arquivo e saia do editor.
Nota: Às vezes, ao copiar o certificado e a chave do painel da Cloudflare e colá-los nos arquivos relevantes no servidor, linhas em branco são inseridas. O Nginx tratará tais certificados e chaves como inválidos, portanto, certifique-se de que não há linhas em branco nos seus arquivos.
Aviso: O Certificado de CA de Origem da Cloudflare é confiável apenas pela Cloudflare e, portanto, deve ser usado apenas por servidores de origem que estejam conectados ativamente à Cloudflare. Se em algum momento você pausar ou desabilitar a Cloudflare, seu certificado de CA de origem apresentará um erro de certificado não confiável.
Agora que você copiou os arquivos de chave e certificado para o seu servidor, você precisa atualizar a configuração do Nginx para usá-los.
Passo 2 — Instalando o Certificado de CA de Origem no Nginx
Na seção anterior, você gerou um certificado de origem e uma chave privada usando o painel da Cloudflare e salvou os arquivos no seu servidor. Agora você vai atualizar a configuração do Nginx para o seu site usar o certificado de origem e a chave privada para proteger a conexão entre os servidores da Cloudflare e o seu servidor.
Primeiro, certifique-se de que o UFW permitirá o tráfego HTTPS. Habilite Nginx Full
, que abrirá tanto a porta 80
(HTTP) quanto a porta 443
(HTTPS):
Agora recarregue o UFW:
Por fim, verifique se as suas novas regras são permitidas e se o UFW está ativo:
Você verá uma saída como esta:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Agora você está pronto para ajustar o bloco do servidor Nginx. O Nginx cria um bloco de servidor padrão durante a instalação. Remova-o se ainda existir, pois você já configurou um bloco de servidor personalizado para seu domínio:
Em seguida, abra o arquivo de configuração Nginx para seu domínio:
O arquivo deve se parecer com isso:
Você modificará o arquivo de configuração do Nginx para fazer o seguinte:
- Ouvir na porta
80
e redirecionar todas as solicitações para usarhttps
. - Ouvir na porta
443
e usar o certificado de origem e a chave privada adicionados na seção anterior.
Modifique o arquivo para que se pareça com o seguinte:
Salve o arquivo e saia do editor.
Em seguida, teste para garantir que não haja erros de sintaxe em nenhum dos seus arquivos de configuração do Nginx:
Se não encontrou problemas, reinicie o Nginx para habilitar suas alterações:
Agora vá para a seção SSL/TLS do painel do Cloudflare, navegue até a guia Visão Geral, e altere o Modo de criptografia SSL/TLS para Completo (estrito). Isso informa ao Cloudflare para sempre criptografar a conexão entre o Cloudflare e seu servidor de origem Nginx.
Agora visite seu site em https://seu_domínio
para verificar se está configurado corretamente. Você verá sua página inicial exibida, e o navegador informará que o site é seguro.
Para visualizar os detalhes do seu certificado, acesse as Ferramentas do Desenvolvedor do seu navegador, selecione a guia Segurança, e então clique em Visualizar Certificado.
Nota: Você pode notar que o seu certificado não lista a Cloudflare como o emissor. Isso ocorre porque a Cloudflare pode usar outras autoridades de certificação, como a Let’s Encrypt. Para uma lista completa, consulte a documentação de produtos da Cloudflare para autoridades de certificação.
Na próxima seção, você configurará Origens Autenticadas para verificar se seu servidor de origem está de fato se comunicando com a Cloudflare e não com outro servidor. Ao fazer isso, o Nginx será configurado para aceitar apenas solicitações que usem um certificado de cliente válido da Cloudflare; todas as solicitações que não passarem pela Cloudflare serão descartadas.
Passo 3 — Configurando Origens Autenticadas
O certificado da Autoridade de Origem ajudará a Cloudflare a verificar se está se comunicando com o servidor de origem correto. Este passo usará a Autenticação de Cliente TLS para verificar se seu servidor Nginx de origem está se comunicando com a Cloudflare.
Num aperto de mão TLS autenticado pelo cliente, ambos os lados fornecem um certificado a ser verificado. O servidor de origem é configurado para aceitar apenas solicitações que usem um certificado de cliente válido da Cloudflare. Solicitações que não passaram pela Cloudflare serão descartadas, pois não terão o certificado da Cloudflare. Isso significa que os atacantes não podem contornar as medidas de segurança da Cloudflare e se conectar diretamente ao seu servidor Nginx.
A Cloudflare apresenta certificados assinados por uma CA com o seguinte certificado:
-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----
Você também pode baixar o certificado diretamente da documentação da Cloudflare.
Copie este certificado.
Em seguida, crie o arquivo /etc/ssl/cloudflare.crt
para armazenar o certificado da Cloudflare:
Adicione o certificado ao arquivo. Em seguida, salve o arquivo e saia do editor.
Agora atualize a configuração do seu Nginx para usar Pulls de Origem Autenticados por TLS. Abra o arquivo de configuração para o seu domínio:
Adicione as diretivas ssl_client_certificate
e ssl_verify_client
conforme mostrado no seguinte exemplo:
Salve o arquivo e saia do editor.
Em seguida, teste o Nginx para garantir que não haja erros de sintaxe em sua configuração do Nginx:
Se nenhum problema for encontrado, reinicie o Nginx para habilitar suas alterações:
Finalmente, para habilitar as Puxadas Autenticadas, abra a seção SSL/TLS no painel da Cloudflare, navegue até a guia Servidor de Origem e ative a opção Puxadas de Origem Autenticadas.
Agora visite o seu site em https://seu_domínio
para verificar se foi configurado corretamente. Como antes, você verá sua página inicial exibida.
Para verificar se o seu servidor só aceitará pedidos assinados pelo CA da Cloudflare, desative a opção Puxadas de Origem Autenticadas e depois recarregue o seu site. Você deverá receber a seguinte mensagem de erro:
Seu servidor de origem gera um erro se o CA da Cloudflare não assinar um pedido.
Nota: A maioria dos navegadores irá armazenar em cache os pedidos, então para ver a mudança acima você pode usar o modo Incógnito/Navegação Privada no seu navegador. Para evitar que a Cloudflare armazene em cache os pedidos enquanto configura o seu site, navegue até Visão Geral no painel da Cloudflare e ative o Modo de Desenvolvimento.
Agora que você sabe que funciona corretamente, retorne à seção SSL/TLS no painel da Cloudflare, navegue até a guia Servidor de Origem e ative novamente a opção Puxadas de Origem Autenticadas.
Conclusão
Neste tutorial, você protegeu o seu site alimentado pelo Nginx criptografando o tráfego entre o Cloudflare e o servidor Nginx usando um certificado de CA de origem do Cloudflare. Em seguida, configurou Autenticação de Origem Autenticada no servidor Nginx para garantir que ele apenas aceite solicitações dos servidores do Cloudflare, impedindo que qualquer outra pessoa se conecte diretamente ao servidor Nginx.