Aktionen

Apache2 als Reverse Proxy für Exchange 2010 2013 2016 2019 inklusive Outlook Anywhere RPC over http

Aus znilwiki

(Weitergeleitet von Apache2 als Reverse Proxy für Exchange 2010 2013 inklusive Outlook Anywhere RPC over http)
Important.png
Hinweis: Diese Anleitung habe ich zuletzt mit Ubuntu 20.04 und Exchange 2019 selbst getestet!


Nachfolgend beschreibe ich wie

  • ein Webserver mit
  • mehreren Servern dahinter
  • sich eine externe IP teilen und
  • je nach DNS-Name / Subdomain die Anfragen zu den einzelnen Servern weiter geleitet werden
  • inklusive eines Exchange-Server mit OWA, ActiveSync und(!) Outlook Anywhere (RPC over http)


ChangeLog:

  • 20.11.2014: Eintrag in Konfigurationsdatei hinzugefügt damit AutoDiscover funktioniert - hatte Probleme bei der Authentifizierung
  • 20.11.2014: Expectation Failed Apache 417 - Fehler behoben! Der Remote Connectivity Analyzer meldet keine Fehler bei AutoDiscover und ActiveSync mehr!!!
  • 20.11.2014: Und noch den letzten Fehler gefunden - der Zugriff auf den /ews Teil scheiterte an der Authentifizierungsmethode NTLM - geht durch den Apache nicht Fehlerfrei durch, Workaoround gebaut
  • 21.11.2014: Text zu den notwendigen Subdomains und den Zertifikaten noch etwas weiter ausgeführt
  • 18.12.2014: a2enmod headers hinzugefügt, ist nicht unbedingt ab Werk aktiv
  • 17.12.2015: Ergänzungen zum OAB Modul (Offline Address Book) - Dank an T. Andreas
  • 21.04.2016: Ergänzung zum Anhang versenden per Active Sync - Danke an RWambacher
  • 24.03.2019: Anpassung des Artikels an Ubuntu 18.04 und Exchange 2016
  • 24.04.2019: Neue Version mit Exchange 2016
  • 08.05.2019: aktive Konfiguration wie ich diese zur Zeit im Live-Betrieb habe
  • 10.12.2020: Lösung die ohne Änderung an der IIS Security auskommt von Marco Maus ( marco.maus@mit-system.eu ) übernommen
  • 02.04.2021: Sicherheitsproblem im Zusammenhang mit dem mpm_prefork - Modul und nicht Outlook-Clients behoben



Ausgangslage

Ich habe einen ESXi-Server im Internet stehen. Auf diesem laufen

  • pfSense als zentrale Firewall
  • ein WEBSERVER mit dieser und anderen Webseiten (Ubuntu 18.04.x LTS / Apache2 / MySQL) mit ISPConfig zur Verwaltung
  • ein ZABBIX Server (Zabbix 5.0.x auf Ubuntu 20.04.x LTS / Apache2 / MariaDB)
  • ein SEAFILE Server (Seafile 7.2.1 auf Ubuntu 20.04.x LTS / Apache2 / MySQL)
  • zwei EXCHANGE Server (Exchange 2016 auf Windows Server 2016)


Diesen Server habe ich bei Kimsufi SoYouStart OVH gemietet - die sind sehr günstig - aber bieten auch nur eine einzige externe IP-Adresse.
Die IPv4 liegt an der pfSense Firewall extern an. Nun wollte ich das je nach Subdomain die entsprechende Webseite bzw. der entsprechende Server angesprochen wird.
Exchange-Apache-Proxy-001.png

