In dieser Apache-2.4 Konfiguration wird SSLv3, SSLv2, TLSv1.0 und TLSv1.1 deaktiviert. SSLv2 wird in Apache 2.4 nicht mehr unterstützt und muss daher nicht explizit ausgenommen werden. Der Parameter SSLHonorCipherOrder on stellt sicher, dass Clients die vom Server präferierte Cipher Suite Liste benutzen, und nicht umgekehrt. Die SSLCipherSuite Konfiguration unterstützt PFS, und deaktiviert unsichere Cipher Suites. Wird 3DES nicht mit aufgeführt, werden ältere Clients wie Windows XP nicht mehr unterstützt.
Apache 2.4 Modern Config
<VirtualHost *:443>
...
SSLEngine on
SSLCertificateFile /path/to/signed_certificate_followed_by_intermediate_certs
SSLCertificateKeyFile /path/to/private/key
# Uncomment the following directive when using client certificate authentication
#SSLCACertificateFile /path/to/ca_certs_for_client_authentication
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"
...
</VirtualHost>
# modern configuration, tweak to your needs
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
Damit die Zertifikatskette sauber konfiguriert ist, muss das Intermediate Zertifikat mit eingebunden werden. Dies gestaltet sich je nach Apache Version unterschiedlich.
Bei der Ausstellung von Zertifikaten kann es Probleme mit dem mod_rewrite geben. Typische Anwendungen wo momentan diese Probleme auftreten sind Typo3, Wordpress oder z.B. Owncloud. Um das Rewriting des acme-challenge Pfades zu unterbinden, kann folgende Rewrite Condition in die Webserverkonfiguration oder .htaccess eingebunden werden.
RewriteRule ^\.well-known/acme-challenge - [L]
Hier ein Beispiel in der .htaccess einer Owncloud Konfiguration.
Werden Webbereiche mit einer Certification Authority abgesichert und Clients verifiziert, dann kann es zu Zugriffsproblemen mit Letsencrypt kommen. Damit Zertifikate erstellt oder erneuert werden können, muss der Pfad /.well-known/acme-challenge aufrufbar sein können. Da der Webbereich nur für Clients mit verifizierten Zertifikaten aufrufbar ist, können diese Anfragen fehlschlagen. Mittels mod_rewrite kann man den Pfad z.B. per unverschlüsselter HTTP Anfrage verfügbar machen. Hier ein Beispiel.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*$
RewriteRule ^ https://%{HTTP_HOST}/%{REQUEST_URI} [L,QSA,R=permanent]
</IfModule>
Es gibt verschiedene Szenarien in denen ein Reverse Proxy notwendig ist. Diese
Beispielkonfiguration ist Teil einer Umstellung auf eine Mobile Device Management Lösung
die zukünftig nur noch Clients akzeptiert die den Firmenrichtlinien ensprechen. Die Vorlage für diese
Konfiguration stammt aus dem ZNIL WIKI. Wir haben verschiedene Reverse Proxy Konfigurationen getestet, aber nur diese funktionierte problemlos. Unter anderem haben
wir mit Nginx, Pound Proxy und Squid Proxy getestet.
In aktuellen Distributionen existiert mittlerweile das Apache Modul libapache2-mod-proxy-msrpc. Das Modul
ermöglicht RPCoverHTTPS. Unter Debian Jessie lässt sich das Modul mit folgendem Befehl installieren.
Microsoft Clients die Autodiscover nutzen um die passenden Exchange Einstellungen zu finden, führen folgende DNS Abfragen durch.
Dies ist notwendig falls Outlook keinen DC für die Abfrage des SCP findet.
Client sucht nach https://siegnetz.de/autodiscover/autodiscover.xml
Client sucht nach https://autodiscover.siegnetz.de/autodiscover/autodiscover.xml
Client sucht DNS Eintrag _autodiscover._tcp.siegnetz.de → IN SRV 0 0 443 exchange.siegnetz.de
Client Client sucht nach DNS SRV FQDN Dienst z.B. exchange.siegnetz.de
Outlook fordert Bestätigung für Link https://exchange.siegnetz.de/autodiscover/autodiscover.xml
Outlook lädt XML Datei von https://exchange.siegnetz.de/autodiscover/autodiscover.xml
In dem entsprechenden Zonen File sollten folgende DNS Records definiert werden:
autodiscover IN A <external-ip>
_autodiscover._tcp IN SRV 0 0 443 <external-hostname>
Apache Reverse Proxy Konfiguration
Note: Für den /ews Pfad muss im IIS des Exchange noch die Standardauthentifizierung aktiviert werden. Dadurch funktioniert dann auch das Autodiscovery und auch der Abwesenheitsassistent.
In dieser Beispielkonfiguration ist der Apache Reverse Proxy unter der IPv4 Adresse 10.1.1.1 und
der Exchange Server unter der IPv4 Adresse 10.2.2.2 erreichbar.
<VirtualHost 10.1.1.1:80>
ServerName exchange.siegnetz.de
ServerAlias autodiscover.siegnetz.de
ServerAdmin postmaster@siegnetz.de
ErrorLog /var/log/apache2/reverse-proxy-error.log
CustomLog /var/log/apache2/reverse-proxy-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
# Nachfolgende Zeile löst den "Expectation Failed Apache 417" Fehler beim AutoDiscover etc.
RequestHeader unset Expect early
# Nachfolgende Zeilen sind um die Authentifizierung zu ermöglichen - NTLM-Funktioniert durch den Proxy nicht, deshalb Basis-Authentifizierung erzwingen
SetEnvIf User-Agent ".*MSIE.*" value BrowserMSIE
Header unset WWW-Authenticate
Header add WWW-Authenticate "Basic realm=exchange.siegnetz.de"
ProxyRequests Off
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/owa(.*) https://exchange.siegnetz.de/owa$1 [R,L]
RewriteRule ^/ecp(.*) https://exchange.siegnetz.de/ecp$1 [R,L]
RewriteRule ^/Microsoft-Server-ActiveSync(.*) https://exchange.siegnetz.de/Microsoft-Server-ActiveSync$1 [R,L]
# Kann z.B für die Ablage von Root-CA's verwendet werden
DocumentRoot /var/www/exchange.siegnetz.de/web
<Directory />
Order deny,allow
Deny from all
</Directory>
<Directory /var/www/exchange.siegnetz.de/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.1.1.1:443>
ServerName exchange.siegnetz.de
ServerAlias autodiscover.siegnetz.de
ServerAdmin postmaster@siegnetz.de
ErrorLog /var/log/apache2/reverse-proxy-error.log
CustomLog /var/log/apache2/reverse-proxy-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
#SetEnvIf User-Agent ".*MSIE.*" value BrowserMSIE
Header unset WWW-Authenticate
Header add WWW-Authenticate "Basic realm=exchange.siegnetz.de"
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine On
# Diese Parameter wurden im Lab gesetzt, da wir kein valides Zertifikat eingesetzt haben.
# In einer produktiven Umgebung sollten die Paramater auskommentiert werden.
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
# owa
ProxyPass /owa https://10.2.2.2/owa
ProxyPassReverse /owa https://10.2.2.2/owa
ProxyPass /OWA https://10.2.2.2/OWA
ProxyPassReverse /OWA https://10.2.2.2/OWA
ProxyPass /Owa https://10.2.2.2/Owa
ProxyPassReverse /Owa https://10.2.2.2/Owa
# Einstellungen um per OWA das Kennwort zu aendern
ProxyPass /iisadmpwd https://10.2.2.2/iisadmpwd
ProxyPassReverse /iisadmpwd https://10.2.2.2/iisadmpwd
# ecp
ProxyPass /ecp https://10.2.2.2/ecp
ProxyPassReverse /ecp https://10.2.2.2/ecp
ProxyPass /ECP https://10.2.2.2/ECP
ProxyPassReverse /ECP https://10.2.2.2/ECP
ProxyPass /Ecp https://10.2.2.2/Ecp
ProxyPassReverse /Ecp https://10.2.2.2/Ecp
# ews -> Exchange Web Services
ProxyPass /ews https://10.2.2.2/ews
ProxyPassReverse /ews https://10.2.2.2/ews
ProxyPass /EWS https://10.2.2.2/EWS
ProxyPassReverse /EWS https://10.2.2.2/EWS
ProxyPass /Ews https://10.2.2.2/Ews
ProxyPassReverse /Ews https://10.2.2.2/Ews
ProxyPass /exchange https://10.2.2.2/exchange
ProxyPassReverse /exchange https://10.2.2.2/exchange
ProxyPass /Exchange https://10.2.2.2/Exchange
ProxyPassReverse /Exchange https://10.2.2.2/Exchange
ProxyPass /exchweb https://10.2.2.2/exchweb
ProxyPassReverse /exchweb https://10.2.2.2/exchweb
ProxyPass /public https://10.2.2.2/public
ProxyPassReverse /public https://10.2.2.2/public
# Microsoft-Server-ActiveSync
ProxyPass /Microsoft-Server-ActiveSync https://10.2.2.2/Microsoft-Server-ActiveSync connectiontimeout=600
ProxyPassReverse /Microsoft-Server-ActiveSync https://10.2.2.2/Microsoft-Server-ActiveSync
# AutoDiscover -> Autodiscover for non-AD integrated Clients (Mac, eg.)
ProxyPass /autodiscover https://10.2.2.2/autodiscover
ProxyPassReverse /autodiscover https://10.2.2.2/autodiscover
ProxyPass /Autodiscover https://10.2.2.2/Autodiscover
ProxyPassReverse /Autodiscover https://10.2.2.2/Autodiscover
ProxyPass /AutoDiscover https://10.2.2.2/AutoDiscover
ProxyPassReverse /AutoDiscover https://10.2.2.2/AutoDiscover
# RPC over http(s) / Outlook Anywhere
OutlookAnywherePassthrough On
ProxyPass /rpc https://10.2.2.2/rpc
ProxyPassReverse /rpc https://10.2.2.2/rpc
# Zeichensatz spezifieren fuer Umlaute
AddDefaultCharset ISO-8859-1
# Kann z.B für Ablage von Root-CA's genutzt werden
DocumentRoot /var/www/exchange.siegnetz.de/web
<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/exchange-cert.cert
SSLCertificateKeyFile /etc/ssl/exchange-cert.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>