miércoles, 23 de diciembre de 2020

NGINX: SSL y no SSL en el mismo puerto



Cómo ejecutar protocolos con SSL y sin SSL en el mismo puerto con NGINX.



NGINX tiene una característica llamada "$ssl_preread_protocol" que le permite distinguir entre SSL / TLS y otros protocolos al recibir tráfico en un puerto TCP determinado. Esto es útil para recibir dos aplicaciones distintas en un mismo puerto y evitar así las restricciones de un firewall en origen, ejecutando, por ejemplo, HTTPS y SSH en el mismo puerto pero enviándolo por detrás a distintos hosts.

NGINX inspecciona el mensaje ClientHello inicial en una conexión SSL o TLS y determina la versión de TLS. Por otro lado, si la conexión no usa SSL o TLS, la variable $ssl_preread_protocol permanecerá en blanco, lo que indica que la conexión está usando un protocolo que no es SSL / TLS, como SSH.

Veamos un ejemplo de esto:

stream { upstream ssh { server 192.0.2.1:22; } upstream web { server 192.0.2.2:443; } map $ssl_preread_protocol $upstream { default ssh; "TLSv1.2" web; } server { listen 443; proxy_pass $upstream; ssl_preread on; } }

En el ejemplo anterior, NGINX escucha por el puerto 443.

Si la conexión no es TLS, el tráfico va al puerto 22 del servidor 192.0.2.1.

Si, por el contrario, la conexión contiene TLS, el tráfico se envía al puerto 443 del host 192.0.2.2.


Fuentes:

https://www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/
0

0 comentarios:

Publicar un comentario