Konfigurace reverzní proxy Apache httpd pro Outlook Anywhere (RPC over HTTP)

V Microsoft Exchange 2013 se prvně objevila funkce Outlok Anywhere (tehdy zvaná „RPC over HTTP“), která umožňovala Outloku 2007 a novějším připojovat se k Exchange serveru i z veřejného internetu pomocí HTTP. Protože samotná Exchange, zvláště v poslední době, trpí různými bezpečnostními chybami a zranitelnostmi (např. zde Daniel Nashed’s Blog (nashcom.de), je žádoucí ji skrýt např. za reverzní proxy s WAF (web application firewallem). Podobné řešení jsem popisoval zde.

Zadáním bylo, aby z veřejného internetu byly přístupné služby:

  • Outlook Web Access (OWA) – webové rozhraní pošty
  • ActiveSync – přístup mobilních zařízení
  • Outlok Anywhere – přístup pro „velký“ Outlook
<VirtualHost *:443>
    ServerName mail.vurv.cz
    ServerAlias firma.cz
    ServerAlias autodiscover.firma.cz
    ProxyRequests Off
    ProxyPreserveHost Off
    RewriteEngine On
    SSLEngine On
    SSLProxyEngine On
    RequestHeader set Front-End-Https On
    RequestHeader unset Origin
    
   # 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
    KeepAlive On
   Header unset WWW-Authenticate
   Header add WWW-Authenticate "Basic realm=mail.firma.cz"
# Copied from 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
# copied the end

    Redirect / /owa/

# owa
    ProxyPass /owa https://mail.firma.cz/owa KeepAlive=on
    ProxyPassReverse /owa https://mail.firma.cz/owa
    ProxyPass /OWA https://mail.firma.cz/OWA  KeepAlive=on
    ProxyPassReverse /OWA https://mail.firma.cz/OWA
    ProxyPass /Owa https://mail.firma.cz/Owa  KeepAlive=on
    ProxyPassReverse /Owa https://mail.firma.cz/Owa

# ews -> Exchange Web Services
    ProxyPass /ews https://mail.firma.cz/ews KeepAlive=on
    ProxyPassReverse /ews https://mail.firma.cz/ews 
    ProxyPass /EWS https://mail.firma.cz/EWS KeepAlive=on
    ProxyPassReverse /EWS https://mail.firma.cz/EWS
    ProxyPass /Ews https://mail.firma.cz/Ews KeepAlive=on
    ProxyPassReverse /Ews https://mail.firma.cz/Ews
    ProxyPass /exchange https://mail.firma.cz/exchange KeepAlive=on
    ProxyPassReverse /exchange https://mail.firma.cz/exchange
    ProxyPass /Exchange https://mail.firma.cz/Exchange KeepAlive=on
    ProxyPassReverse /Exchange https://mail.firma.cz/Exchange
    ProxyPass /exchweb https://mail.firma.cz/exchweb KeepAlive=on
    ProxyPassReverse /exchweb https://mail.firma.cz/exchweb
    ProxyPass /public https://mail.firma.cz/public KeepAlive=on
    ProxyPassReverse /public https://mail.firma.cz/public

# oab (Offline Address Book)
    ProxyPass /oab https://mail.firma.cz/oab KeepAlive=on
    ProxyPassReverse /oab https://mail.firma.cz/oab
    ProxyPass /OAB https://mail.firma.cz/OAB KeepAlive=on
    ProxyPassReverse /OAB https://mail.firma.cz/OAB

# mapi
    ProxyPass /mapi https://mail.firma.cz/mapi KeepAlive=on
    ProxyPassReverse /mapi https://mail.firma.cz/mapi

# RPC over http(s) / Outlook Anywhere
#    OutlookAnywhere Passthrough On
    ProxyPass /rpc https://mail.firma.cz/rpc KeepAlive=on
    ProxyPassReverse /rpc https://mail.firma.cz/rpc
    ProxyPass /Rpc https://10.0.7.45/Rpc KeepAlive=on
    ProxyPassReverse /Rpc https://mail.firma.cz/Rpc

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

# Microsoft-Server-ActiveSync
    ProxyPass /Microsoft-Server-ActiveSync https://mail.firma.cz/Microsoft-Server-ActiveSync connectiontimeout=900 KeepAlive=on
    ProxyPassReverse /Microsoft-Server-ActiveSync https://mail.firma.cz/Microsoft-Server-ActiveSync

    Header unset WWW-Authenticate
    Header add WWW-Authenticate "Basic realm=mail.firma.cz"

    ErrorLog /var/log/httpd/mail.firma.cz_443_error_log
    TransferLog /var/log/httpd/mail.firma.cz_443_access_log

    SSLCertificateFile /etc/letsencrypt/live/mail.firma.cz/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/mail.firma.cz/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mail.firma.cz/privkey.pem

    RequestHeader set X-Forwarded-Proto https
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerExpire off
    SSLProxyCheckPeerName off

# Problem with sending file attachments > Bypass 128KByte via ActiceSync (new value 30MByte)
   <Directory /Microsoft-Server-ActiveSync>
      SSLRenegBufferSize 31457280
   </Directory>

    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>


Výsledná konfigurace vznikla po mnoha pokusech, základem byly tyto články z internetu:

Apache2 als Reverse Proxy für Exchange 2010 2013 2016 2019 inklusive Outlook Anywhere RPC over http – znilwiki (znil-net.translate.goog)

GitHub – phr0gz/Apache-reverse-proxy-for-Exchange-2010-2013-2016: Reverse proxy for Exchange 2010 2013 2016 (github-com.translate.goog)

Na straně Exchange 2016 bylo nutno nad adresáři služeb Exchange přidat a povolit „Basic authentication“.

Pro řešení také pomohl tento vynikající článek – Exchange Server 2016 Client Access – přístup klientů.