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

Dieser Artikel beschreibt die Konfiguration von IGEL Universal Management Suite (UMS) und NGINX für SSL-Offloading. Sie können dieses Dokument verwenden, wenn Sie möchten, dass SSL nicht am UMS Server, sondern am Load Balancer / Reverse Proxy terminiert wird. 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 wird mit den in diesem Artikel beschriebenen Konfigurationen getestet. Da es sich bei dem Reverse Proxy um eine externe Software handelt, können wir keine vollständige Unterstützung für jede Version bieten.


Anforderungen

Die Anforderungen für UMS und die Konfiguration von Zertifikaten für den Reverse-Proxy sind zusammengefasst in Konfigurieren der UMS zur Integration von Reverse Proxy mit SSL-Offloading.

Prozess-Übersicht

Die Konfigurationsaufgaben des Reverse Proxy sind:

NGINX-Installation (Beispiel auf Basis von Ubuntu)

→ Installiere NGINX auf deinem System:

sudo apt update
sudo apt install nginx


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

  1. Überprüfen Sie die Firewall-Konfiguration:

    sudo ufw app list
    


    Die Ausgabe des Befehls sollte wie folgt aussehen:

    Ausgabe
    Verfügbare Anwendungen:
    	Nginx Voll
    	Nginx HTTP
    	Nginx HTTPS
    	OpenSSH
    


  2. Aktivieren Sie 'Nginx Full':

    sudo ufw allow 'Nginx Full'
    


  3. Überprüfen Sie die Firewall-Konfiguration mit

    sudo ufw status
    


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

  5. Abfrage des aktuellen Status von NGINX:

    sudo systemctl status nginx
    


  6. Überprüfen Sie die aktuelle Konfiguration von NGINX:

    sudo nginx -t
    

NGINX-Konfiguration

Die Konfiguration des Servers wird in Konfigurationsdateien durchgeführt. Bei einer Ubuntu-Installation ist die Hauptkonfigurationsdatei /etc/nginx/nginx.conf.

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

http {

##
## Grundeinstellungen
##
sendfile ein;
		...
##
## Virtuelle Host-Konfigurationen
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/umsSSLOffloading.conf; # für die Konfiguration verwendet
}

Die Schlüssel und Zertifikate, die in Konfigurieren des UMS zur Integration von Reverse Proxy mit SSL-Offloading kann in ein Verzeichnis unter /etc/nginx kopiert werden: z.B. /etc/nginx/ssl - erstellen Sie das Verzeichnis, wenn es nicht existiert.

NGINX-Konfigurationsdatei für SSL-Offloading

→ Erstellen Sie eine neue Konfigurationsdatei umsSSLOffloading.conf.

Diese Datei muss

  • Upstream-Server-Konfiguration

  • Server Konfiguration

  • Standort Konfiguration

Dies ist eine Beispielkonfiguration zur Verwendung mit UMS 12 und IGEL OS 12:

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

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


  • Der Server Block enthält die Konfiguration für den NGINX-Listener und den Standort.
    Das UMS Web-Zertifikat und die Client-Zertifikatsvalidierung sollten hier hinzugefügt werden.
    Gemeinsame Serverkonfiguration:

    server {
    	listen 8443 ssl; # Der Parameter 'ssl' weist NGINX an, den Datenverkehr zu entschlüsseln
    	ssl_certificate ssl/ssl-cert-chain.cer; # Die Datei der Zertifikate (Web)
    	ssl_certificate_key ssl/cert-key.key; # Die Datei mit dem privaten Schlüssel (Web)
    	ssl_verify_client optional; ## Die Überprüfung des Zertifikats muss optional sein
    	ssl_client_certificate ssl/estca.cer; #Zertifikat für die Überprüfung von Client Zertifikaten
    
    	access_log /var/log/nginx/ssl-access.log;
    	error_log /var/log/nginx/ssl-error.log;
    


  • Mindestens zwei Ortsdefinitionen sind erforderlich:

    • Location-Definition für alle Verbindungen über WebSocket. Die WebSocket-Verbindung erfordert die Übermittlung des Client-Zertifikats innerhalb des Headers. Eine zweite hinzuzufügende Header-Information ist der Upgrade-Header, der für WebSockets erforderlich ist.

      # Konfiguration für Verbindungen über WebSocket, die Upgrade-Header-Information muss von NGINX geschrieben werden
        location ~ /device-connector/device/(ws-connect|portforwarding) {
      		proxy_pass https://umsserver;
      		proxy_set_header X-SSL-CERT $ssl_client_escaped_cert; # Client Zertifikat in der aktuellen Verbindung
      		proxy_set_header Upgrade $http_upgrade; # Upgrade-Header setzen
      		proxy_set_header Verbinden $connection_upgrade;
      		proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer; #trusted Cert Chain für UMS Verbindung
      
      		# TLSv1.3 Konfiguration wird empfohlen, ist aber nicht notwendig
      		proxy_ssl_protocols TLSv1.3;
       }
      


    • Lokationsdefinition für alle anderen Verbindungen.

      # Konfiguration für alle anderen Verbindungen
        Standort / {
       		proxy_pass https://umsserver;
      		proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer;
      		proxy_ssl_protocols TLSv1.3;
       }
      


Die gesamte Konfigurationsdatei:

#map upgrade header
map %https_upgrade $connection_upgrade {
Standard-Upgrade;
'' close;
}

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

server {
	listen 8443 ssl; # Der Parameter 'ssl' weist NGINX an, den Datenverkehr zu entschlüsseln
	ssl_certificate ssl/ssl-cert-chain.cer; # Die Datei der Zertifikate (Web)
	ssl_certificate_key ssl/cert-key.key; # Die Datei mit dem privaten Schlüssel (Web)
	ssl_verify_client optional; ## Die Überprüfung des Zertifikats muss optional sein
	ssl_client_certificate ssl/estca.cer; #Zertifikat für die Überprüfung von Client Zertifikaten

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

# Konfiguration für Verbindungen über WebSocket, die Upgrade-Header-Informationen müssen von NGINX geschrieben werden
  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 Verbinden $connection_upgrade;
	proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer;
	# TLSv1.3 Konfiguration wird empfohlen, ist aber nicht notwendig
	proxy_ssl_protocols TLSv1.3;
 }

# Konfiguration für alle anderen Verbindungen
  Standort / {
	proxy_pass https://umsserver;
	proxy_ssl_trusted_certificate ssl/ssl-cert-chain.cer;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Verbinden $connection_upgrade;
	proxy_ssl_protocols TLSv1.3;
  # proxy_ssl_session_reuse on;
  }
}