BLOG | NGINX

Ausführen von SSL- und Nicht-SSL-Protokollen über denselben Port mit NGINX 1.15.2

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Faisal Memon Miniaturbild
Faisal Memon
Veröffentlicht am 24. Juli 2018

Heute freuen wir uns, die Verfügbarkeit von NGINX Open Source 1.15.2 bekannt zu geben. Ein Hauptmerkmal dieser Version ist die neue Variable $ssl_preread_protocol , mit der Sie beim Weiterleiten von Datenverkehr über einen TCP-Proxy ( Stream -Proxy) zwischen SSL/TLS und anderen Protokollen unterscheiden können. Dies ist nützlich, wenn Sie Firewall-Einschränkungen umgehen möchten, indem Sie beispielsweise SSL/TLS- und SSH-Dienste auf demselben Port ausführen.

Die neue Funktion wird auch für NGINX Plus-Kunden in der kommenden Version NGINX Plus R16 verfügbar sein .

Wann und wie wird $ssl_preread_protocol verwendet?

Wenn Sie SSL/TLS-Verkehr mit dem http- oder dem Stream- Modul beenden und entschlüsseln, erfasst die Variable „$ ssl_protocol ( http , stream )“ die vom Client verwendete SSL- oder TLS-Version. Manchmal möchten Sie den SSL/TLS-Verkehr jedoch einfach ohne Entschlüsselung weiterleiten und mithilfe der Stream- Module einen einfachen TCP-Proxy oder Load Balancer implementieren.

Das Modul stream_ssl_preread überprüft die anfängliche ClientHello- Nachricht in einer SSL- oder TLS-Verbindung und extrahiert mehrere Werte, die zur Verwaltung der Verbindung verwendet werden können. Die in Version 1.15.2 hinzugefügte Variable $ssl_preread_protocol erfasst die neueste SSL/TLS-Versionsnummer aus dem Feld „client_version“ der ClientHello- Nachricht. Wenn die Erweiterung „supported_versions“ in der ClientHello -Nachricht vorhanden ist, wird die Variable auf TLSv1.3 gesetzt.

Wenn eine Verbindung keine Version von SSL oder TLS verwendet, ist die Variable $ssl_preread_protocol leer. Dies zeigt an, dass die Verbindung ein anderes Protokoll als SSL/TLS verwendet, beispielsweise SSH.

Der folgende Konfigurationsausschnitt verwendet die Variable $ssl_preread_protocol in einem Map- Block, um die Variable $upstream auf den Namen der Upstream-Gruppe zu setzen, die für das für die Verbindung verwendete Protokoll geeignet ist. Die Direktive „proxy_pass“ leitet die Anfrage dann an die ausgewählte Upstream-Gruppe weiter. Beachten Sie, dass die Direktive „ssl_preread on im Serverblock enthalten sein muss, damit die Variable $ssl_preread_protocol funktioniert.

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 und SSL auf dem gleichen Port server { listen 443; proxy_pass $upstream; ssl_preread on ; } }

Damit die Konfiguration wirksam ist, müssen Clients auf den SSH-Server über Port 443 statt über den Standardport 22 zugreifen. Mit dem integrierten SSH-Client unter MacOS und Linux können Sie beispielsweise das Flag -p verwenden, um den Port zu ändern:

$ ssh ssh-Server-IP-Adresse -p 443

So erhalten Sie die neueste NGINX-Version

Die neueste Version von NGINX ist immer im Mainline-Zweig unseres offiziellen Repository verfügbar.

Mehr erfahren

NGINX Open Source 1.15.2 enthält zusätzliche Verbesserungen und Fehlerbehebungen. Eine vollständige Liste der Neuerungen finden Sie im NGINX-Änderungsprotokoll .


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."