Como Segurar o Nginx com Let’s Encrypt no Ubuntu 20.04

Introdução

O Let’s Encrypt é uma Autoridade de Certificação (CA) que fornece uma maneira fácil de obter e instalar certificados TLS/SSL gratuitos, possibilitando assim o uso de HTTPS criptografado em servidores web. Ele simplifica o processo ao fornecer um cliente de software, Certbot, que tenta automatizar a maioria (se não todos) os passos necessários. Atualmente, todo o processo de obtenção e instalação de um certificado é totalmente automatizado tanto no Apache quanto no Nginx.

Neste tutorial, você usará o Certbot para obter um certificado SSL gratuito para o Nginx no Ubuntu 20.04 e configurará seu certificado para renovar automaticamente.

Este tutorial usará um arquivo de configuração separado do servidor Nginx em vez do arquivo padrão. Recomendamos criar novos arquivos de bloco de servidor Nginx para cada domínio, pois isso ajuda a evitar erros comuns e mantém os arquivos padrão como uma configuração de fallback.

Deixe a DigitalOcean se preocupar com a administração do Nginx e do Let’s Encrypt. O DigitalOcean App Platform permitirá que você faça implantações diretamente do GitHub em minutos. O App Platform também lidará com certificados SSL e roteamento para você.

Pré-requisitos

Para seguir este tutorial, você precisará de:

  • Um servidor Ubuntu 20.04 configurado seguindo este tutorial de configuração inicial do servidor para Ubuntu 20.04, incluindo um usuário não-root habilitado para sudo e um firewall.

  • Um nome de domínio registrado. Este tutorial usará example.com como exemplo. Você pode comprar um nome de domínio na Namecheap, obter um gratuitamente com a Freenom, ou usar o registrador de domínio de sua escolha.

  • Ambos os seguintes registros DNS configurados para o seu servidor. Se você estiver usando a DigitalOcean, consulte nossa documentação de DNS para detalhes sobre como adicioná-los.

    • Um registro A com example.com apontando para o endereço IP público do seu servidor.
    • Um registro A com www.example.com apontando para o endereço IP público do seu servidor.
  • Nginx instalado seguindo Como Instalar o Nginx no Ubuntu 20.04. Certifique-se de ter um bloco de servidor para seu domínio. Este tutorial usará /etc/nginx/sites-available/example.com como exemplo.

Passo 1 — Instalando o Certbot

O primeiro passo para usar o Let’s Encrypt para obter um certificado SSL é instalar o software Certbot no seu servidor.

Instale o Certbot e seu plugin Nginx com apt:

  1. sudo apt install certbot python3-certbot-nginx

O Certbot está agora pronto para uso, mas para que ele possa configurar automaticamente o SSL para o Nginx, precisamos verificar algumas configurações do Nginx.

Passo 2 — Confirmando a Configuração do Nginx

O Certbot precisa ser capaz de encontrar o bloco server correto na sua configuração do Nginx para poder configurar automaticamente o SSL. Especificamente, ele faz isso procurando por uma diretiva server_name que corresponda ao domínio para o qual você solicita um certificado.

Se você seguiu o passo de configuração do bloco de servidor no tutorial de instalação do Nginx, você deve ter um bloco de servidor para o seu domínio em /etc/nginx/sites-available/example.com com a diretiva server_name já configurada adequadamente.

Para verificar, abra o arquivo de configuração para o seu domínio usando nano ou seu editor de texto favorito:

  1. sudo nano /etc/nginx/sites-available/example.com

Procure pela linha existente server_name. Deve se parecer com isso:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

Se for o caso, saia do seu editor e siga para o próximo passo.

Se não ocorrer, atualize-o para corresponder. Em seguida, salve o arquivo, saia do seu editor e verifique a sintaxe das suas edições de configuração:

  1. sudo nginx -t

Se você receber um erro, reabra o arquivo de bloco do servidor e verifique se há erros de digitação ou caracteres ausentes. Uma vez que a sintaxe do seu arquivo de configuração esteja correta, recarregue o Nginx para carregar a nova configuração:

  1. sudo systemctl reload nginx

O Certbot agora pode encontrar o bloco server correto e atualizá-lo automaticamente.

Em seguida, vamos atualizar o firewall para permitir o tráfego HTTPS.

Passo 3 — Permitindo HTTPS pelo Firewall

Se você tiver o firewall ufw ativado, conforme recomendado pelos guias pré-requisitos, precisará ajustar as configurações para permitir o tráfego HTTPS. Felizmente, o Nginx registra alguns perfis com o ufw durante a instalação.

Você pode ver a configuração atual digitando:

  1. sudo ufw status

Provavelmente, parecerá com isso, significando que apenas o tráfego HTTP é permitido para o servidor web:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Para permitir também o tráfego HTTPS, permita o perfil Nginx Full e exclua a permissão redundante do perfil Nginx HTTP:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

O status deve ficar assim agora:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Em seguida, vamos executar o Certbot e buscar nossos certificados.

Passo 4 — Obtendo um Certificado SSL

O Certbot oferece uma variedade de maneiras de obter certificados SSL por meio de plugins. O plugin do Nginx cuidará de reconfigurar o Nginx e recarregar a configuração sempre que necessário. Para usar este plugin, digite o seguinte:

  1. sudo certbot --nginx -d example.com -d www.example.com

Isto executa certbot com o plugin --nginx, usando -d para especificar os nomes de domínio para os quais gostaríamos que o certificado fosse válido.

Se esta for a primeira vez que você executa o certbot, será solicitado que você insira um endereço de e-mail e concorde com os termos de serviço. Depois de fazer isso, o certbot irá se comunicar com o servidor Let’s Encrypt e, em seguida, executar um desafio para verificar que você controla o domínio para o qual está solicitando um certificado.

Se isso for bem-sucedido, o certbot perguntará como você gostaria de configurar suas configurações HTTPS.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Selecione sua escolha e pressione ENTER. A configuração será atualizada, e o Nginx recarregará para aplicar as novas configurações. O certbot encerrará com uma mensagem informando que o processo foi bem-sucedido e onde seus certificados estão armazenados:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Seus certificados foram baixados, instalados e carregados. Tente recarregar seu site usando https:// e observe o indicador de segurança do seu navegador. Deve indicar que o site está devidamente seguro, geralmente com um ícone de cadeado. Se você testar seu servidor usando o Teste de Servidor SSL Labs, ele obterá uma classificação A.

Vamos finalizar testando o processo de renovação.

Passo 5 — Verificando a Renovação Automática do Certbot

Os certificados do Let’s Encrypt são válidos apenas por noventa dias. Isso é para incentivar os usuários a automatizar o processo de renovação de seus certificados. O pacote certbot que instalamos cuida disso para nós, adicionando um temporizador do systemd que será executado duas vezes por dia e renovará automaticamente qualquer certificado que esteja a trinta dias da expiração.

Você pode verificar o status do temporizador com systemctl:

  1. sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

Para testar o processo de renovação, você pode fazer uma simulação com certbot:

  1. sudo certbot renew --dry-run

Se você não ver erros, está tudo pronto. Quando necessário, o Certbot renovará seus certificados e recarregará o Nginx para aplicar as alterações. Se o processo de renovação automática falhar, o Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, avisando quando seu certificado estiver prestes a expirar.

Conclusão

Neste tutorial, você instalou o cliente Let’s Encrypt certbot, baixou certificados SSL para seu domínio, configurou o Nginx para usar esses certificados e configurou a renovação automática de certificados. Se você tiver mais perguntas sobre o uso do Certbot, a documentação oficial é um bom lugar para começar.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04