Nginx als Reverse Proxy für Autodiscover und Outlook Anywhere

Letzte Aktualisierung am 22.09.2019, 12:09:08 Uhr

In den letzten Tagen stand die Veröffentlichung einiger Dienste eines Microsoft Exchange Server 2010 auf dem Plan. Es ging dabei primär um Outlook Anywhere in Verbindung mit Autodiscover. Die Herausforderung dabei ist noch das Exchange 2010 mit hilfe von RPC over https kommunziert. Damit kommt leider nicht jeder Reverse Proxy klar. Der Lösungsansatz ist eine virtuelle Maschine unter Ubuntu 14.04 LTS mit dem Webserver nginx. Dieser benötigt im Vergleich zu Apache kaum Ressourcen und ist somit auf schwachen Systemen leistungsstark. Des Weiteren entstehen keine Lizenz- und Wartungskosten.

nginx-rp-outlook-anywhere-autodiscover

Die Installation von Ubuntu und die Konfiguration von Outlook Anywhere erspare ich mir hier.
Es geht direkt los mit der Installation von Nginx inkl. Tools:

apt-get update
apt-get upgrade
apt-get install nginx nginx-extras

Die Installation von Nginx über das Repository des Entwicklers und die Tools aus dem Ubuntu-Archiv funktioniert nicht fehlerfrei! Die Tools sind erforderlich, damit Parameter wie more_set_input_headers genutzt werden können.

Zuerst muss eine neue Nginx-Konfiguration erstellt werden. Es existiert nach der Installation zwar eine Default Konfiguration, aber diese soll unberührt bleiben.

vi /etc/nginx/sites-available/autodiscover.domain.de

Nachfolgend meine Konfiguration als Vorlage:

server {
        listen 80 spdy;
        listen [::]:80;

        # redirect from htttp to https
        server_name autodiscover.domain.de;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl spdy;
        server_name autodiscover.domain.de;


        #Enable SSL
        ssl on;
        ssl_certificate /etc/nginx/ssl/domain.de.pem;
        ssl_certificate_key /etc/nginx/ssl/domain.de.key;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_session_cache shared:SSL:10m;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;

        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;

        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_pass_header Date;
        proxy_pass_header Server;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        more_set_input_headers 'Authorization: $http_authorization';
        proxy_set_header Accept-Encoding "";
        more_set_headers -s 401 'WWW-Authenticate: Basic realm="exchange.domain.de"';

        # Required for Outlook 2013
        location /autodiscover {
                proxy_pass https://10.20.18.7/Autodiscover;
        }

        # Required for Microsoft Remote Connectivity Analyzer
        location /Autodiscover {
                proxy_pass https://10.20.18.7/autodiscover;
        }
}

Den Wert domain durch ist ein Platzhalter.
Der Wert Basic realm=“exchange.domain.de“ muss der Outlook Anywhere Adresse entsprechen.
Die IP-Adresse 10.20.18.7 ist durch eure Exchange Server Adresse zu ersetzen.

Mit :wq wird die Konfiguration abspeichert und geschlossen. Damit der Webserver die neue Konfiguration bei einem Reload einliest, muss noch ein symbolischer Link erstellt werden.

ln -s /etc/nginx/sites-available/autodiscover.domain.de /etc/nginx/sites-enable/autodiscover.domain.de

Die Datei /etc/ssl/certs/dhparam.pem könnt ihr mit folgenden Befehl generieren lassen:

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

Zum Abschluss die Konfiguration auf Fehler prüfen lassen und in den Webserver einlesen lassen:

service nginx configtest
service nginx reload
Abonnieren
Benachrichtige mich bei
16 Comments
neueste
älteste
Inline Feedbacks
View all comments
Sunny
25.01.2018 07:51

