Nginx + Exchange Server

Started by Oachkatze, January 27, 2025, 12:04:22 PM

Previous topic - Next topic
Hallo zusammen,

ich habe einen Nginx-Server laufen und möchte nun einen Exchange Server für den externen Zugriff bereitstellen. Momentan funktioniert das jedoch nicht, da der Port 443 blockiert ist.

Meine Frage: Gibt es eine Möglichkeit, den Nginx so zu konfigurieren, dass er als Pass-Through-Proxy fungiert und das Zertifikat des Exchange Servers verwendet? Oder hat hier jemand Erfahrung, wie man das am besten umsetzt, damit der Exchange Server über den Nginx erreichbar ist?

Danke im Voraus!

LG,
Simon

Wenn du eingehend Port 443 verwenden möchtest, musst du das Firewall-UI auf einen anderen Port legen und am besten auch die automatische Weiterleitung von HTTP nach HTTPS deaktivieren, da man Port 80 ja meistens auch selbst mit einer gezielten Weiterleitung versorgen möchte.

Für Pass-through, wenn die SSL-Terminierung auf dem Exchange selbst stattfindet, reicht ja ein eingehendes NAT Port Forward. Wozu da der NginX? Content inspection geht ja sowieso nicht, wenn das SSL bis zum Exchange durch geht ...
Deciso DEC750
People who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

Quote from: Patrick M. Hausen on January 27, 2025, 12:51:22 PMWenn du eingehend Port 443 verwenden möchtest, musst du das Firewall-UI auf einen anderen Port legen und am besten auch die automatische Weiterleitung von HTTP nach HTTPS deaktivieren, da man Port 80 ja meistens auch selbst mit einer gezielten Weiterleitung versorgen möchte.

Für Pass-through, wenn die SSL-Terminierung auf dem Exchange selbst stattfindet, reicht ja ein eingehendes NAT Port Forward. Wozu da der NginX? Content inspection geht ja sowieso nicht, wenn das SSL bis zum Exchange durch geht ...

Die Firewall-UI nutzt bereits einen anderen Port, und die eingehenden Ports 443 und 80 werden von Nginx verwendet. Dadurch kann ich diese Ports für den Exchange Server nicht direkt nutzen. Ein einfaches Portforwarding ist daher ebenfalls nicht möglich.

Vielen Dank im Voraus!


Hallo,

möchtest Du den Exchange hinter einem ReverseProxy konfigurieren? Wenn ja, wäre NGINX eine Möglichkeit - alternativ Caddy oder HAProxy...

Port 80 und 443 werden dann vom Reverseproxy belegt und je nach Aufruf an den internen Abnehmer weitergereicht.

Quote from: bertoni on January 27, 2025, 02:03:51 PMHallo,

möchtest Du den Exchange hinter einem ReverseProxy konfigurieren? Wenn ja, wäre NGINX eine Möglichkeit - alternativ Caddy oder HAProxy...

Port 80 und 443 werden dann vom Reverseproxy belegt und je nach Aufruf an den internen Abnehmer weitergereicht.

ich habe meinen Exchange Server so konfiguriert, dass er über die URL erreichbar ist. Das funktioniert auch problemlos. Allerdings habe ich ein Problem:

Wenn ich versuche, von extern Outlook einzurichten, schlägt das fehl. Es scheint, als ob die Verbindung nicht korrekt hergestellt werden kann – Outlook fragt ständig nach einem Passwort. Das deutet für mich darauf hin, dass es ein Kommunikationsproblem gibt.

Gibt es etwas Spezielles, das ich bei der Konfiguration von Autodiscover oder anderen Diensten beachten muss, damit das funktioniert mit Nginx ?

Vielen Dank im Voraus für eure Hilfe!


Das funktioniert entweder mit Caddy in OPNsense Community oder der OPNWAF (basierend auf Apache) in OPNsense Business.

In Caddy wäre es der Haken "NTLM" im Handler, welcher Outlook von extern ermöglicht. Das Modul ist im os-caddy plugin kompiliert. https://github.com/caddyserver/ntlm-transport

In Apache (OPNWAF) ist es ein eigenes Modul was kompiliert ist, nennt sich "mod_proxy_msrpc". Dieses ist in der OPNsense Business Version dabei.
https://docs.opnsense.org/vendor/deciso/opnwaf.html#exchange-server

Bei NGINX gibt es das Modul nur in nginx plus https://nginx.org/en/docs/http/ngx_http_upstream_module.html#ntlm

Das bedeutet, um Exchange mit Outlook zum laufen zu bekommen, verwende entweder Caddy oder OPNWAF, oder benutze keinen TLS Termination Proxy, sondern einen Layer 4 Proxy (HAproxy, nginx und Caddy können Layer 4 Proxy)
Hardware:
DEC740

Quote from: Monviech (Cedrik) on January 27, 2025, 03:03:27 PMDas funktioniert entweder mit Caddy in OPNsense Community oder der OPNWAF (basierend auf Apache) in OPNsense Business.

