NGINX Reverse Proxy sicher konfigurieren?
Hallo,
ich habe eine grundsätzliche Frage dazu, wie man NGINX sicher als Reverse Proxy einsetzt und leider nicht wirklich was dazu im Netz gefunden.
Mal angenommen auf Server A läuft eine Webapplikation, die auf 10.0.0.1:5000 hört und auf Server B läuft mein NGINX, der auf 10.0.0.2:80/443 hört. Ich möchte also von Server A zu B einen Reverse Proxy machen und die Verbindung soll mit TLS abgesichert sein.
upstream serverA {
server 10.0.0.1:5000;
}
server {
server_name example.org;
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/ssl/certs/example.org.crt;
ssl_certificate_key /etc/ssl/private/example.org.key;
location / {
proxy_pass http://serverA;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
... HTTPS redirect
Aber jetzt ist doch nicht der Traffic von Server B also dem NGINX, auf den der Nutzer zugreift zu Server A, der Webapplikation verschlüsselt oder liege ich da falsch? Falls er nicht verschlüsselt ist, wie erreiche ich das? Ist hier eine einfache Firewall Regel auf Server A schon ausreichend? Im Sinne von
ufw allow in from 10.0.0.2 to any port 5000/tcp
Danke für alle Antworten
1 Antwort
Ja, das siehst du richtig, die Verbindung von Server A zu Server B ist unverschlüsselt.
Eine Firewallregel wird daran nichts ändern.
Je nach eingesetzter Webapplikation könnte man dort noch eine SSL Verschlüsselung aktivieren. In der Regel ist es aber nicht gewollt, dass die Webapplikation auch noch um Verschlüsselung kümmert.
Um die Verbindung dazwischen zu verschlüsseln, gibt es verschiedene Möglichkeiten.
- auf Server A einen NGINX als Reverse Proxy vor die Webapplikation schalten und den NGINX mit https konfigurieren. Der nginx auf Server B macht dann den proxy pass auf https://serverA
- du konfigurierst einen stunnel zwischen den beiden Servern und setzt den Proxy Pass dann auf den lokalen stunnel Port.
- du konfigurierst eine VPN Verbindung zwischen den beiden Servern und lässt den nginx die Verbindung dann durch den von Tunnel zu deiner Webapplikation aufbauen.
Variante 1 ist nach meiner Erfahrung die einfachste und stabilste Methode.