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 Loadbalancer oder Reverse Proxy terminiert werden soll. Die Anleitung 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 jedoch auch andere Möglichkeiten zur Umsetzung der Konfiguration geben.
Da es sich beim Reverse Proxy um eine externe Software handelt, kann kein vollständiger Support für jede Version angeboten werden.
Anforderungen
Die Anforderungen an die UMS sowie an die Zertifikatkonfiguration für den Reverse Proxy sind in UMS zur Integration von Reverse Proxy mit SSL Offloading konfigurieren zusammengefasst.
Prozessübersicht
Die Konfigurationsschritte für den Reverse Proxy umfassen:
Konfiguration der UMS / des ICG sowie Zertifikatexport, wie beschrieben in UMS zur Integration von Reverse Proxy mit SSL Offloading konfigurieren
Installation von NGINX (Beispiel basierend auf Ubuntu)
Konfiguration von NGINX
Installation von NGINX (Beispiel auf Basis von Ubuntu)
→ Installieren Sie NGINX auf Ihrem System:
sudo apt update
sudo apt install nginx
→ Wenn eine Firewall verwendet wird, überprüfen Sie die Konfiguration:
Überprüfen Sie die Firewall-Konfiguration:
TEXTsudo ufw app list
Die Ausgabe des Befehls sollte wie folgt aussehen:TEXTOutput Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH
Aktivieren Sie 'Nginx Full':
TEXTsudo ufw allow 'Nginx Full'
Überprüfen Sie die Firewall-Konfiguration mit
TEXTsudo ufw status
Für die UMS Unterstützung kann es notwendig sein, weitere Ports zu öffnen. Weitere Informationen zu UMS Ports finden Sie unter IGEL UMS Kommunikationsports.
Fragen Sie den aktuellen Status von NGINX ab:
TEXTsudo systemctl status nginx
Überprüfen Sie die aktuelle Konfiguration von NGINX:
TEXTsudo 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 {
##
# 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 Schlüssel und Zertifikate, die in UMS zur Integration von Reverse Proxy mit SSL Offloading konfigurieren, können 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 Folgendes enthalten
Upstream-Server-Konfiguration
Server Konfiguration
Standort Konfiguration
Dies ist eine Beispielkonfiguration zur Verwendung mit UMS 12 und IGEL OS 12:
Der Block upstream umsserver definiert den UMS Server im Backend.
TEXTupstream 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 den Standort.
Das UMS Web-Zertifikat und die Client-Zertifikatsvalidierung sollten hier hinzugefügt werden.
Gemeinsame Serverkonfiguration:TEXTserver { 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;
Es sind mindestens zwei Location-Definitionen erforderlich:
Eine Location-Definition ist für alle Verbindungen über WebSocket vorgesehen. Die WebSocket-Verbindung erfordert die Weiterleitung des Client-Zertifikats im Header. Zusätzlich muss ein weiterer Header hinzugefügt werden, der das Upgrade für WebSocket-Verbindungen ermöglicht.
TEXT# 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.
TEXT# Configuration for all other connections location / { 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 {
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_ssl_session_reuse on;
}
}