
No soy administrador, pero a veces hay tareas que son más fáciles (y más interesantes) de resolver que delegar en alguien.
Ocasionalmente, necesitamos "elevar" el contenedor de servlet (más a menudo Apache Tomcat) y configurar el proxy para él, la terminación de SSL (o simplemente https) y cubrirlo todo con un firewall (dejando solo ssh y http / https).
Dio la casualidad de que en la última semana resolví este problema tres veces (a medida que las estrellas se hicieron, y antes de eso, hace dos años) y esta experiencia se transformó en esta pequeña obra.
Entonces, dado el servidor Ubuntu 18.04 o 16.04 (lo más probable es que no tenga problemas con las versiones anteriores 14.04 más o menos). Si no tiene un servidor Ubuntu, puede "recogerlo" rápidamente, por ejemplo, en
Digital Ocean (mi enlace de referencia). Después de escribir el artículo, noté que DO para nuevas cuentas da $ 100 por 60 días para probar, si indica un préstamo.
DNS
Para un esquema simple para obtener un certificado https gratuito de Let's Encrypt, necesitamos acceso al servidor DNS. Escribimos en él la dirección IP de nuestro servidor Ubuntu con el nombre, digamos, xyz. Digamos, por seguridad, que tiene mydomain.com, es decir El nombre DNS de nuestro servidor será xyz.mydomain.com
Instalación
Instale Apache Tomcat (usaré la versión 8)
apt install tomcat8
Y ahora Nginx
apt install nginx-core
Personalización
Nginx
Configure Nginx previamente registrado en el nombre del servidor DNS (archivo
/ etc / nginx / sites-available / default )
server_name xyz.mydomain.com;
Registramos el enlace al Apache Tomcat instalado (si no ha cambiado nada, entonces "vive" en el puerto 8080). Necesitamos agregar el bloque
ascendente al bloque del
servidor .
upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ...
Realice cambios en el bloque de
ubicación y redirija todo el tráfico a Apache Tomcat
server { ... location / {
Verificamos que todo esté ingresado correctamente
service nginx configtest
y reiniciar nginx
service nginx restart
Gato apache
En principio, esta parte es opcional, y si no le importa que las direcciones IP reales, los puertos, el esquema para el que llega la solicitud (estoy hablando de https) y el servidor solicitado se envíen a tomcat, entonces este paso puede omitirse. Sin embargo, en algunos casos este paso es obligatorio (por ejemplo, para Java Web Start, también conocida como tecnología JNLP).
Agregue al archivo
/etc/tomcat8/server.xml en el bloque
<Host /> .
<Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host>
Reiniciar tomcat
service tomcat8 restart
Certificado HTTP
Un certificado https con verificación a través de http nos ayudará a obtener el bot certbot, o más bien su modificación para nginx'a - python-certbot-nginx
En Ubuntu 18.04, para instalar certbot, simplemente ejecute
apt install python-certbot-nginx
Para Ubuntu 16.04: debe jugar con la adición de repositorios, etc. (consulte la
guía detallada del enlace ).
Lanzamos
certbot --nginx
En el proceso, especifique su correo electrónico, acepte el acuerdo de licencia, no nos permita "manipular" nuestros datos con Let's Encrypt, confirme el nombre DNS al que se emitirá el certificado, acepte que el propio bot "configurará" nginx.
Voila :)
Por si acaso, verificamos que la renovación del certificado pasará sin problemas (el certificado se expide por 90 días y luego puede extenderse indefinidamente por el mismo período).
certbot renew --dry-run
Y para la paranoia interna, verificamos que el archivo cron esté en su lugar
ls -al /etc/cron.d/certbot
Cortafuegos
Nos detenemos y hacemos una copia de seguridad (instantánea) de la máquina virtual.
ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added
Rezar
ufw enable ufw status
Verificamos que todo funcionó: se puede acceder al sitio a través de https, se redirige el tráfico http y se cierran de forma segura los puertos que no sean los mencionados anteriormente y ssh.
PD: Espero sinceramente que este texto pueda ser útil para alguien y me complacerá recibir críticas constructivas.
PPS ¿O tal vez el omnisciente TODO me dirá el reemplazo de certbot para Windows? Necesita obtener el certificado inicial (idealmente, actualizarlo de acuerdo con el cronograma, o en general el brillo elegante). Configuré nginx yo mismo. Sí, entiendo que probablemente pueda tomar la herramienta para cifrar + IIS y usarla en mi script, pero ¿de repente hay un "ideal" listo?