NGINX Beispielkonfiguration für Reverse Proxy in IGEL OS mit SSL Offloading

Dieser Artikel beschreibt die Konfiguration der IGEL Universal Management Suite (UMS) und von NGINX für SSL Offloading. Sie können dieses Dokument verwenden, wenn die SSL-Verbindung nicht am UMS Server, sondern am Load Balancer / Reverse Proxy terminiert werden soll. Der Artikel basiert auf dem Beispiel von NGINX. Weitere Informationen zu NGINX finden Sie unter https://www.nginx.com/resources/glossary/nginx/.

Die allgemeine Kompatibilität wurde mit den in diesem Artikel beschriebenen Konfigurationen getestet. Es kann auch andere Möglichkeiten zur Konfiguration geben.
Da der Reverse Proxy eine externe Software ist, können wir keinen vollständigen Support für jede Version bereitstellen.


Voraussetzungen

Die Anforderungen an UMS und Zertifikatskonfiguration für einen Reverse Proxy sind in UMS für die Integration eines Reverse Proxy mit SSL Offloading konfigurieren zusammengefasst.

Prozessübersicht

Die Konfigurationsaufgaben für den Reverse Proxy sind:

NGINX-Installation (Beispiel auf Ubuntu-Basis)

→ Installieren Sie NGINX auf Ihrem System:

sudo apt update
sudo apt install nginx


→ Wenn eine Firewall verwendet wird, prüfen Sie die Konfiguration:

  1. Prüfen Sie die Firewall-Konfiguration:

    sudo ufw app list
    


    Die Ausgabe des Befehls sollte wie folgt aussehen:

    Output
    Available applications:
    	Nginx Full
    	Nginx HTTP
    	Nginx HTTPS
    	OpenSSH
    


  2. Aktivieren Sie „Nginx Full“:

    sudo ufw allow ‘Nginx Full’
    


  3. Prüfen Sie die Firewall-Konfiguration mit

    sudo ufw status
    


  4. Für die Unterstützung der UMS kann es erforderlich sein, weitere Ports zu öffnen. Weitere Informationen zu UMS-Ports finden Sie unter IGEL UMS Kommunikationsports.

  5. Rufen Sie den aktuellen Status von NGINX ab:

    sudo systemctl status nginx
    


  6. Prüfen Sie die aktuelle Konfiguration von NGINX:

    sudo nginx -t
    

NGINX-Konfiguration

Die Konfiguration des Servers erfolgt in Konfigurationsdateien. Bei einer Ubuntu-Installation ist die zentrale Konfigurationsdatei /etc/nginx/nginx.conf.

In diesem Beispiel wird eine separate Konfigurationsdatei umsSSLOffloading.conf verwendet. Diese Datei muss in die nginx.conf eingebunden werden:

http {

## 
# Basic Settings 
## 
sendfile on; 
		... 
## 
# Virtual Host Configs 
## 

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/umsSSLOffloading.conf; # used for configuration
}

Die in UMS für die Integration eines Reverse Proxy mit SSL Offloading konfigurieren extrahierten Schlüssel und Zertifikate können in ein Verzeichnis unter /etc/nginx kopiert werden, zum Beispiel /etc/nginx/ssl. Erstellen Sie das Verzeichnis, falls es noch nicht vorhanden ist.

TLSv1.3-Protokoll in den SSL-Einstellungen

IGEL OS Geräte verwenden TLSv1.3-Verbindungen. Prüfen Sie, ob das Protokoll im Abschnitt mit den SSL-Einstellungen der Konfigurationsdatei /etc/nginx/nginx.conf aktiviert ist.

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

NGINX-Konfigurationsdatei für SSL Offloading

→ Erstellen Sie eine neue Konfigurationsdatei umsSSLOffloading.conf.

Diese Datei muss Folgendes enthalten:

  • upstream server-Konfiguration

  • server-Konfiguration

  • location-Konfiguration

