Vamos a cifrar

Proxy inverso Nginx con HTTPS a través de LetsEncrypt

Proxy inverso Nginx con HTTPS a través de LetsEncrypt
Este es un seguimiento de mi Publicación anterior donde configuramos un servidor proxy inverso simple usando Nginx. En esta publicación, aseguraremos la conexión entre el cliente y el servidor proxy inverso usando TLS gratuito (un.k.un certificado SSL) de LetsEncrypt. Te animo a que consultes la publicación mencionada anteriormente sobre proxy inverso para conocer los conceptos básicos.

Prerrequisitos

  1. Un servidor con IP pública estática. Aquí es donde se ejecuta Nginx.
  2. Servidores backend con el sitio web previsto que se ejecuta a través de HTTP
  3. Un nombre de dominio registrado. Estaré usando ranvirslog.com como mi nombre de dominio principal y los dos sitios web están en FQDN - ww1.ranvirslog.com y ww2ranvirslog.com

Configuración

Entonces, las direcciones IP han cambiado desde la última vez, ya que estoy haciendo esta configuración nuevamente. Aquí están las nuevas direcciones IP y nombres de host.

VM / nombre de host IP pública IP privada Rol / Función
ReverseProxy 68.183.214.151 10.135.127.136 Punto de terminación TLS y servidor proxy inverso
web1 N / A 10.135.126.102 Alojamiento ww1.ranvirslog.com

sitio web a través del puerto 80 HTTP

web2 N / A 10.135.126.187 Hosting

ww2.ranvirslog.com

sitio web a través del puerto 80 HTTP

Los registros DNS están configurados como tales, tanto los sitios web (diferentes subdominios) apuntan a la misma IP pública estática. Esta es la dirección IP de nuestro proxy inverso Nginx:

Un registro Valor
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Para que nuestro DNS inverso funcione sobre HTTP sin cifrar, creamos dos archivos en / etc / conf.d / llamado ww1.conf y ww2.conf cada uno con la siguiente configuración:

/ etc / conf.d / ww1.conf

servidor
escucha 80;
escuchar [::]: 80;
nombre_servidor ww1.ranvirslog.com;
localización /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / ww2.conf

servidor
escucha 80;
escuchar [::]: 80;
nombre_servidor ww2.ranvirslog.com;
localización /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

El sistema operativo que estamos usando es Ubuntu 18.04 LTS y tenemos remoto el archivo / etc / nginx / sites-enabled / default para que Nginx pueda actuar puramente como un DNS inverso usando las configuraciones que se muestran arriba.

Objetivo

Con el DNS inverso (y los sitios web de backend) ya en funcionamiento, nuestro objetivo es instalar un solo certificado TLS para ambos FQDN (eso es ww1.ranvirslog.com y ww2.ranvirslog.com) en nuestro proxy inverso Nginx.

El tráfico entre cualquier cliente y el proxy inverso se cifrará, pero el tráfico entre el proxy inverso y los servidores backend no está cifrado. Sin embargo, esta sigue siendo una opción infinitamente más segura que no tener HTTPS en absoluto. Para los casos en los que el proxy inverso y los distintos servidores web están en el mismo host, digamos que si está utilizando contenedores Docker para alojar todos en el mismo VPS, incluso este tráfico no cifrado está contenido en un solo host.

Instalación de Certbot

Certbot es un programa cliente que se ejecutará en nuestro servidor proxy inverso y negociará un certificado TLS con LetsEncrypt. Demostrará a LetsEncrypt que el servidor, de hecho, tiene control de los FQDN sobre los que afirma tener control. No nos preocuparemos de cómo lo hace Certbot.

Tradicionalmente, puede usar Certbot como un software independiente que solo obtendrá los certificados (que son básicamente claves criptográficas largas) y los guardará en el servidor. Pero afortunadamente, para la mayoría de los sistemas operativos hay complementos personalizados para Nginx, Apache y otros softwares. Instalaremos Certbot con el complemento Nginx. Esto configurará automáticamente Nginx para usar las claves recién obtenidas y eliminar las reglas inseguras como escuchar HTTP en el puerto 80.

Si está usando sistemas basados ​​en Debian, como en mi caso, estoy usando Ubuntu 18.04 LTS, entonces la instalación es muy sencilla.

actualización de $ sudo apt
$ sudo apt instalar software-propiedades-común
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa: certbot / certbot
actualización de $ sudo apt
$ sudo apt instalar python-certbot-nginx

Otros sistemas operativos, su RedHat, Gentoo, Fedora pueden seguir las instrucciones oficiales que se enumeran aquí.

Una vez que haya instalado Certbot con el complemento Nginx para su combinación de sistema operativo, podemos ponernos manos a la obra.

Obtener certificados TLS

Para obtener el certificado TLS por primera vez, ejecute el siguiente comando:

$ sudo certbot --nginx

Esto abarcará una serie de preguntas interactivas, como se muestra a continuación:

  1. Introduce tu correo electrónico

Guardando el registro de depuración en / var / log / letsencrypt / letsencrypt.Iniciar sesión
Complementos seleccionados: Authenticator nginx, Installer nginx
Ingrese la dirección de correo electrónico (utilizada para renovaciones urgentes y avisos de seguridad) (Ingrese 'c' para cancelar): [correo electrónico protegido]

  1. Aceptar los TOS

