How Can We Help?
NGINX: ReverseProxy für MAPI over HTTP, EAS und OWA
Ich habe ja mal hier beschrieben wie man einen NGNIX-ReverseProxy für EAS (Exchange ActiveSync) und OWA (OutlookWebApp) konfiguriert.
Mit Exchange 2013 wurde MAPI over HTTP eingeführt und spätestens mit Exchange 2016 wird dieses Protokoll für die Verbindung mit Outlook verwendet. Mit wenig Aufwand kann man jetzt den NGINX auch dafür verwenden um externe Outlooks anzubinden – egal ob Outlook 2010, 2013 und auch das neue Outlook 2016.
Damit das sauber – auch über Autodiscover (wichtig für Outlook 2016) – funktioniert sind folgende Vorarbeiten zu beachten:
1) Autodiscover konfigurieren
Ich empfehle die URLs der Virtuellen Verzeichnisse und von Autodiscover auf einen DNS-Namen zu setzten der intern und extern auflösbar ist – z.B. outlook.domain.de und autodiscover.domain.de.
Die URLs am Exchange kann man folgendermaßen am Exchange über die Exchange Management Shell konfigurieren:
Set-OWAVirtualDirectory –Identity „OWA (default web site)“ -ExternalURL „https://outlook.domain.de/OWA“
Set-OWAVirtualDirectory –Identity „OWA (default web site)“ -InternalURL „https://outlook.domain.de/OWA“
Set-OABVirtualDirectory –Identity „OAB (default web site)“ -ExternalURL „https://outlook.domain.de/OAB“
Set-OABVirtualDirectory –Identity „OAB (default web site)“ -InternalURL „https://outlook.domain.de/OAB“
Set-ECPVirtualDirectory –Identity „ECP (default web site)“ -ExternalURL „https://outlook.domain.de/ECP“
Set-ECPVirtualDirectory –Identity „ECP (default web site)“ -InternalURL „https://outlook.domain.de/ECP“
Set-WebServicesVirtualDirectory –Identity „EWS (default web site)“ -ExternalUrl „https://outlook.domain.de/ews/exchange.asmx“
Set-WebServicesVirtualDirectory –Identity „EWS (default web site)“ -InternalUrl „https://outlook.domain.de/ews/exchange.asmx“
Set-ActiveSyncVirtualDirectory –Identity „Microsoft-Server-ActiveSync (default web site)“ -ExternalURL „https://outlook.domain.de/Microsoft-Server-ActiveSync“
Set-ActiveSyncVirtualDirectory –Identity „Microsoft-Server-ActiveSync (default web site)“ -InternalURL https://outlook.domain.de/Microsoft-Server-ActiveSync
Set-ClientAccessServer -AutoDiscoverServiceInternalUri „https://autodiscover.domain.de/Autodiscover/Autodiscover.xml“
Im Zertifikat des Exchanges müssen natürlich auch diese beiden DNS-Namen stehen – in diesem Beispiel also outlook.domain.de und autodiscover.domain.de.
Im internen DNS und im externen DNS müssen die beiden DNS-Namen strong>outlook.domain.de und autodiscover.domain.de eingetragen werden – im internen DNS direkt auf euren Exchange-Server und im externen auf die öffentliche IP des ReverseProxys.
2) IIS am Exchange konfigurieren
Damit über den ReverseProxy z.B. auch der Abwesenheitsassistent (Out of Office) und die E-Mail-Infos funktionieren, muss am IIS des Exchanges im EWS und im MAPI die Standardauthentifizierung aktiviert werden:
### IIS EWS $iisSiteName = "Default Web Site" $iisAppName = "EWS" Write-Host Enable windows authentication Set-WebConfigurationProperty -Filter '/system.webServer/security/authentication/basicAuthentication' -Name 'enabled' -Value 'true' -PSPath 'IIS:\' -Location "$iisSiteName/$iisAppName" ### IIS MAPI $iisSiteName = "Default Web Site" $iisAppName = "mapi" Write-Host Enable windows authentication Set-WebConfigurationProperty -Filter '/system.webServer/security/authentication/basicAuthentication' -Name 'enabled' -Value 'true' -PSPath 'IIS:\' -Location "$iisSiteName/$iisAppName" ### IIS reset iisreset write-host "Fertig!"
3) NGINX-Konfig
Die Grundinstallation ist ja schon hier beschreiben.
Für mein Beispiel muss das Zertifikat für den NGINX muss outlook.domain.de und autodiscover.domain.de enthalten. Der interne Exchange ist hier im Beispiel der exch2016.test.local.
Hier ist dann die Konfig für den ReverseProxy:
#Abschnitt 1 server { listen 80; server_name outlook.domain.de autodiscover.domain.de; # Redirect any HTTP request to HTTPS return 301 https://$server_name$request_uri; error_log /var/log/nginx/exchange-error.log; access_log /var/log/nginx/exchange-access.log; } #Abschnitt 2 server { listen 443; server_name outlook.domain.de autodiscover.domain.de; # Enable SSL ssl on; ssl_certificate /etc/nginx/certs/cert.crt; ssl_certificate_key /etc/nginx/certs/cert.key; ssl_session_timeout 5m; # Set global proxy settings proxy_read_timeout 360; 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; proxy_set_header Accept-Encoding ""; more_set_input_headers 'Authorization: $http_authorization'; proxy_set_header Accept-Encoding ""; more_set_headers -s 401 'WWW-Authenticate: Basic realm="exch2016.test.local"'; location /owa { proxy_pass https://exch2016.test.local/owa; } location /OWA { proxy_pass https://exch2016.test.local/owa; } location /EWS { proxy_pass https://exch2016.test.local/EWS; } location /ews { proxy_pass https://exch2016.test.local/EWS; } location /Microsoft-Server-ActiveSync { proxy_pass https://exch2016.test.local/Microsoft-Server-ActiveSync; } location /mapi { proxy_pass https://exch2016.test.local/mapi; } location /MAPI { proxy_pass https://exch2016.test.local/mapi; } location /rpc { proxy_pass https://exch2016.test.local/Rpc; } location /RPC { proxy_pass https://exch2016.test.local/Rpc; } location /oab { proxy_pass https://exch2016.test.local/OAB; } location /OAB { proxy_pass https://exch2016.test.local/OAB; } location /autodiscover { proxy_pass https://exch2016.test.local/Autodiscover; } location /Autodiscover { proxy_pass https://exch2016.test.local/Autodiscover; } error_log /var/log/nginx/exchange-ssl-error.log; access_log /var/log/nginx/exchange-ssl-access.log; }
Damit hab ich ein Outlook 2016 an einen Exchange 2016 angebunden. Alles funktioniert – auch der Abwesenheitsassistent 🙂
Hilfreiche Quellen:
FrankysWeb
blog.kempkens.io