Como Segmentar o Apache com Let’s Encrypt no Ubuntu

Introdução

Let’s Encrypt é uma Autoridade Certificadora (CA) que facilita a obtenção e instalação de certificados TLS/SSL gratuitos, permitindo assim a criptografia HTTPS em servidores web. Ele simplifica o processo, fornecendo um cliente de software, Certbot, que tenta automatizar a maioria (se não todos) dos passos necessários. Atualmente, todo o processo de obtenção e instalação de um certificado é completamente automatizado tanto no Apache quanto no Nginx.

Nesta guia, você usará o Certbot para obter um certificado SSL gratuito para o Apache no Ubuntu e garantirá que este certificado seja configurado para renovação automática.

Este tutorial usa um arquivo de host virtual separado em vez do arquivo de configuração padrão do Apache para configurar o site que será protegido pelo Let’s Encrypt. Recomendamos criar novos arquivos de host virtual do Apache para cada domínio hospedado em um servidor, pois isso ajuda a evitar erros comuns e mantém os arquivos de configuração padrão como uma configuração de fallback.

Como Garantir a Segurança do Apache com Let’s Encrypt no Ubuntu

  1. Instalando o Certbot
  2. Verificando a Configuração do Seu Virtual Host do Apache
  3. Permitindo HTTPS Através do Firewall
  4. Obtendo um Certificado SSL
  5. Verificando a Renovação Automática do Certbot

Pré-requisitos

Para seguir este tutorial, você precisará:

  • Um servidor Ubuntu configurado com um usuário não-root com privilégios administrativos sudo e firewall habilitado. Você pode configurar isso seguindo nosso tutorial de configuração inicial do servidor para Ubuntu.

  • Um nome de domínio registrado por completo. Este tutorial usará seu_domínio como exemplo ao longo do texto. Você pode comprar um nome de domínio no Namecheap, obter um de graça no Freenom, ou usar o registrador de domínio de sua escolha.

  • Os dois seguintes registros DNS foram configurados para o seu servidor. Você pode seguir a introdução da DigitalOcean DNS para obter detalhes sobre como adicioná-los.

    • Um registro A com seu_dominio apontando para o endereço IP público do seu servidor.
    • Um registro A com www.seu_dominio apontando para o endereço IP público do seu servidor.
  • O Apache foi instalado seguindo a Como Instalar o Apache no Ubuntu. Certifique-se de que você tem um arquivo de host virtual para o seu domínio. Este tutorial usará /etc/apache2/sites-available/seu_dominio.conf como exemplo.

Passo 1 — Instalando o Certbot

Para obter um certificado SSL com Let’s Encrypt, você precisa instalar o software Certbot no seu servidor. Você usará os repositórios de pacotes Ubuntu padrão para isso.

Primeiro, atualize o índice local de pacotes:

  1. sudo apt update

Você precisa de dois pacotes: certbot e python3-certbot-apache. Este último é um plugin que integra o Certbot com o Apache, tornando possível automatizar a obtenção de um certificado e configurar HTTPS no seu servidor web com um único comando:

  1. sudo apt install certbot python3-certbot-apache

Você será solicitado a confirmar a instalação pressionando S, depois ENTER.

O Certbot agora está instalado no seu servidor. Na próxima etapa, você verificará a configuração do Apache para garantir que seu host virtual esteja configurado de maneira adequada. Isso garantirá que o script do cliente certbot será capaz de detectar seus domínios e reconfigurar seu servidor web para usar automaticamente o certificado SSL recém-gerado.

Etapa 2 — Verificando sua Configuração de Host Virtual do Apache

Para obter e configurar automaticamente o SSL para seu servidor web, o Certbot precisa encontrar o host virtual correto dentro dos arquivos de configuração do Apache. Os nomes de domínio do seu servidor serão recuperados das diretivas ServerName e ServerAlias definidas dentro do bloco de configuração VirtualHost.

Se você seguiu o passo de configuração de host virtual no tutorial de instalação do Apache, deve ter um bloco VirtualHost configurado para seu domínio em /etc/apache2/sites-available/seu_dominio.conf com as diretivas ServerName e também ServerAlias já configuradas de maneira adequada.

Para confirmar se isso está configurado, abra o arquivo de host virtual para seu domínio usando nano ou seu editor de texto preferido:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Encontre as linhas existentes ServerName e ServerAlias. Elas devem ser listadas da seguinte forma:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Se você já tem seus ServerName e ServerAlias configurados assim, pode sair do seu editor de texto e passar para a próxima etapa. Se a configuração atual do seu host virtual não corresponder ao exemplo, atualize-a conforme necessário. Se você estiver usando nano, pode sair pressionando CTRL+X, depois Y e ENTER para confirmar suas alterações, se houver. Em seguida, execute o seguinte comando para validar suas alterações:

  1. sudo apache2ctl configtest

Você deve receber Syntax OK como resposta. Se você receber um erro, reabra o arquivo do host virtual e verifique se há algum erro de digitação ou caractere faltando. Uma vez que a sintaxe do seu arquivo de configuração esteja correta, recarregue o Apache para que as alterações entrem em vigor:

  1. sudo systemctl reload apache2

