BLOG | NGINX

Exécution de protocoles SSL et non SSL sur le même port avec NGINX 1.15.2

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Faisal Memon
Fayçal Memon
Publié le 24 juillet 2018

Aujourd'hui, nous sommes heureux d'annoncer la disponibilité de NGINX Open Source 1.15.2. L'une des fonctionnalités clés de cette version est la nouvelle variable $ssl_preread_protocol , qui vous permet de faire la distinction entre SSL/TLS et d'autres protocoles lors du transfert de trafic à l'aide d'un proxy TCP ( stream ). Ceci est utile si vous souhaitez éviter les restrictions du pare-feu en (par exemple) exécutant les services SSL/TLS et SSH sur le même port.

La nouvelle fonctionnalité sera également disponible pour les clients NGINX Plus dans la prochaine version NGINX Plus R16 .

Quand et comment utiliser $ssl_preread_protocol

Lorsque vous terminez et décryptez le trafic SSL/TLS, avec les modules http ou stream , la variable $ ssl_protocol ( http , stream ) capture la version de SSL ou TLS utilisée par le client. Cependant, vous souhaiterez parfois simplement transférer le trafic SSL/TLS sans le décrypter, en utilisant les modules de flux pour implémenter un proxy TCP de base ou un équilibreur de charge.

Le module stream_ssl_preread inspecte le message ClientHello initial dans une connexion SSL ou TLS et extrait plusieurs valeurs qui peuvent être utilisées pour gérer la connexion. La variable $ssl_preread_protocol ajoutée dans la version 1.15.2 capture le dernier numéro de version SSL/TLS à partir du champ client_version du message ClientHello . Si l'extension taken_versions est présente dans le message ClientHello , la variable est définie sur TLSv1.3 .

Si une connexion n'utilise pas une version de SSL ou TLS, la variable $ssl_preread_protocol sera vide, indiquant que la connexion utilise un protocole autre que SSL/TLS, tel que SSH.

L'extrait de configuration suivant utilise la variable $ssl_preread_protocol dans un bloc de mappage pour définir la variable $upstream sur le nom du groupe en amont approprié au protocole utilisé sur la connexion. La directive proxy_pass transmet ensuite la demande au groupe en amont sélectionné. Notez que la directive ssl_preread on doit être incluse dans le bloc serveur pour que la variable $ssl_preread_protocol fonctionne.

flux { ssh en amont { serveur 192.0.2.1:22; } web en amont { serveur 192.0.2.2:443; } carte $ssl_preread_protocol $upstream { ssh par défaut; "TLSv1.2" web; } # SSH et SSL sur le même port serveur { écoute 443; proxy_pass $upstream; ssl_preread on ; } }

Pour que la configuration soit efficace, les clients doivent accéder au serveur SSH sur le port 443 au lieu du port par défaut 22. Avec le client SSH intégré sur MacOS et Linux, par exemple, vous pouvez utiliser l’indicateur -p pour modifier le port :

$ ssh adresse-ip-du-serveur -ssh -p 443

Comment obtenir la dernière version de NGINX

La dernière version de NGINX est toujours disponible dans la branche principale de notre référentiel officiel .

Apprendre encore plus

NGINX Open Source 1.15.2 contient des améliorations supplémentaires et des corrections de bogues. Pour une liste complète des nouveautés, consultez le journal des modifications de NGINX .


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."