Neben dem NGINX kann natürlich auch der Apache2 für einen ReverseProxy für die Exchange-Dienste EAS (Exchange ActiveSync) und OWA (OutlookWebAccess) verwendet werden – und zusätzlich seit einiger Zeit auch (wieder) für OutlookAnywhere (RPCoverHTTP)! I
Folgende Konfiguration hat bei mir unter Ubuntu 14.04 einwandfrei funktioniert:
1) Apache2 installieren
apt-get install apache2 apache2-doc
2) Modul für OutlookAnywhere installieren
apt-get install libapache2-mod-proxy-msrpc
3) Module aktivieren
a2enmod headers
a2enmod rewrite
a2enmod proxy_http
a2enmod ssl
a2enmod proxy_msrpc
3) Zertifikat erstellen
Jetzt sollte das Zertifikat für die externe Domäne erzeugt werden. Als erstes erzeugen wir die Key-Datei:
openssl genrsa -out server.key 2048
Jetzt erstellen wir eine Zertifikatsanforderung:
openssl req -new -key server.key -out server.csr
Hier ein Beispiel:
Country Name (2 letter code) [AU]: DE
State or Province Name (full name) [Some-State]: Bayern
Locality Name (eg, city) []:Testhausen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Testfirma
Organizational Unit Name (eg, section) []:EDV
Common Name (eg, YOUR name) []:mobile.test.extern
Email Address []:edv@test.extern
Please enter the following ‚extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Wichtig ist der Common Name -> das ist die externe Domain – hier im Beispiel mobile.test.extern. Challenge Password und optional company name kann leer gelassen werden.
Falls man auch die Autodiscover-Adresse für OutlookAnywhere mit einem Zertifikat absichern will braucht ein SAN-Zertifikat: http://stefan.ploing.de/2014-01-22-san-zertifikat-mit-openssl/
Danach hat man zwei Dateien – die server.key und die server.csr. Jetzt muss nur die Anforderung in die CA eingereicht werden. Ich mache dies immer über die Webschnittstelle der Zertifizierungsstelle. Über http(s)://cert-server/certsrv kann man die csr eingeben und ein Webserver-Zertifikat erstellen. Wichtig hierbei ist das man die csr-Datei nicht in Windows öffnet. Ich empfehle über einen SSH-Client wie Putty auf dem Linux-Server:
cat server.csr
auszuführen und die Ausgabe dann zu kopieren. So stellt man sicher das die Formatierung richtig ist. Ansonsten kann es zu Zertifikatsfehlern kommen. Die Ausgabe sieht dann so aus:
—–BEGIN CERTIFICATE REQUEST—–
MIIBzzCCATgCAQAwgY4xCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xEzAR
BgNVBAcMClRlc3RoYXVzZW4xDTALBgNVBAoMBFRlc3QxDDAKBgNVBAsMA0VEVjEb
MBkGA1UEAwwSbW9iaWxlLnRlc3QuZXh0ZXJuMR8wHQYJKoZIhvcNAQkBFhB0ZXN0
QHRlc3QuZXh0ZXJuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn015lJMsY
N/KvYrV0wNjzZh+82wJY10xliBpg3p63JbUDA3bjL6bv5+Jcas2c0bgZwyNQl6oB
e/1y/fjDAaFXfpBLk/ZQyoJ/c2DFfOloZdoMEJN7veVzU+2m3I6306ADxx8y52MQ
+xD//0zPtasX2ZEdtghS4Arn+fsPQPS+UQIDAQABoAAwDQYJKoZIhvcNAQEFBQAD
gYEAyDDgPv1fTpweDk+N9JKEBgpdlONv2ZHJJ/upxXMW2aUMNXgLNR0IvNC6Q2/K
Bm1oGvtNyqiTDN0VqIfNvnzzSSlYZN85a3G0psHMdybc8TQ2N+RwIqz49+Rw3qrQ
W6c9kruyn17XFCgRC7rxgwIC/T1uWNOxyO28U00pNVJvgjc=
—–END CERTIFICATE REQUEST—–
Das so erstellt Webserver-Zertifikat (als BASE64/DER speichern) kopiert man dann auf den ReverseProxy – z.B. per SCP mit WinSCP. Am Besten ins HomeDirectory des Root-Users – denn dort liegen auch die beiden anderen Dateien (die key- und die csr-Datei).
Danach muss das Zertifikat konvertiert werden:
openssl x509 -inform PEM -in server.cer > server.pem
und kopiert werden:
cp server.pem /etc/ssl/certs/mobile.test.extern.pem
cp server.key /etc/ssl/private/mobile.test.extern.key
4) Apache2 konfigurieren
Wir erstellen jetzt die Exchange-Config-File
vim /etc/apache2/sites-available/exchange.conf
<VirtualHost *:80>
ServerName mobile.test.extern
ServerAlias autodiscover.test.extern
ServerAdmin webmaster@test.extern
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
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://mobile.test.extern/owa$1 [R,L]
RewriteRule ^/ecp(.*) https://mobile.test.extern/ecp$1 [R,L]
RewriteRule ^/Microsoft-Server-ActiveSync(.*) https://mobile.test.extern/Microsoft-Server-ActiveSync$1 [R,L]
DocumentRoot /var/www
<Directory />
Order deny,allow
Deny from all
</Directory>
<Directory /var/www>
DirectoryIndex index.php index.html
Options -Indexes +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
### SSL Host ###
<VirtualHost *:443>
ServerName mobile.test.extern
ServerAlias autodiscover.test.extern
ServerAdmin webmaster@test.extern
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
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
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
# owa
ProxyPass /owa https://10.10.10.1/owa
ProxyPassReverse /owa https://10.10.10.1/owa
# ecp
ProxyPass /ecp https://10.10.10.1/ecp
ProxyPassReverse /ecp https://10.10.10.1/ecp
# Microsoft-Server-ActiveSync
ProxyPass /Microsoft-Server-ActiveSync https://10.10.10.1/Microsoft-Server-ActiveSync
ProxyPassReverse /Microsoft-Server-ActiveSync https://10.10.10.1/Microsoft-Server-ActiveSync
# RPC over http(s) / Outlook Anywhere
OutlookAnywherePassthrough On
ProxyPass /rpc https://10.10.10.1/rpc
ProxyPassReverse /rpc https://10.10.10.1/rpc
DocumentRoot /var/www
<Directory />
Order deny,allow
Deny from all
</Directory>
<Directory /var/www>
DirectoryIndex index.php index.html
Options -Indexes +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
<Proxy *>
SetEnv proxy-nokeepalive 1
SetEnv force-proxy-request-1.0 1
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/mobile.test.extern.pem
SSLCertificateKeyFile /etc/ssl/private/mobile.test.extern.key
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>
Die IP 10.10.10.1 ist hier der lokale Exchange-Server.
Wer lieber mit Hostname arbeitet muss man unter Umständen den lokale Exchange Server noch in die hosts-Datei eingetragen werden, damit die Namensauflösung funktioniert.
vi /etc/hosts
und dort die Zeile für die IP-Adresse des lokalen Exchange ergänzen:
10.10.10.1 exch2013.test.local
zum Testen kann man einen Ping auf dem Fully-Qualified Domain Name (FQDN) des Exchange absetzten:
ping exch2013.test.local
Jetzt muss nur noch die Konfigurationsdatei „scharf“ geschaltet werden.
Dazu löschen wir die Default-Konfiguration
rm /etc/apache2/sites-enabled/000-default.conf
und linken unsere Exchange-Konfiguration in den sites-enabled-Ordner
ln -s /etc/apache2/sites-enablede/exchange.confg /etc/apache2/sites-enabled/exchange.conf
Jetzt muss nur noch der Apache2-Dienst neugestartet zu werden:
service apache2 restart
fertig 🙂
5) Testen
Unter https://www.testexchangeconnectivity.com kann man die ActiveSync-Funktion testen.
Quellen: www.sturbi.de, znil.net