Vamos criptografar

Proxy reverso Nginx com HTTPS via LetsEncrypt

Proxy reverso Nginx com HTTPS via LetsEncrypt
Este é um acompanhamento do meu postagem anterior onde configuramos um servidor proxy reverso simples usando Nginx. Nesta postagem, vamos proteger a conexão entre o cliente e o servidor proxy reverso usando TLS gratuito (um.k.um certificado SSL) de LetsEncrypt. Eu encorajo você a verificar a postagem mencionada sobre proxy reverso para o básico.

Pré-requisitos

  1. Um servidor com IP público estático. É aqui que o Nginx está sendo executado.
  2. Servidores de back-end com o site pretendido em execução em HTTP
  3. Um nome de domínio registrado. Vou usar o ranvirslog.com como meu nome de domínio principal e os dois sites estão em FQDNs - ww1.ranvirslog.com e ww2ranvirslog.com

Configurar

Então, os endereços IP mudaram desde a última vez, já que estou fazendo esta configuração novamente. Aqui estão os novos IPs e nomes de host.

VM / Nome do host IP Público IP privado Papel / Função
ReverseProxy 68.183.214.151 10.135.127.136 Ponto de terminação TLS e servidor proxy reverso
web1 N / D 10.135.126.102 Hospedagem ww1.ranvirslog.com

site na porta 80 HTTP

web2 N / D 10.135.126.187 Hospedagem

ww2.ranvirslog.com

site na porta 80 HTTP

Os registros DNS são configurados de forma que ambos os sites (subdomínios diferentes) estejam apontando para o mesmo IP público estático. Este é o endereço IP do nosso proxy reverso Nginx:

Uma gravação Valor
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Para fazer nosso DNS reverso funcionar em HTTP não criptografado, criamos dois arquivos em / etc / conf.d / nomeado ww1.conf e ww2.conf cada um com a seguinte configuração:

/ etc / conf.d / ww1.conf

servidor
escute 80;
ouvir [::]: 80;
server_name ww1.ranvirslog.com;
localização /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / ww2.conf

servidor
escute 80;
ouvir [::]: 80;
server_name ww2.ranvirslog.com;
localização /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

O sistema operacional que estamos usando é o Ubuntu 18.04 LTS e temos removido o arquivo / etc / nginx / sites-enabled / default para que o Nginx possa atuar puramente como um DNS reverso usando as configurações mostradas acima.

Objetivo

Com o DNS reverso (e os sites de back-end) já instalado e funcionando, nosso objetivo é instalar um único certificado TLS para ambos os FQDNs (que é ww1.ranvirslog.com e ww2.ranvirslog.com) em nosso proxy reverso Nginx.

O tráfego entre qualquer cliente e o proxy reverso será criptografado, mas o tráfego entre o proxy reverso e os servidores de backend não será criptografado. No entanto, esta ainda é uma opção infinitamente mais segura do que não ter HTTPS. Para casos em que o proxy reverso e os vários servidores da web estão no mesmo host, digamos que se você estiver usando contêineres Docker para hospedar todos no mesmo VPS, mesmo esse tráfego não criptografado está contido em um único host.

Instalando Certbot

Certbot é um programa cliente que será executado em nosso servidor proxy reverso e negociará um certificado TLS com LetsEncrypt. Isso provará ao LetsEncrypt que o servidor de fato tem controle dos FQDNs sobre os quais afirma ter controle. Não vamos nos preocupar sobre como o Certbot faz isso.

Tradicionalmente, você pode usar o Certbot como um software autônomo que apenas obterá os certificados (que são basicamente apenas chaves criptográficas longas) e os salvará no servidor. Mas, felizmente, para a maioria dos sistemas operacionais, existem plug-ins personalizados para Nginx, Apache e outros softwares. Vamos instalar o Certbot com o plugin Nginx. Isso configurará automaticamente o Nginx para usar as chaves recém-obtidas e se livrar de regras inseguras, como ouvir HTTP na porta 80.

Se você estiver usando sistemas baseados em Debian, como no meu caso estou usando o Ubuntu 18.04 LTS, então a instalação é uma brisa.

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt update
$ sudo apt install python-certbot-nginx

Outros sistemas operacionais, seu RedHat, Gentoo, Fedora podem seguir as instruções oficiais listadas aqui.

Depois de instalar o Certbot com plug-in Nginx para a sua combinação de sistema operacional, podemos ir direto ao que interessa.

Obtendo certificados TLS

Para obter o certificado TLS pela primeira vez, execute o seguinte comando:

$ sudo certbot --nginx

Isso vai passar por uma série de perguntas interativas, conforme mostrado abaixo:

  1. Digite seu e-mail

Salvando log de depuração em / var / log / letsencrypt / letsencrypt.registro
Plug-ins selecionados: Autenticador nginx, Instalador nginx
Digite o endereço de e-mail (usado para renovação urgente e avisos de segurança) (digite 'c' para cancelar): [email protegido]

  1. Concordar com os TOS