Dies ist eine Beispielkonfiguration für die Verwendung mit UMS 12 und IGEL OS 12:

  • Der Block upstream umsserver definiert den UMS Server im Backend.

    upstream umsserver {
    	server 192.168.27.96:8443 max_fails=3 fail_timeout=10s; 
    }
    


  • Der Block server enthält die Konfiguration für den NGINX-Listener und die location.
    Das UMS Web-Zertifikat und die Validierung des Client-Zertifikats sollten hier hinzugefügt werden.
    Allgemeine Serverkonfiguration:

    server {
    	listen 		 8443 ssl; # 'ssl' parameter tells NGINX to decrypt the traffic
    	ssl_certificate 			ssl/ssl-cert-chain.cer; # The Certificate File (Web)
    	ssl_certificate_key 		ssl/cert-key.key; # The Private Key File (Web)
    	ssl_verify_client			optional; ## Client Certificate check must be optional
    	ssl_client_certificate  	ssl/estca.cer; #certificate for Client Certificate Check
    
    	access_log 					/var/log/nginx/ssl-access.log;
    	error_log 					/var/log/nginx/ssl-error.log;
    


  • Mindestens zwei location-Definitionen sind erforderlich:

    • location-Definition für alle Verbindungen über WebSocket. Die WebSocket-Verbindung erfordert die Weiterleitung des Client-Zertifikats im Header. Eine weitere Header-Information, die hinzugefügt werden muss, ist der Upgrade-Header, der für WebSockets erforderlich ist.

      # Configuration for connections via WebSocket, the upgrade header information must be written by NGINX
        location ~ /device-connector/device/(ws-connect|portforwarding) {
      		proxy_pass https://umsserver;
      		proxy_set_header X-SSL-CERT $ssl_client_escaped_cert; # client certificate in current connection
      		proxy_set_header Upgrade $http_upgrade; # Set upgrade header
      		proxy_set_header Connection $connection_upgrade;
      		proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer; #trusted Cert Chain for UMS connection
      
      		# TLSv1.3 configuration is recommended but not necessary
      		proxy_ssl_protocols TLSv1.3;
       }
      


    • location-Definition für alle anderen Verbindungen.

      # Configuration for all other connections
        location / {
       		proxy_pass https://umsserver;
      		proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer;
      		proxy_ssl_protocols TLSv1.3;
              proxy_set_header Host $Host;
       }
      


Die vollständige Konfigurationsdatei:

#map upgrade header
map %https_upgrade $connection_upgrade {
default upgrade;
'' close;
} 

	upstream umsserver {
		server 192.168.27.96:8443 max_fails=3 fail_timeout=10s;
	}

server {
	listen 		8443 ssl; # 'ssl' parameter tells NGINX to decrypt the traffic
	ssl_certificate		 		ssl/ssl-cert-chain.cer; # The Certificate File (Web)
	ssl_certificate_key 		ssl/cert-key.key; # The Private Key File (Web)
	ssl_verify_client 			optional; ## Client Certificate check must be optional
	ssl_client_certificate		ssl/estca.cer; #certificate for Client Certificate Check

	access_log 					/var/log/nginx/ssl-access.log;
	error_log					/var/log/nginx/ssl-error.log; 

# Configuration for connections via WebSocket, the upgrade header information must be written by NGINX
  location ~ /device-connector/device/(ws-connect|portforwarding) {
	proxy_pass https://umsserver;
	proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection $connection_upgrade;
	proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer;
	# TLSv1.3 configuration is recommended but not necessary
	proxy_ssl_protocols TLSv1.3;
 } 

# Configuration for all other connections
  location / {
	proxy_pass https://umsserver;
	proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection $connection_upgrade;
	proxy_ssl_protocols TLSv1.3;
    proxy_set_header Host $Host;
  # proxy_ssl_session_reuse on; 
  } 
}


Nächster Schritt: Über Reverse Proxy verbundene Geräte verwalten

Eine Liste nützlicher Funktionen, die die Verwaltung von über einen Reverse Proxy verbundenen Geräten unterstützen, finden Sie unter Nützliche IGEL UMS Funktionen für die Verwaltung von über Reverse Proxy verbundenen Geräten.