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

NGINX | 24 de julio de 2018

Hoy nos complace anunciar la disponibilidad de NGINX Open Source 1.15.2. Una de las principales novedades de esta versión es la nueva variable $ssl_preread_protocol, que permite distinguir entre SSL/TLS y otros protocolos al reenviar tráfico mediante un proxy TCP (stream). Esto resulta útil si desea evitar las restricciones del cortafuegos ejecutando, por ejemplo, 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 NGINX Plus R16.

Cuándo y cómo usar $ssl_preread_protocol

Cuando se termina y descifra el tráfico SSL/TLS mediante los módulos http o stream, la variable $ssl_protocol (http, stream) registra la versión de SSL o TLS utilizada por el cliente. Sin embargo, en ocasiones puede que se quiera simplemente reenviar el tráfico SSL/TLS sin descifrarlo, utilizando los módulos stream para implementar un proxy TCP básico o un balanceador de carga.

El módulo stream_ssl_preread inspecciona el mensaje ClientHello inicial de una conexión SSL o TLS y extrae varios valores que pueden utilizarse para gestionar la conexión. La variable $ssl_preread_protocol, añadida en la versión 1.15.2, obtiene el número de la versión más reciente de SSL/TLS del campo client_version del mensaje ClientHello. Si la extensión supported_versions está presente en el mensaje ClientHello, la variable se establece en TLSv1.3.

Si una conexión no utiliza ninguna versión de SSL o TLS, la variable $ssl_preread_protocol estará vacía, lo que indica que la conexión utiliza un protocolo distinto de SSL/TLS, como SSH.

El siguiente fragmento de configuración utiliza la variable $ssl_preread_protocol en un bloque map para asignar a la variable $upstream el nombre del grupo de servidores ascendentes adecuado para el protocolo utilizado en la conexión. A continuación, la directiva proxy_pass reenvía la solicitud al grupo de servidores ascendentes seleccionado. Tenga en cuenta que la directiva ssl_preread on debe incluirse en el bloque server para que funcione la variable $ssl_preread_protocol.

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;
    }

    # SSH and SSL on the same port
    server {
        listen 443;

        proxy_pass $upstream;
        ssl_preread on;
    }
}

Para que la configuración surta efecto, los clientes deben acceder al servidor SSH a través del puerto 443 en lugar del puerto predeterminado 22. Por ejemplo, con el cliente SSH integrado en macOS y Linux, puede utilizar la opción -p para cambiar el puerto:

$ ssh ssh-server-ip-address -p 443

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

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

Más información

NGINX Open Source 1.15.2 incluye mejoras adicionales y correcciones de errores. Para consultar la lista completa de novedades, consulte el registro de cambios de NGINX.


Compartir

Sobre el autor

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.