BLOG | NGINX

Ejecución de protocolos SSL y no SSL en el mismo puerto con NGINX 1.15.2

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Faisal Memon
Faisal Memon
Publicado el 24 de julio de 2018

Hoy nos complace anunciar la disponibilidad de NGINX Open Source 1.15.2. Una característica clave de esta versión es la nueva variable $ssl_preread_protocol , que le permite distinguir entre SSL/TLS y otros protocolos al reenviar tráfico utilizando un proxy TCP ( de flujo ). Esto es útil si desea evitar restricciones de firewall al (por ejemplo) ejecutar servicios SSL/TLS y SSH en el mismo puerto.

La nueva función también estará disponible para los clientes de NGINX Plus en la próxima versión de NGINX Plus R16 .

Cuándo y cómo utilizar $ssl_preread_protocol

Cuando finaliza y descifra el tráfico SSL/TLS, con los módulos http o stream , la variable $ ssl_protocol ( http , stream ) captura la versión de SSL o TLS utilizada por el cliente. Sin embargo, a veces es posible que desees simplemente reenviar el tráfico SSL/TLS sin descifrarlo, utilizando los módulos de flujo para implementar un proxy TCP básico o un balanceador de carga.

El módulo stream_ssl_preread inspecciona el mensaje ClientHello inicial en una conexión SSL o TLS y extrae varios valores que pueden usarse para administrar la conexión. La variable $ssl_preread_protocol agregada en la versión 1.15.2 captura el último número de versión SSL/TLS del campo client_version del mensaje ClientHello . Si la extensión support_versions está presente en el mensaje ClientHello , entonces la variable se establece en TLSv1.3 .

Si una conexión no utiliza una versión de SSL o TLS, la variable $ssl_preread_protocol estará en blanco, lo que indica que la conexión está utilizando un protocolo distinto de SSL/TLS, como SSH.

El siguiente fragmento de configuración utiliza la variable $ssl_preread_protocol en un bloque de mapa para establecer la variable $upstream en el nombre del grupo ascendente apropiado para el protocolo que se utiliza en la conexión. Luego, la directiva proxy_pass reenvía la solicitud al grupo ascendente seleccionado. Tenga en cuenta que la directiva ssl_preread on debe incluirse en el bloque del servidor para que la variable $ssl_preread_protocol funcione.

stream { upstream ssh { servidor 192.0.2.1:22; } upstream web { servidor 192.0.2.2:443; } map $ssl_preread_protocol $upstream { default ssh; "TLSv1.2" web; } # SSH y SSL en el mismo puerto server { listen 443; proxy_pass $upstream; ssl_preread on ; } }

Para que la configuración sea efectiva, los clientes deben acceder al servidor SSH en el puerto 443 en lugar del puerto predeterminado 22. Con el cliente SSH integrado en MacOS y Linux, por ejemplo, puede usar el indicador -p para cambiar el puerto:

$ ssh dirección-ip-del-servidor -ssh -p 443

Cómo obtener la última versión de NGINX

La última versión de NGINX siempre está disponible en la rama principal de nuestro repositorio oficial .

Más información

NGINX Open Source 1.15.2 contiene mejoras adicionales y correcciones de errores. Para obtener una lista completa de las novedades, consulte el registro de cambios de NGINX .


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.