Lea los Términos de servicio en https: // letsencrypt.org / documents / LE-SA-v1.2-noviembre-15-2017.pdf. Debe estar de acuerdo para registrarse con el servidor ACME en https: // acme-v02.api.vamos a cifrar.directorio org /
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Newsletter opcional

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
¿Estaría dispuesto a compartir su dirección de correo electrónico con Electronic Frontier Foundation, socio fundador del proyecto Let's Encrypt y la organización sin fines de lucro que desarrolla Certbot? Nos gustaría enviarle un correo electrónico sobre nuestro trabajo de cifrado de la web, noticias de EFF, campañas y formas de apoyar la libertad digital.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Luego detectará los nombres de dominio en su servidor, y si desea seleccionar todos los dominios, simplemente presione

¿Para qué nombres le gustaría activar HTTPS??
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Seleccione los números apropiados separados por comas y / o espacios, o deje la entrada en blanco para seleccionar todas las opciones mostradas (Ingrese 'c' para cancelar):

  1. Redirigir todo a TLS. Elegí la opción 2, para redirigir todo a SSL, pero su caso de uso puede diferir. Para nuevas instalaciones de backend, es seguro elegir la opción 2.

Elija si desea o no redirigir el tráfico HTTP a HTTPS, eliminando el acceso HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Sin redireccionamiento: no realice más cambios en la configuración del servidor web.
2: Redirigir: redirigir todas las solicitudes a un acceso HTTPS seguro. Elija esta opción para sitios nuevos o si está seguro de que su sitio funciona en HTTPS. Puede deshacer este cambio editando la configuración de su servidor web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Seleccione el número apropiado [1-2] luego [ingresar] (presione 'c' para cancelar): 2

Si todo salió bien, le mostrará este mensaje, solo para sus nombres de dominio.

Felicidades! Ha habilitado con éxito https: // ww1.ranvirslog.com y https: // ww2.ranvirslog.com Puede visitar los FQDN y observar que los sitios web ahora tienen el letrero del candado que sugiere que todo está encriptado.

Mira los archivos de configuración

Si ve los archivos de configuración que creamos anteriormente, a saber / etc / conf.d / ww1.conf y / etc / conf.d / ww2.conf, notará que todas las reglas de "Escuchar 80" han desaparecido y se han agregado algunas líneas nuevas que le indican al servidor que la comunicación debe estar encriptada y la ubicación de los certificados y claves para realizar dicha encriptación.

Recomiendo encarecidamente mirar a través de los archivos de configuración, ya que eso también puede enseñarle cómo instalar correctamente los certificados y escribir archivos de configuración.

Renovación de certificación

Los certificados típicos de LetsEncrypt son válidos durante 90 días y antes de que caduquen debe renovarlos. Puede usar Certbot para ejecutar primero la renovación, ejecutando el comando:

$ sudo certbot renovar --dry-run

Si la operación tiene éxito, verá el siguiente mensaje:

Felicitaciones, todas las renovaciones tuvieron éxito. Se han renovado los siguientes certificados:

/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (éxito)
** DRY RUN: simulando la 'renovación de certbot' cerca del vencimiento del certificado
** (Los certificados de prueba anteriores no se han guardado.)

Ahora puede agregar un trabajo Cron que intentará renovarse cada semana más o menos. Certbot no renovará los certificados a menos que sea realmente debido, por lo que no tiene que preocuparse. El comando para la renovación real es:

$ certbot renovar

Agréguelo al trabajo cron de root usando:

$ sudo crontab -e

En el siguiente mensaje, seleccione su editor favorito (elija Nano si no está seguro) y agregue las siguientes líneas al final del archivo ahora abierto:

..
# Por ejemplo, puede ejecutar una copia de seguridad de todas sus cuentas de usuario
# a las 5 a.m cada semana con:
# 0 5 * * 1 tar -zcf / var / backups / home.tgz / inicio /
#
# Para obtener más información, consulte las páginas del manual de crontab (5) y cron (8)
#
# m h dom mon dow comando
* 2 * * 2 certbot renovar

Esto ejecutará el comando de renovación de certbot a las 2 de la mañana en cualquier minuto aleatorio, el segundo día de cada semana.

Conclusión

Si es nuevo en los certificados TLS, experimentar con cosas como HSTS puede ser arriesgado. Dado que estos cambios son irreversibles. Sin embargo, si quieres ir por la madriguera de la seguridad, puedo recomendarte el blog de Troy Hunt, que es una de las principales inspiraciones detrás de este artículo.

Vuelva a asignar los botones del mouse de manera diferente para diferentes programas con X-Mouse Button Control
Tal vez necesite una herramienta que pueda hacer que el control de su mouse cambie con cada aplicación que use. Si este es el caso, puede probar una a...
Revisión del mouse inalámbrico Microsoft Sculpt Touch
Recientemente leí sobre el Microsoft Sculpt Touch mouse inalámbrico y decidí comprarlo. Después de usarlo por un tiempo, decidí compartir mi experienc...
Trackpad en pantalla y puntero del mouse AppyMouse para tabletas Windows
Los usuarios de tabletas a menudo pierden el puntero del mouse, especialmente cuando son habituales para usar las computadoras portátiles. Los teléfon...