Hi @all
steh vor folgendem Problem :
Nginx auf Exchange extern läuft ohne Problem dank der obigen Anleitung perfekt…
Mein Problem liegt im Zugriff innerhalb des lokalen Lan…
Da geht der Zugriff ja nicht über den Nginx sondern direkt auf den Exchange via internem DNS vom Windows Server…
Dort bekomm ich immer eine Zertifikatswarnung, von wegen ungültig..(Ist klar, ist ja auch das „selbstausgestellte“ vom Exchange…
Wie habt Ihr das gelöst ??
Danke für nen Tip..
Grüße
Sunny, ebenfalls Schwabenland

the_Uli
04.11.2017 23:54

Hei, leider bekomme ich im Nginx Log immer nur folgende Meldung wenn Outlook versucht sich via Outlook Anywhere zu verbinden =( Getestet mit einem Outlook 2010, Outlook Anywhere ohne Nginx Proxy funktioniert jedoch ohne Probleme. Einer eine Idee was mein der Fehler ist? Auf dem Exchange Server sind folgende Einstellungen gesetzt: – IIS „Standardauthentifizierung –> Aktiviert –> HTTP 401 – Abfrage“ aktiviert (alle anderen deaktiviert) – NTLM für Outlook Anywhere Authentifizierung ist deaktiviert und nur BASIC erlaubt. jedoch sehe ich unter „outlook /rpcdiag“ dennoch das Outlook versucht NTLM für die Authentifizierung zu verwenden. Folgende Einträge erhalte ich im Nginx Log:… Weiterlesen »

the_Uli
Reply to  the_Uli
05.11.2017 00:44

In der error log vom Nginx steht ebenfalls das selbe wie bei @Krüger

[error] 1623#1623: *14 upstream timed out (110: Connection timed out) while reading upstream, client: x.x.x.x, server: mail.test.de, request: „RPC_OUT_DATA /rpc/rpcproxy.dll?srv-ex01.lab.local:6004 HTTP/1.1“, upstream: „https://mail.test.de:443/rpc/rpcproxy.dll?srv-ex01.lab.local:6004“, host: „mail.mail.test.de“

the_Uli
Reply to  Daniel
07.11.2017 10:14

Hallo DW,
Exchange 2010 SP3 UR18 und Outlook 2010 Pro x86 mit allen aktuellen Updates (Stand 01.11.17)

der NGINX steht in der DMZ ist jedoch über Firewall entsprechend freigeschaltet, OWA läuft bereits über NGINX Proxy

Firewall Freigabe:
DMZ_NGINX –> LAN_Exchange –> 80/tcp,443/tcp

the_Uli
Reply to  the_Uli
07.11.2017 10:22

Nachtrag:
nginx/1.10.9 läuft auf einem debian9 mit standart arp repos

the_Uli
Reply to  the_Uli
12.11.2017 21:34

Hei, hier der Auszug aus der PowerShell, scheint für mich eigentlich soweit richtig? [PS] C:Windowssystem32>Get-OutlookAnywhere -Server srv-ex01 |fl RunspaceId : xxxxx-xxxxx-xxxxx-xxxxx-xxxxx ServerName : SRV-EX01 SSLOffloading : False ExternalHostname : mail.example.org ClientAuthenticationMethod : Basic IISAuthenticationMethods : {Basic} XropUrl : MetabasePath : IIS://srv-ex01.lab.local/W3SVC/1/ROOT/Rpc Path : C:WindowsSystem32RpcProxy ExtendedProtectionTokenChecking : None ExtendedProtectionFlags : {} ExtendedProtectionSPNList : {} Server : SRV-EX01 AdminDisplayName : ExchangeVersion : 0.10 (14.0.100.0) Name : Rpc (Default Web Site) DistinguishedName : CN=Rpc (Default Web Site),CN=HTTP,CN=Protocols,CN=SRV-EX01,CN=Servers,CN=Exchange Adm inistrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=LAB,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=lab,DC=local Identity : SRV-EX01Rpc (Default Web Site) Guid : xxxxx-xxxxx-xxxxx-xxxxx-xxxxx ObjectCategory : lab.local/Configuration/Schema/ms-Exch-Rpc-Http-Virtual-Directory ObjectClass : {top, msExchVirtualDirectory, msExchRpcHttpVirtualDirectory} WhenChanged : 01.11.2017… Weiterlesen »

the_Uli
Reply to  Daniel
21.11.2017 00:34

Outlook Anywhere funktioniert bei direktem Port Forwarding auf Exchange ohne Probleme.

Kevin
04.08.2017 09:31

Ich habe irgendwas im Hinterkopf das RPC over HTTP(s) vom NGINX nicht geproxyt werden kann?
@DW kannst du da eventuell etwas zu sagen?

Selbst habe ich eine ähnliche konfiguration mit einem Exchange 2016 am laufen.
Da hier Exchange 2016 jedoch für OutlookAnywhare MAPI anstell von RPC verwendet, gab es hier auch keine unerwarteten Probleme.

Krüger
19.07.2017 16:47

Hallo,

ich habe alles wie in der Anleitung beschrieben umgesetzt, erhalte aber auf dem Reverse Proxy (nginx) folgende Fehlermeldung im Log:

[error] client intended to send too large body: 1073741824 bytes, client: xxxx.xxxx.xxxx.xxxx, server: test.example.org, request: „RPC_IN_DATA /rpc/rpcproxy.dll?MSX.example.local:6004 HTTP/1.1“, host: „test.example.org“

Ohne den Reverse Proxy funktioniert Outlook Anywhere. Eine Idee woran es liegen könnte?

Christoph Eggler
28.04.2017 13:38

Hat jemand schon Skype for Business mit NGINX als Reverse Proxy implementiert?
Das Problem welches ich habe, dass ich für das Autodiscover resp. Outlook anywhere Basic Authentisierung forcieren muss, jedoch der Skype for Business Client (welcher ebenfalls Bestandteile vom Exchange benötigt) nur NTLM Authentisierung kann und ohne diesen Teil die Integration des Exchange nicht möglich ist….!

Bin für alle Tips Dankbar.