Die Schwierigkeit lag nun darin das ich diverse Domänen haben - und hinter diesen verschieden Subdomains, teils mit http, teils mit https
Trotzdem sollte sich alles eine gemeinsame externe IP-Adresse teilen. Ich hätte ja auch nur den Port 443 an den Exchange weiterleiten (NAT) können - aber dann hätte ich keine anderen
Webseiten mit https absichern können ... und das in der heutigen Zeit
Bei Webseiten ist dies nicht weiter schwierig - je nachdem mit welchem DNS-Namen man von extern kommt serviert Apache die entsprechende Webseite.
Dies habe ich mit einer Apache-VirtualHost (vhost) Konfiguration gelöst: http://httpd.apache.org/docs/2.4/vhosts/examples.html
Da es einfacher zu verwalten ist nutze ich ISPConfig ( http://www.ispconfig.de/ ) zur Konfiguration.
Im Verzeichnis

/etc/apache2/sites-available

liegt dazu für jede Webseite / Subdomain eine passende Datei mit der Konfiguration eben dieser Domain / Subdomain.

# ls -l /etc/apache2/sites-available
drwxr-xr-x 2 root root 4096 Okt 31 19:34 ./
drwxr-xr-x 8 root root 4096 Okt 14 23:35 ../
-rw-r--r-- 1 root root 6437 Jan  7  2014 default-ssl.conf
-rw-r--r-- 1 root root 1622 Okt 31 08:44 ispconfig.conf
-rw-r--r-- 1 root root 2023 Okt 31 08:44 ispconfig.vhost
-rw-r--r-- 1 root root 3601 Nov  2 12:09 mail.linz.email.vhost
-rw-r--r-- 1 root root  922 Okt 31 19:57 seafile.znil.net.vhost
-rw-r--r-- 1 root root 3357 Okt 25 20:57 support.znil.net.vhost
-rw-r--r-- 1 root root  945 Okt 25 22:57 zabbix.znil.net.vhost
-rw-r--r-- 1 root root 3361 Okt 24 23:58 znil.de.vhost
-rw-r--r-- 1 root root 2923 Okt 25 00:01 znil.net.vhost

usw.
Jede Datei besitzt einen symbolischen link in das Verzeichnis

/etc/apache2/sites-enabled

es ist also beides die jeweils gleiche Datei.
Durch direktes Bearbeiten dieser Dateien kann man nun steuern wo etwas landen soll. Habt Ihr keine vhost Konfiguration und gibt es nur eine Datei in diesen Verzeichnissen so müsst Ihr einfach eine neue Datei anlegen. In diesem Fall aktiviert Ihr die Datei mit

a2ensite [name_der_datei]

Die Datei wird dann nach

/etc/apache2/sites-enabled

verlinkt (und was Apache sonst noch machen muss).



Apache Module nachinstallieren / aktiviern

Um den Apache auch als Reverse Proxy nutzen zu können brauch es ein paar Module die erst noch aktiviert werden müssen:

a2enmod headers
a2enmod rewrite
a2enmod proxy_http
a2enmod ssl

Im Anschluss ein

systemctl restart apache2.service

und es kann losgehen.



Domänen / Subdomains anlegen

Ihr müsst bei eurem Provider / Hoster der Domänen die folgenden Subdomains anlegen:

  • wenn eure Domäne linz.email heisst dann die Subdomains
    • mail.znil.org <- da lassen wir den MX-Record drauf zeigen
    • autodiscover.mail.znil.org <- brauchen wir damit Autodiscover funktioniert

Beide Einträge sollten dann auf die externe IP-Adresse eures Apache-Servers zeigen.

Diese Domänen brauchen wir dann auch auf eurem Server mit Apache. Falls ihr ISPConfig nutzt legt bitte nur die mail.domäne.suffix dort an - die andere Subdomain autodiscover.domäne.suffix schreiben wir direkt in die Konfigurationsdatei.

Wenn Ihr das von Hand machen wollt legt eine Datei im Verzeichnis /etc/apache2/sites-available, das kann auch gleich die weiter unten aufgeführte Datei sein.


Port Weiterleitung / Port Forwarding / NAT

Egal ob wie hier eine pfSense-Maschine oder eine Fritzbox - leitet die externen Ports

80
443

an euren internen Webserver weiter (also den Server auf dem der Apache Reverse Proxy läuft).
Brauchen eure anderen Server noch weitere Ports wie bei mir (siehe Zeichnung oben) so leitet die entsprechenden Ports dann direkt an die jeweiligen Server weiter,
bei mir z.B. den Port 25 für SMTP an den Exchange Server oder den Port 10051 an den Zabbix-Server.



Apache Reverse Proxy

Nachdem wir die Domänen angelegt haben und es für jede dieser Domänen eine eigene .vhost Datei unter

/etc/apache2/sites-available

und deren Verlinkung unter

/etc/apache2/sites-enabled

gibt bearbeiten wir diese für die verschiedenen Subdomains.
Bearbeitet immer die Version unter sites-available.



Zabbix-Server (zum Aufwärmen)

Bevor wir mit der "dicken" Konfigurationsdatei für Exchange anfangen eine kleinere, leichtere zum Einstieg und zum Verständnis.
Mein Zabbix-Server soll extern über die Subdomain

zabbix.znil.net

erreichbar sein.
In ISPConfig habe ich diese Subdomäne als Host angelegt und habe somit auch eine Datei

/etc/apache2/sites-available/zabbix.znil.net.vhost

Intern hat der Zabbix-Server die IP-Adresse

192.168.200.20

Wir bearbeiten nun also die Datei:

nano /etc/apache2/sites-available/zabbix.znil.net.vhost

Löschen den gesamten Inhalt (bei nano mal F9 probieren!) und ersetzen diesen durch den folgenden:

<VirtualHost 192.168.200.10:80>
               ServerName zabbix.znil.net
               ServerAdmin webmaster@znil.net
               ProxyPass / http://192.168.200.20/
               ProxyPassReverse / http://192.168.200.20/
</VirtualHost>

<VirtualHost 192.168.200.10:443>
               ServerName zabbix.znil.net
               ServerAdmin webmaster@znil.net
               SSLEngine on
               SSLCertificateFile /var/www/zabbix.znil.net/ssl/zabbix.znil.net.crt
               SSLCertificateKeyFile /var/www/zabbix.znil.net/ssl/zabbix.znil.net.key
               ProxyPass / http://192.168.200.20/
               ProxyPassReverse / http://192.168.200.20/
</VirtualHost>

Wie Ihr seht gibt es jeweils eine http (Port 80) und https (Port 443) Konfiguration. Braucht ihr eines von beiden nicht so lasst es weg.

Erklärungen:

<VirtualHost 192.168.200.10:80>             : Die 192.168.200.10 ist die interne IP-Adresse unseres Webservers.
                                              Auf diese IP werden per NAT von extern die Ports 80 und 443 weiter geleitet.
                                              Steht euer Webserver direkt im Internet wäre dies die öffentliche IP des Servers
                                              Der Port ist hier 80 (hhtp) oder 443 (https)

ServerName zabbix.znil.net                  : Die Subdomäne / Domäne für welche die Einstellungen gelten sollen

ServerAdmin webmaster@znil.net              : Email-Adresse an die sich bei Problemen gewandt werden soll

ProxyPass / http://192.168.200.20/          : leitet alle Anfragen an die Subdomain an diese (interne) IP-Adresse weiter.
                                              Man könnte auch einen DNS-Namen nehmen

ProxyPassReverse / http://192.168.200.20/   : Der Rückweg zur vorherigen Regel

Bei der SSL Konfiguration steht zusätzlich noch

SSLEngine on
SSLCertificateFile /var/www/zabbix.znil.net/ssl/zabbix.znil.net.crt
SSLCertificateKeyFile /var/www/zabbix.znil.net/ssl/zabbix.znil.net.key

Hier wird also ein SSL Zertifikat verwendet - die Kommunikation nach extern(!) findet also verschlüsselt statt! Intern ist die Weiterleitung aber per http:, intern wird also unverschlüsselt Kommuniziert.
Soll/Muss intern der Datenverkehr auch verschlüsselt stattfinden so gebt einfach die https-Adressen an.
Man kann auch noch "Rewrite" Regeln angeben - das ist eine Text-Ersetzung die stattfindet.
Wenn Ihr im Teil für Port 80 so ändert:

 <VirtualHost 192.168.200.10:80>
               ServerName zabbix.znil.net
               ServerAdmin webmaster@znil.net
               RewriteEngine On
               RewriteCond %{HTTPS} off
               RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

Würde ein http: Aufruf auf https: umgeleitet.
Von den Rewrites macht gleich die Exchange-Lösung massiv gebrauch.



Exchange-Server

Die Exchange-Version ist etwas umfangreicher ...


Outlook Anywhere Unterstützung nachinstallieren

Seit Ubuntu 14.04 geht das einfach mit

apt install libapache2-mod-proxy-msrpc

Nach der Installation funktioniert der Eintrag

OutlookAnywherePassthrough On

ohne Installation wird Apache meckern und nicht starten.


KeepAlive Einstellung des Apache prüfen

Unter Ubuntu 20.04 / 18.04 ist diese Einstellung normalerweise schon ab Werk aktiv, wir prüfen das zur Sicherheit aber einmal:

nano /etc/apache2/apache2.conf

und dort die Zeile

KeepAlive On

suchen - diese sollte nicht aus kommentiert sein und auf On stehen.
Dieser Hinweis stammt von Marco Maus und ist wichtig damit die Authentifizierung per NTLM funktioniert.


Apache2 Module prüfen

Auch diese Einstellungen sind unter Ubuntu 20.04 bereits ab Werk deaktiviert und aktiviert (war bei mir zumindest so), aber es schadet nicht sicher zu gehen

a2dismod mpm_event
a2enmod mpm_prefork
systemctl apache2.service restart

Dieser Hinweis stammt von Marco Maus und ist wichtig damit die Authentifizierung per NTLM funktioniert.


Zertifikate

Im Moment nutze ich für den Apache2 ein Lets Encrypt Zertifikat welches immer automatisch erneuert wird.
In der nachfolgenden Konfiguration wird ein Zertifikat für

mail.znil.org
autodiscover.znil.org

benötigt. Das könnt Ihr auf dem Linux-Server wie folgt anfordern:

systemctl stop apache2
certbot certonly --standalone --preferred-challenges http --rsa-key-size 4096 -d mail.znil.org -d autodiscover.znil.org
systemctl start apache2

Damit wird der Apache-Webserver gestoppt, das Zertifikat angefordert und der Apache wieder gestartet.
Werden weitere DNS-Namen benötigt so fügt einfach weitere -d Einträge hinzu - und unten in der Konfiguration weitere ServerAlias-Einträge

So ein Lets Encrypt Zertifikat läuft nach 3 Monaten ab und muss dann erneuert werden.
Die Erneuerung funktioniert nach dieser Methode:

Lets Encrypt Zertifikate erneuern mit Apache Reverse Proxy

Dabei halte ich den Apache Dienst im Falle einer Erneuerung immer kurz an. Da dieses nur selten vorkommt (bei meinen 30 Subdomänen so alle 3 Tage mal für eine Minute) kann ich damit gut leben.
Auf dem Exchange 2016 nutze ich eine selbstsigniertes Zertifikat welches ich einfach über das Management erstellt habe

Server => Zertifikate => +
ClipCapIt-190424-115141.PNG

Dieses ist 5 Jahre gültig bei mir - sollte erst einmal ausreichen. Auch in diesem Zertifikat sollten aber alle DNS-Namen vorhandenen sein die genutzt werden (und das Lets Encrypt Zertifikat hat)
In der Apache2 Konfiguration oben sind alle Prüfungen ausgeschaltet - solange also nur über den Apache-Proxy zugegriffen wird gibt es keine Probleme.

Zusammengefasst:

  • nach extern wird ein kostenloses "Lets Encrypt" Zertifikat genutzt und automatisch erneuert
  • intern nutzt der Exchange-Server ein selbst signiertes Zertifikat welches länger gültig ist und deshalb nicht erneuert werden muss.



Konfigurationsdatei

Die nachfolgende Version funktioniert bei mir Einwandfrei mit Exchange 2019 auf Windows Server 2019.

# Tipp von Bernd Krumböck wegen Sicherheitsproblemen mit dem MPM Modul und NTLM Authentifizierung
# Clients welche EWS verwenden (z.B. AquaMail) bekommen E-Mails anderer Sitzungen synchronisiert
# ServerLimit und MaxRequestWorkers ggf. an die Anzahl der vorhandenen Clients anpassen
#ServerLimit 300
#MaxRequestWorkers 300
MaxConnectionsPerChild 1

<VirtualHost 10.100.12.10:80>
        ServerName mail.znil.org
        ServerAlias autodiscover.znil.org
        ServerAdmin webmaster@znil.org

        ErrorLog /var/log/apache2/error.log
        # Nachfolgende Zeile loggt jeden Zugriff, alternativ den Zeile darunter verwenden, dann werden die Logs verworfen
        CustomLog /var/log/apache2/access.log combined
        #CustomLog /dev/null common

        Header always set X-Frame-Options SAMEORIGIN
        Header set Server Apache
        RequestHeader unset Expect early
        Header unset X-AspNet-Version
        Header unset X-OWA-Version
        Header unset X-Powered-By

        ProxyRequests Off
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule ^/owa(.*) https://mail.znil.org/owa$1 [R,L]
        RewriteRule ^/ecp(.*) https://mail.znil.org/ecp$1 [R,L]
        RewriteRule ^/Microsoft-Server-ActiveSync(.*) https://mail.znil.org/Microsoft-Server-ActiveSync$1 [R,L]

        DocumentRoot /var/www/mail.znil.org/web

        <Directory />
            Order deny,allow
            Deny from all
        </Directory>

        <Directory /var/www/mail.znil.org/web>
            DirectoryIndex index.php index.html
            Options -Indexes +FollowSymLinks
            Order allow,deny
            Allow from all
        </Directory>

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
</VirtualHost>

<VirtualHost 10.100.12.10:443>
        DocumentRoot /var/www/mail.znil.org/web

        ServerName mail.znil.org
        ServerAlias autodiscover.znil.org
        ServerAdmin webmaster@znil.org

        ErrorLog /var/log/apache2/error.log
        # Nachfolgende Zeile loggt jeden Zugriff, alternativ den Zeile darunter verwenden, dann werden die Logs verworfen
        CustomLog /var/log/apache2/access.log combined
        #CustomLog /dev/null common

        Header always set X-Frame-Options SAMEORIGIN
        Header set Server Apache
        Header unset X-AspNet-Version
        Header unset X-OWA-Version
        Header unset X-Powered-By

        RequestHeader unset Expect early

        SetEnvIf User-Agent ".*MSIE.*" value BrowserMSIE
        # 10.12.2020: Nachfolgende Zeilen würden eine Standardauthentifizierung erzwingen, ist nun nicht mehr Notwendig
        # Tipp von Marco Maus, Fragen an marco.maus@mit-system.eu
        # Header unset WWW-Authenticate
        # Header add WWW-Authenticate "Basic realm=mail.znil.org"
        ProxyRequests Off
        ProxyPreserveHost On

        #abgeschaut von https://github.com/phr0gz/Apache-reverse-proxy-for-Exchange-2010-2013-2016/blob/master/webmail.conf
        ProxyVia Full
        RequestHeader edit Transfer-Encoding Chunked chunked early
        RequestHeader unset Accept-Encoding
        TimeOut 1800
        # Ende abgeschaut

        SSLProxyEngine On
        # Problemen mit Kommunikation zwischen Apache-Proxy und Exchange-Server aus dem Wege gehen
        # Alle SSL Prüfungen werden damit ausgeschaltet. So kann z.B. auch intern ein Selbstsigniertes Zertifikat verwendet werden
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off

        #Nachfolgende Zeile bewirkt das ein Aufruf von nur https://sub.name.suffix auf https://sub.name.suffix/owa weiter geleitet wird.
        Redirect / /owa/

        # owa
        ProxyPass /owa https://10.100.12.81/owa
        ProxyPassReverse /owa https://10.100.12.81/owa
        ProxyPass /OWA https://10.100.12.81/OWA
        ProxyPassReverse /OWA https://10.100.12.81/OWA
        ProxyPass /Owa https://10.100.12.81/Owa
        ProxyPassReverse /Owa https://10.100.12.81/Owa

        # ecp = Adminoberfläche - falls Zugriff nicht gewünscht einfach auskommentieren!
        ProxyPass /ecp https://10.100.12.81/ecp
        ProxyPassReverse /ecp https://10.100.12.81/ecp
        ProxyPass /ECP https://10.100.12.81/ECP
        ProxyPassReverse /ECP https://10.100.12.81/ECP
        ProxyPass /Ecp https://10.100.12.81/Ecp
        ProxyPassReverse /Ecp https://10.100.12.81/Ecp

        # mapi
        ProxyPass /mapi https://10.100.12.81/mapi
        ProxyPassReverse /mapi https://10.100.12.81/mapi

        # ews -> Exchange Web Services
        ProxyPass /ews https://10.100.12.81/ews
        ProxyPassReverse /ews https://10.100.12.81/ews
        ProxyPass /EWS https://10.100.12.81/EWS
        ProxyPassReverse /EWS https://10.100.12.81/EWS
        ProxyPass /Ews https://10.100.12.81/Ews
        ProxyPassReverse /Ews https://10.100.12.81/Ews
        ProxyPass /exchange https://10.100.12.81/exchange
        ProxyPassReverse /exchange https://10.100.12.81/exchange
        ProxyPass /Exchange https://10.100.12.81/Exchange
        ProxyPassReverse /Exchange https://10.100.12.81/Exchange
        ProxyPass /exchweb https://10.100.12.81/exchweb
        ProxyPassReverse /exchweb https://10.100.12.81/exchweb
        ProxyPass /public https://10.100.12.81/public
        ProxyPassReverse /public https://10.100.12.81/public

        # oab (Offline Address Book)
        ProxyPass /oab https://10.100.12.81/oab
        ProxyPassReverse /oab https://10.100.12.81/oab
        ProxyPass /OAB https://10.100.12.81/OAB
        ProxyPassReverse /OAB https://10.100.12.81/OAB

        # RPC over http(s) / Outlook Anywhere
        OutlookAnywherePassthrough On
        ProxyPass /rpc https://10.100.12.81/rpc
        ProxyPassReverse /rpc https://10.100.12.81/rpc
        ProxyPass /Rpc https://10.100.12.81/Rpc
        ProxyPassReverse /Rpc https://10.100.12.81/Rpc

        # Microsoft-Server-ActiveSync
        ProxyPass /Microsoft-Server-ActiveSync https://10.100.12.81/Microsoft-Server-ActiveSync connectiontimeout=900
        ProxyPassReverse /Microsoft-Server-ActiveSync https://10.100.12.81/Microsoft-Server-ActiveSync

        # Problem mit dem Versenden von Dateianhängen > 128KByte per ActiceSync umgehen (neuer Wert 30MByte)
        <Directory /Microsoft-Server-ActiveSync>
                SSLRenegBufferSize 31457280
        </Directory>

        # AutoDiscover  -> Autodiscover for non-AD integrated Clients (Mac, eg.)
        ProxyPass /autodiscover https://10.100.12.81/autodiscover
        ProxyPassReverse /autodiscover https://10.100.12.81/autodiscover
        ProxyPass /Autodiscover https://10.100.12.81/Autodiscover
        ProxyPassReverse /Autodiscover https://10.100.12.81/Autodiscover
        ProxyPass /AutoDiscover https://10.100.12.81/AutoDiscover
        ProxyPassReverse /AutoDiscover https://10.100.12.81/AutoDiscover

        # Zeichensatz spezifieren fuer Umlaute
        AddDefaultCharset ISO-8859-1

        <Directory />
                Order deny,allow
                Deny from all
        </Directory>

        <Directory /var/www/mail.znil.org/web>
                DirectoryIndex index.php index.html
                 Options -Indexes +FollowSymLinks
                Order allow,deny
                Allow from all
        </Directory>

        <Proxy *>
                # 10.12.2020: Nachfolgende 2 Zeilen sind nicht mehr Notwendig
                # Tipp von Marco Maus, Fragen an marco.maus@mit-system.eu
                # SetEnv proxy-nokeepalive 1
                # SetEnv force-proxy-request-1.0 1
                Order deny,allow
                Allow from all
        </Proxy>

        # Nach extern ein Lets Encrypt Zertifikat nutzen:
        SSLEngine on
        SSLProtocol All -SSLv2 -SSLv3
        SSLHonorCipherOrder     on
        SSLCertificateFile /etc/letsencrypt/live/mail.znil.org/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mail.znil.org/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/mail.znil.org/chain.pem

        BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
        # MSIE 7 and newer should be able to use keepalive
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>



Der Port 80 Teil ist nicht viel mehr als eine http zu https Umleitung.
Ihr müsst alle folgenden Einträge mindestens anpassen

  • IP-Adresse 10.100.12.10 an eure IP-Adresse des Webservers
  • IP-Adresse 10.100.12.81 an eure IP-Adresse des Exchange-Server
  • mail.znil.org ändern zu eurem externen DNS-Namen
  • autodiscover.znil.org ändern zu eurem externen DNS-Namen.


Ausserdem müsst Ihr ein externes Zertifikat erstellen und angeben - das kann das vom Exchange-Server exportierte sein - oder aber ein anderes, selbst erstelltes.
Wie man das vom Exchange-Server verwendet steht im nächsten Abschnitt.

Vergesst nicht den Apache neu zu starten nach Änderungen in der Datei!

systemctl restart apache2.service




Basic Auth / Standardauthentifizierung für Exchange aktivieren

Diesen Abschnitt hier bräuchtet Ihr nur wenn Ihr in der Apache2 Konfiguration die Standard-Authentifizierung erzwingt. Dazu müsstet Ihr die 4 Zeilen die mit Kommentaren

# 10.12.2020: xxxxxxxxx
# Tipp von Marco Maus, Fragen an marco.maus@mit-system.eu

gekennzeichnet sind wieder aktivieren. Stand heute ist es nicht mehr notwendig!

Hier klicken (Toggle) um die Aktivierung der Standard-Authentifizierung trotzdem zu sehen

Damit auch das Programm Outlook funktioniert müsst Ihr für Outlook Anywhere die Standardauthentifizierung aktivieren:

ClipCapIt-190508-133613.PNG


Wenn Ihr bis hierhin gekommen seit läuft schon mal vieles scheinbar schön schnucklig.
Das Autodiscover funktioniert - sofern es die Subdomain "autodiscover.euredomain.suffix" gibt und ihr diese brav als Alias mit in der Apache-Konfig Datei habt.

Wenn Ihr wie ich Outlook Anywhere nutzt wird euch aber nach einer Weile auffallen das der Abwesenheitsassistent z.B. nicht funktioniert.
Und bei jeder neuen Email steht oben eine Hinweis:

Exchange-Apache-Reverse-Proxy-004.png


Nach einigen Stunden(!) Tests - in denen ich mich langsam an das Problem herangetastet habe - fand ich endlich den Grund des Übels:
Die Verbindung dafür geht über

https://externe-adresse-exchange/ews

und an dieser Stelle scheitert die Authentifizierung - weil hier nur NTLM zugelassen ist.
NTLM geht aber durch den Apache nicht sauber durch.
Deshalb gibt es in der Konfig oben die Zeilen:

Header unset WWW-Authenticate
Header add WWW-Authenticate "Basic realm=mail.znil.org"

Welche auf die Basic Auth umschalten - dadurch funktioniert dann nämlich Autodiscover.
Nun akptzeptiert aber der /ews Pfad Basic Auth bzw. Standardauthentifizierung nicht.

Das müssen wir auf dem Exchange-Server ändern das er dies auch dafür zulässt:

Öffnet auf dem Exchange-Server den

Internetinformationsdienste (IIS)-Manager

den Ihr in der Verwaltung findet.
Navigiert euch durch bis Ihr links EWS markiert habt und klickt dann rechts auf Authentifizierung:

Exchange-Apache-Reverse-Proxy-001.png


Markiert in der neuen Auswahl den Eintrag Standardauthentifizierung und dann oben rechts auf Aktivieren:

Exchange-Apache-Reverse-Proxy-002.png


Exchange-Apache-Reverse-Proxy-003.png



Und schon klappt es auch mit dem Abwesenheitsassistenten etc. und es gibt keine Warnungen mehr beim Email-Schreiben.

Bleibt noch das Offline Address Buch, hier gibt es das gleiche Problem, also noch mal das gleiche:

Exchange-Apache-Reverse-Proxy-011.png


Exchange-Apache-Reverse-Proxy-012.png




Ergebnisse des "Microsoft Remote Connectivity Analyzer"

Findet Ihr unter: https://testconnectivity.microsoft.com/

Ergebnisse gemäß den vorstehenden Konfigurationsschritte bei mir: (Bilder anklicken zum vergrößern)

Exchange-Webdienste: Synchronisierung, Benachrichtigung, Verfügbarkeit und automatische Antworten:

Exchange-Apache-Reverse-Proxy-005.png


Exchange ActiveSync-AutoErmittlung:

Exchange-Apache-Reverse-Proxy-006.png


Exchange ActiveSync:

Exchange-Apache-Reverse-Proxy-007.png




Kommentare

Loading comments...