In Caddy wäre es der Haken "NTLM" im Handler, welcher Outlook von extern ermöglicht. Das Modul ist im os-caddy plugin kompiliert. https://github.com/caddyserver/ntlm-transport

In Apache (OPNWAF) ist es ein eigenes Modul was kompiliert ist, nennt sich "mod_proxy_msrpc". Dieses ist in der OPNsense Business Version dabei.
https://docs.opnsense.org/vendor/deciso/opnwaf.html#exchange-server

Bei NGINX gibt es das Modul nur in nginx plus https://nginx.org/en/docs/http/ngx_http_upstream_module.html#ntlm

Das bedeutet, um Exchange mit Outlook zum laufen zu bekommen, verwende entweder Caddy oder OPNWAF, oder benutze keinen TLS Termination Proxy, sondern einen Layer 4 Proxy (HAproxy, nginx und Caddy können Layer 4 Proxy)

Oke, mit dem normalen Nginx, der bei der OPNsense dabei ist, kann ich kein Autodiscover über Exchange fahren.
Die Seite ist zwar über das Internet erreichbar, aber es gibt immer wieder Schwierigkeiten beim Abrufen von Benutzerdaten. Das Profil wird zwar geladen, aber es erscheint sofort eine erneute Passwortabfrage.

Ich bin mir unsicher, ob das Problem an der Nginx-Konfiguration liegt oder ob auf meinem Test-Exchange-Server noch etwas angepasst werden muss.


Das schrieb @Monviech doch, dass es nur mit NginX Plus geht. Der ist in OPNsense naturgemäß nicht drin, ist ja kein Open Source sondern ein Lizenzprodukt. --> auf Caddy oder HAproxy wechseln.
Deciso DEC750
People who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

Quote from: Patrick M. Hausen on January 27, 2025, 03:44:17 PMDas schrieb @Monviech doch, dass es nur mit NginX Plus geht. Der ist in OPNsense naturgemäß nicht drin, ist ja kein Open Source sondern ein Lizenzprodukt. --> auf Caddy oder HAproxy wechseln.


Alles klar mit Caddy funktioniert es - da habe ich aber das Problem das mein Guacamole (RDP) nur eine weiße Seite angezeigt wird ... deswegen bin ich von Nginx noch nicht geswitch .. muss ich mich mal mit beschäftigen - vielleicht weiß da jemand von euch Bescheid

Für Guacamole hab ich extra das Feature "Upstream Path" in das Caddy-Plugin  eingebaut, kein Problem :-)

Deciso DEC750
People who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

Quote from: Patrick M. Hausen on January 27, 2025, 04:20:32 PMFür Guacamole hab ich extra das Feature "Upstream Path" in das Caddy-Plugin  eingebaut, kein Problem :-)



Oke, bei mir ging es jetzt auch ohne den Upstream Path.
Ich hatte immer das Problem, als Caddy auf OPNsense zum Einsatz kam, aber jetzt scheint alles soweit zu funktionieren. Vielen Dank, jetzt kann ich den Nginx wohl endlich einstampfen! 😊




Kurze Frage zu Caddy: Bei Nginx gibt's ja die Möglichkeit, eine eigene 'Gebannt'-Seite einzurichten. Wie sieht das bei Caddy aus? Gibt es da sowas auch, oder ist das noch nicht so weit entwickelt?

Das plugin konfiguriert Caddy so, dass es keine statischen Dateien serviert, also auch keine eigenen Error HTML Seiten. Das dient zur sicherheit für die Firewall, es gibt kein Web Root Verzeichnis. Es ist nur proxy.

Wenn Access Lists benutzt werden kann man dort in den Advanced Optionen einen eigenen HTTP Status Code mit eigener Message definieren, die dann im Browser angezeigt wird.

Hardware:
DEC740

Quote from: Monviech (Cedrik) on January 28, 2025, 09:29:32 PMDas plugin konfiguriert Caddy so, dass es keine statischen Dateien serviert, also auch keine eigenen Error HTML Seiten. Das dient zur sicherheit für die Firewall, es gibt kein Web Root Verzeichnis. Es ist nur proxy.

Wenn Access Lists benutzt werden kann man dort in den Advanced Optionen einen eigenen HTTP Status Code mit eigener Message definieren, die dann im Browser angezeigt wird.




Super, vielen Dank für die Info!

Ist Caddy in puncto Sicherheit auf dem gleichen Niveau wie Nginx, oder hinkt es hier noch etwas hinterher?
Das Einrichten eines neuen Servers ist ja deutlich einfacher als bei Nginx. :-)

Gibt es sonst noch etwas, das ich beachten sollte?

Ich kann das nicht beurteilen. Du kannst ja mal im Caddy Forum nachfragen: https://caddy.community/

Wenn du technisch etwas höhere Sicherheit willst kannst du den Prozess als "www" user laufen lassen indem du das in den General Settings umstellst.

https://docs.opnsense.org/manual/how-tos/caddy.html#run-caddy-process-unprivileged
Hardware:
DEC740