BLOG | NGINX

Executando protocolos SSL e não SSL na mesma porta com NGINX 1.15.2

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Faisal Memon
Faisal Memon
Publicado em 24 de julho de 2018

Hoje temos o prazer de anunciar a disponibilidade do NGINX Open Source 1.15.2. Um recurso importante nesta versão é a nova variável $ssl_preread_protocol , que permite distinguir entre SSL/TLS e outros protocolos ao encaminhar tráfego usando um proxy TCP ( stream ). Isso é útil se você quiser evitar restrições de firewall (por exemplo) executando serviços SSL/TLS e SSH na mesma porta.

O novo recurso também estará disponível para clientes do NGINX Plus na próxima versão do NGINX Plus R16 .

Quando e como usar $ssl_preread_protocol

Quando você encerra e descriptografa o tráfego SSL/TLS, com os módulos http ou stream , a variável $ ssl_protocol ( http , stream ) captura a versão do SSL ou TLS usada pelo cliente. No entanto, às vezes você pode querer simplesmente encaminhar o tráfego SSL/TLS sem descriptografá-lo, usando os módulos de fluxo para implementar um proxy TCP básico ou balanceador de carga.

O módulo stream_ssl_preread inspeciona a mensagem ClientHello inicial em uma conexão SSL ou TLS e extrai vários valores que podem ser usados para gerenciar a conexão. A variável $ssl_preread_protocol adicionada na versão 1.15.2 captura o número da versão mais recente do SSL/TLS do campo client_version da mensagem ClientHello . Se a extensão supported_versions estiver presente na mensagem ClientHello , a variável será definida como TLSv1.3 .

Se uma conexão não usar uma versão de SSL ou TLS, a variável $ssl_preread_protocol ficará em branco, indicando que a conexão está usando um protocolo diferente de SSL/TLS, como SSH.

O snippet de configuração a seguir usa a variável $ssl_preread_protocol em um bloco de mapa para definir a variável $upstream como o nome do grupo upstream apropriado para o protocolo que está sendo usado na conexão. A diretiva proxy_pass então encaminha a solicitação para o grupo upstream selecionado. Observe que a diretiva ssl_preread on deve ser incluída no bloco server para que a variável $ssl_preread_protocol funcione.

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 e SSL na mesma porta server { listen 443; proxy_pass $upstream; ssl_preread on ; } }

Para que a configuração seja efetiva, os clientes precisam acessar o servidor SSH na porta 443 em vez da porta padrão 22. Com o cliente SSH integrado no MacOS e Linux, por exemplo, você pode usar o sinalizador -p para alterar a porta:

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

Como obter a versão mais recente do NGINX

A versão mais recente do NGINX está sempre disponível na ramificação principal do nosso repositório oficial .

Saiba mais

O NGINX Open Source 1.15.2 contém melhorias adicionais e correções de bugs. Para uma lista completa das novidades, consulte o log de alterações do NGINX .


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."