Para você mesmo devops ou configurar proxies Nginx para Apache Tomcat no Ubuntu em 5 minutos com https e firewall



Não sou administrador, mas às vezes há tarefas mais fáceis (e mais interessantes) de resolver do que delegar a alguém.

Ocasionalmente, precisamos "elevar" o contêiner do servlet (geralmente o Apache Tomcat) e configurar o proxy para ele, a terminação ssl (ou simplesmente https) e cobrir tudo com um firewall (deixando apenas ssh e http / https de fora).

Aconteceu que, na última semana, resolvi esse problema três vezes (quando as estrelas se tornaram e antes disso - dois anos atrás) e essa experiência foi transformada nessa pequena obra.

Portanto, considerando o servidor Ubuntu 18.04 ou 16.04 (provavelmente você não terá problemas com as versões anteriores 14.04). Se você não possui um servidor Ubuntu, pode "buscá-lo" rapidamente, por exemplo, no Digital Ocean (meu link de referência). Depois de escrever o artigo, notei que o DO para novas contas dá US $ 100 por 60 dias para tentar, se você indicar um empréstimo.

DNS


Para um esquema simples para obter um certificado https gratuito do Let's Encrypt, precisamos acessar o servidor DNS. Escrevemos nele o endereço IP do nosso servidor Ubuntu com o nome, digamos, xyz. Digamos, por definição, que você tenha meu domínio.com, ou seja, O nome DNS do nosso servidor será xyz.mydomain.com

Instalação


Instale o Apache Tomcat (usarei a versão 8)

apt install tomcat8 

E agora Nginx

 apt install nginx-core 

Personalização


Nginx


Configure o Nginx registrado anteriormente no nome do servidor DNS (arquivo / etc / nginx / sites-available / default )

 server_name xyz.mydomain.com; 

Registramos o link no Apache Tomcat instalado (se você não alterou nada, ele "permanece" na porta 8080). Precisamos adicionar o bloco upstream ao bloco do servidor .

 upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ... 

Faça alterações no bloco de localização e redirecione todo o tráfego para o Apache Tomcat

 server { ... location / { # try_files $uri $uri/ =404; include proxy_params; proxy_pass http://tomcat/; } 

Verificamos se tudo foi inserido corretamente

 service nginx configtest 

e reinicie o nginx

 service nginx restart 

Apache tomcat


Em princípio, esta parte é opcional e, se não for importante para você que os endereços IP, portas, o esquema para o qual a solicitação está chegando (estou falando de https) e o servidor solicitado sejam enviados ao tomcat, essa etapa poderá ser omitida. No entanto, em alguns casos, esta etapa é necessária (por exemplo, para Java Web Start, também conhecida como tecnologia JNLP).

Adicione ao arquivo /etc/tomcat8/server.xml no bloco <Host /> .

 <Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host> 

Reinicie o tomcat

 service tomcat8 restart 

Certificado HTTP


Um certificado https com verificação via http nos ajudará a obter o bot certbot, ou melhor, sua modificação para nginx'a - python-certbot-nginx

No Ubuntu 18.04, para instalar o certbot, basta executar

 apt install python-certbot-nginx 

Para o Ubuntu 16.04 - é necessário mexer na adição de repositórios, etc. (consulte o guia detalhado para o link ).

Lançamos

 certbot --nginx 

No processo, especifique seu email, aceite o contrato de licença, não permita que “atrapalhem” nossos dados com o Let's Encrypt, confirme o nome DNS para o qual o certificado será emitido, aceite que o bot em si “configurará” o nginx.

Voila :)

Por precaução, verificamos que a renovação do certificado será aprovada sem problemas (o certificado é emitido por 90 dias e depois pode ser prorrogado indefinidamente pelo mesmo período).

 certbot renew --dry-run 

E, para a paranóia interna, verificamos se o arquivo cron está no lugar

 ls -al /etc/cron.d/certbot 

Firewall


Paramos e fazemos backup (instantâneo) da máquina virtual.

 ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added 

Ore!
 ufw enable ufw status 

Verificamos que tudo deu certo - o site é acessível via https, o tráfego http é redirecionado e outras portas além das listadas acima e o ssh estão fechadas com segurança.

PS Espero sinceramente que este texto possa ser útil a alguém e terei prazer em receber críticas construtivas.

PPS Ou talvez o ALL onisciente me diga a substituição do certbot para Windows? Você precisa obter o certificado inicial (idealmente, atualizá-lo de acordo com a programação ou, em geral, o brilho chique). Eu mesmo configurei o nginx. Sim, eu entendo que você provavelmente pode pegar a ferramenta para criptografar + IIS e usá-la no meu script, mas de repente existe um "ideal" pronto?

Source: https://habr.com/ru/post/pt434010/


All Articles