Com essas alterações, o Certbot será capaz de encontrar o bloco VirtualHost correto e atualizá-lo.

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

Etapa 3 — Permitindo HTTPS Através do Firewall

Se você tiver o firewall UFW habilitado, conforme recomendado pelos guias de pré-requisitos, precisará ajustar as configurações para permitir o tráfego HTTPS. Após a instalação, o Apache registra vários perfis de aplicativos UFW diferentes. Você pode usar o perfil Apache Full para permitir tanto o tráfego HTTP quanto HTTPS no seu servidor.

Para verificar que tipo de tráfego está atualmente permitido no seu servidor, verifique o status:

  1. sudo ufw status

Se você seguiu um dos nossos guias de instalação do Apache, terá uma saída semelhante à seguinte, o que significa que apenas o tráfego HTTP na porta 80 está atualmente permitido:

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

Para permitir o tráfego HTTPS, permita o perfil “Apache Full”:

  1. sudo ufw allow 'Apache Full'

Em seguida, exclua o perfil redundante “Apache”:

  1. sudo ufw delete allow 'Apache'

Seu status será exibido como a seguir:

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

Agora você está pronto para executar o Certbot e obter seus certificados.

Passo 4 — Obtendo um Certificado SSL

O Certbot oferece várias maneiras de obter certificados SSL através de plugins. O plugin do Apache cuidará de reconfigurar o Apache e recarregar a configuração sempre que necessário. Para usar este plugin, execute o seguinte:

  1. sudo certbot --apache

Este script solicitará que você responda a uma série de perguntas para configurar seu certificado SSL. Primeiro, ele pedirá um endereço de e-mail válido. Este e-mail será usado para notificações de renovação e avisos de segurança:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

Depois de fornecer um endereço de e-mail válido, pressione ENTER para prosseguir para o próximo passo. Você será então solicitado a confirmar se concorda com os termos de serviço do Let’s Encrypt. Você pode confirmar pressionando Y e em seguida ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Em seguida, você será solicitado a compartilhar seu e-mail com a Electronic Frontier Foundation para receber notícias e outras informações. Se você não quiser se inscrever para seus conteúdos, escreva N. Caso contrário, escreva Y e pressione ENTER para prosseguir para a próxima etapa:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

A próxima etapa solicitará que você informe ao Certbot quais domínios você gostaria de ativar o HTTPS. Os nomes de domínio listados são obtidos automaticamente da sua configuração de host virtual do Apache, então é importante garantir que você tenha as configurações corretas de ServerName e ServerAlias no seu host virtual. Se você quiser habilitar o HTTPS para todos os nomes de domínio listados (recomendado), pode deixar o prompt em branco e pressionar ENTER para prosseguir. Caso contrário, selecione os domínios que você deseja habilitar o HTTPS, listando cada número apropriado, separado por vírgulas e/ ou espaços, e então pressione ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

Depois desta etapa, a configuração do Certbot estará concluída e você será apresentado às observações finais sobre seu novo certificado e onde localizar os arquivos gerados:

Output
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Seu certificado agora está instalado e carregado na configuração do Apache. Tente recarregar seu site usando https:// e observe o indicador de segurança do seu navegador. Ele deve indicar que seu site está adequadamente seguro, tipicamente com um ícone de cadeado na barra de endereço.

Você pode usar o SSL Labs Server Test para verificar a nota do seu certificado e obter informações detalhadas sobre ele, desde a perspectiva de um serviço externo.

No próximo e último passo, você testará a função de renovação automática do Certbot, que garante que seu certificado será renovado automaticamente antes da data de expiraçã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 serve para incentivar os usuários a automatizarem o processo de renovação de seus certificados, além de garantir que certificados mal utilizados ou chaves roubadas expirem mais cedo do que tarde.

O pacote certbot que você instalou cuida das renovações, incluindo um script de renovação em /etc/cron.d, que é gerenciado por um serviço systemctl chamado certbot.timer. Esse script é executado duas vezes ao dia e renovará automaticamente qualquer certificado que estiver dentro de trinta dias de expiração.

Para verificar o status desse serviço e garantir que ele está ativo, execute o seguinte:

  1. sudo systemctl status certbot.timer

Sua saída será semelhante ao seguinte:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

Para testar o processo de renovação, você pode fazer um teste simulado com o certbot:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Se você não receber nenhum erro, está tudo pronto. Quando necessário, o Certbot renovará seus certificados e recarregará o Apache para aplicar as mudanças. Se o processo de renovação automatizada falhar algum dia, o Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, avisando quando seu certificado está prestes a expirar.

Conclusão

Neste tutorial, você instalou o cliente Let’s Encrypt certbot, configurou e instalou um certificado SSL para seu domínio e confirmou que o serviço de renovação automática do Certbot está ativo dentro do systemctl. Se você tiver mais perguntas sobre o uso do Certbot, sua documentação é um bom lugar para começar.

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