Leia os Termos de Serviço em https: // letsencrypt.org / documents / LE-SA-v1.2-novembro-15-2017.pdf. Você deve concordar para se registrar no servidor ACME em https: // acme-v02.api.deixa criptografar.org / diretório
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Boletim Opcional

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Você estaria disposto a compartilhar seu endereço de e-mail com a Electronic Frontier Foundation, um parceiro fundador do projeto Let's Encrypt e a organização sem fins lucrativos que desenvolve o Certbot? Gostaríamos de enviar a você um e-mail sobre nosso trabalho criptografando a web, notícias da EFF, campanhas e formas de apoiar a liberdade digital.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(S) es / (N) o: S

  1. Em seguida, ele detectará os nomes de domínio em seu servidor e, se você quiser selecionar todos os domínios, basta pressionar

Para quais nomes você gostaria de ativar o HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Selecione os números apropriados separados por vírgulas e / ou espaços, ou deixe a entrada em branco para selecionar todas as opções mostradas (digite 'c' para cancelar):

  1. Redirecionar tudo para TLS. Eu escolhi a opção 2 para redirecionar tudo para SSL, mas seu caso de uso pode ser diferente. Para novas instalações de back-end, é seguro escolher a opção 2.

Escolha se deseja ou não redirecionar o tráfego HTTP para HTTPS, removendo o acesso HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Sem redirecionamento - não faça mais alterações na configuração do servidor da web.
2: Redirecionar - Faça todas as solicitações redirecionarem para o acesso HTTPS seguro. Escolha esta opção para novos sites ou se tiver certeza de que seu site funciona em HTTPS. Você pode desfazer esta alteração editando a configuração do seu servidor web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Selecione o número apropriado [1-2] e [enter] (pressione 'c' para cancelar): 2

Se tudo correr bem, ele mostrará esta mensagem, apenas para seus nomes de domínio.

Parabéns! Você ativou https: // ww1 com sucesso.ranvirslog.com e https: // ww2.ranvirslog.com Você pode visitar os FQDNs e perceber que os sites agora têm a placa do cadeado sugerindo que tudo está criptografado.

Olhe para os arquivos de configuração

Se você visualizar os arquivos de configuração que criamos anteriormente, ou seja, / etc / conf.d / ww1.conf e / etc / conf.d / ww2.conf, você notará que todas as regras “Listen 80” desapareceram e algumas novas linhas foram adicionadas informam ao servidor que a comunicação precisa ser criptografada e a localização dos certificados e chaves para realizar a referida criptografia.

Eu recomendo fortemente olhar através dos arquivos de configuração, uma vez que também pode ensiná-lo a instalar certificados e escrever arquivos de configuração corretamente.

Renovação de Certificação

Os certificados LetsEncrypt típicos são válidos por 90 dias e, antes que eles expirem, você precisa renová-los. Você pode usar o Certbot para primeiro testar a renovação, executando o comando:

$ sudo certbot renew --dry-run

Se a operação for bem-sucedida, você verá a seguinte mensagem:

Parabéns, todas as renovações foram bem-sucedidas. Os seguintes certificados foram renovados:

/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (sucesso)
** DRY RUN: simulando a 'renovação do certbot' perto da expiração do certificado
** (Os certificados de teste acima não foram salvos.)

Agora você pode adicionar um Cron job que tentará a renovação a cada semana ou mais. Certbot não renovará os certificados, a menos que seja realmente devido a isso, então você não precisa se preocupar. O comando para a renovação real é:

$ certbot renovar

Adicione-o ao cron job do root usando:

$ sudo crontab -e

No prompt a seguir, selecione seu editor favorito (escolha Nano se não tiver certeza) e adicione as seguintes linhas no final do arquivo agora aberto:


# Por exemplo, você pode executar um backup de todas as suas contas de usuário
# às 5 a.m todas as semanas com:
# 0 5 * * 1 tar -zcf / var / backups / home.tgz / home /
#
# Para obter mais informações, consulte as páginas de manual do crontab (5) e cron (8)
#
# m h dom mon dow comando
* 2 * * 2 renovação do certificado

Isso executará o comando certbot renew às 2 da manhã em qualquer minuto aleatório, no segundo dia de cada semana.

Conclusão

Se você é novo em certificados TLS, experimentar coisas como HSTS pode ser arriscado. Uma vez que essas mudanças são irreversíveis. No entanto, se você quiser mergulhar na toca do coelho da segurança, posso recomendar o blog de Troy Hunt, que é uma das principais inspirações por trás deste artigo.

Instale o último jogo de estratégia OpenRA no Ubuntu Linux
OpenRA é um motor de jogo de estratégia em tempo real Libre / Free que recria os primeiros jogos Westwood como o clássico Command & Conquer: Red Alert...
Instale o emulador Dolphin mais recente para Gamecube e Wii no Linux
O Dolphin Emulator permite que você jogue seus jogos de Gamecube e Wii escolhidos em computadores pessoais Linux (PC). Sendo um emulador de jogo disp...
Como usar o GameConqueror Cheat Engine no Linux
O artigo cobre um guia sobre como usar o mecanismo de cheat GameConqueror no Linux. Muitos usuários que jogam no Windows costumam usar o aplicativo “C...