Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Da der letzte Artikel zur Sophos UTM Webserver Protection und Exchange nun schon ein paar Tage her ist, hab ich mich entschlossen das Howto zu aktualisieren. Der letzte Artikel bezog sich noch auf die UTM 9.4 und ist jetzt schon knapp 3 Jahre alt. Daher gibt es jetzt einen neuen Artikel mit der UTM in der aktuellen Version 9.6 in Verbindung mit Exchange 2016. Auch das Let’s Encrypt Zertifikat wird benutzt, welches bequem via UTM angefordert und auch erneuert werden kann.

Die im folgenden beschriebenen Einstellungen laufen in meiner Umgebung nun schon lange absolut problemlos. Aktuell werden in meiner Umgebung auch alle internen Verbindung durch die UTM Webserver Protection geroutet, aus dem internen LAN ist der Exchange Server nicht mehr erreichbar.

In diesem Artikel geht es allerdings darum Exchange via Webserver Protection im Internet zu veröffentlichen.

Umgebung (UTM und Exchange)

Die Umgebung ist nahezu unverändert zum oben verlinkten Artikel, hier ein kleiner Überblick:

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Exchange Server 2016 CU12 und Sophos UTM 9.601-5 sind die eingesetzten Versionen. Die Exchange URLs lauten intern, sowie extern auf mail.frankysweb.de und es wird Split-Brain DNS eingesetzt.

Let’s Encrypt Zertifikat für die UTM

Das Let’s Encrypt Zertifikat lässt sich über die Zertifikatsverwaltung anfordern.

Da ich für alle Webservices den DNS-Namen mail.frankysweb.de und für Autodiscover den DNS-Namen autodiscover.frankysweb.de verwende, muss ich nur diese Domänen für das Zertifikat konfigurieren:

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Hier lassen sich natürlich noch weitere Domänen für andere Dienste konfigurieren.

Hinweis: Die UTM unterstützt kein ACMEv2 und kann daher keine Wildcard Zertifikate anfordern. Die konfigurierten Domänen müssen extern auflösbar sein, interne Domänen (.local / .intern) lassen sich nicht verwenden.

Real Server

Bei den Real Servern (Echte Webserver) kann man wenig falsch machen. Hier wird nur der interne Exchange Server angegeben. Dies kann entweder per IP, oder DNS Namen erfolgen.

Hier einmal meine Einstellungen:

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Bei der Angabe des Exchange Servers mittels DNS-Name, muss die UTM natürlich den Namen des Exchange Servers auflösen können.

Die Angabe von mehreren Exchange Servern ist hier übrigens immer noch nicht möglich, wer also mehr als einen Exchange Server betreibt, kann hier die VIP des internen Loadbalancers angeben.

Firewall Profile

Ich habe zwei Firewall Profile für den Exchange Server erstellt, eins für Autodiscover und eins für die restlichen Webservices. Hier zunächst einmal die Einstellungen für das Autodiscover Firewall Profil (2 Screenshots):

Einstiegs-URLs:

/autodiscover
/Autodiscover

Filterregeln übergehen:

960015
960911

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Hier das zweite Firewall Profil für die restlichen Exchange Webservices (2 Screenshots):

Einstiegs-URLs:

/ecp
/ECP
/ews
/EWS
/Microsoft-Server-ActiveSync
/oab
/OAB
owa
/OWA
/
/mapi
/MAPI
/api
/API

Filterregeln übergehen:

960010
960015
981204
981176

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Bitte darauf achten, dass die restlichen Checkboxen entsprechend gesetzt sind.

Virtual Server

Nachdem die Firewall Profile erstellt wurden, können die virtuellen Webserver angelegt werden. Auch hier gibt es zwei virtuelle Webserver, einen für Autodiscover und einen für den Rest. Hier zunächst der virtuelle Webserver für Autodiscover:

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Hier der zweite Webserver für die restlichen Exchange Webservices:

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Hinweis: Als Zertifikat wird hier für beide virtuellen Webserver das zuvor erstelle Let’s Encrypt Zertifikat ausgewählt.

Ausnahmen

Damit alle Exchange Features sauber funktionieren, sind noch ein paar Ausnahmen nötig. Ich habe dazu wieder 2 Listen mit Ausnahmen erstellt.

Die erste Ausnahme gilt sowohl für die Exchange Webservices als auch für Exchange Autodiscover:

Pfade:

/ecp/*
/ECP/*
/ews/*
/EWS/*
/Microsoft-Server-ActiveSync*
/oab/*
/OAB/*
/owa/*
/OWA/*
/api/*
/API/*
/MAPI/*
/mapi/*
/autodiscover/*
/Autodiscover/*

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Die zweite Ausnahme ist nur für die Exchange Webservices nötig:

Pfade:

/owa/ev.owa*
/OWA/ev.owa*

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Dies waren alle notwendigen Einstellungen.

Optional aber empfohlene Einstellungen

Auf der Registerkarte “Erweitert” sollte noch die TLS-Version auf TLS 1.2 gestellt werden:

Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019

Falls noch Windows 7 verwendet wird, muss in diesem Fall TLS 1.2 auf dem Clients aktiviert werden. Siehe dazu hier:

Es gibt noch weitere Einstellungen um das SSL Labs Rating zu verbessern, wer mag kann hier also nur noch starke Cipher verwenden und HSTS aktivieren:

Hinweis

Dieses HowTo enthält keine Konfiguration mehr für RPCoverHTTP. Da selbst Outlook 2010 mit entsprechenden Updates das neue Protokoll MAPIoverHTTP unterstützt, ist das alte Protokoll RPCoverHTTP auch nicht mehr erforderlich.

16 Kommentare zu “Sophos UTM 9.6: Let’s Encrypt, Webserver Protection und Exchange 2016/2019”

  1. …bei mehr als einem Exchange Server, also eine DAG Verbund, kann man statt des Loadbalancers der UTM auch die DAG IP-Adresse des DAG Computerkontos nutzen.

    1. Hallo Sebastian,
      der Loadbalancer der UTM funktioniert hier nicht. In einer Umgebung mit DAG kommt aber ohnehin meist ein interner Loadbalancer zum Einsatz. Dieser lässt sich dann auf in der WAF nutzen. Eine Exchange DAG hat mit Exchange 2016 eigentlich keine IP mehr (IP-less DAG). Daher hier bitte auch nicht die IP der DAG verwenden (wenn vorhanden). Die IP der DAG ist nicht als Client Zugriffs IP gedacht.
      Gruß,
      Frank

  2. Hallo,

    super Doku und prima, das Du es in Zusammenhang mit LetEncrypt überarbeitet hast.
    Habe bereits meine WAF mit E2016 kombiniert und dazu die Anleitung
    https://www.frankysweb.de/sophos-utm-9-4-waf-und-exchange-2016-ohne-rpcoverhttp/
    genutzt. Alles funktioniert soweit prima, jedoch kann ich im Firefox Mails nicht in einem Extra Fenster öffnen, oder eine Mail in einem neuen Fenster erstellen. Die URL springt auf https:///owa/projection.aspx , die Seite ist jedoch leer.
    Im Internet Explorer funktioniert dies jedoch.

    Hat jemand dazu eine Lösung?

    Erik

  3. Was für Zertifikate kommen denn in den IIS auf dem Exchange Server?
    Ich muss da immer alle drei Monate manuell die Zertifikate (via PowerShell) installieren – das nervt

    1. Ich habe im IIS Zertifikate der internen CA. Die Root Zertifikate der CA werden per GPO verteilt, bzw. im Handy installiert.
      Somit funktioniert der interne, direkte Zugriff. Die Laufzeit ist 2 Jahre.
      Extern geht der Weg über die Sophos, mit LetsEncrypt Zertifikaten.

  4. Hey Frank,
    ich habe seit Gestern beim Ersetzen der Zertifikate über Deine Methode (bzw. über Let’s Encrypt via UTM) folgendes Problem:
    Outlook-WebApp im IE – Verschlüsselt (Zertifikat i.O.)
    Outlook-ECP im IE und Chrome – Verschlüsselt (Zertifikat i.O.)
    Outlook-WebApp im Chrome – Login Verschlüsselt (Zertifikat i.O.), Rest nicht, aber trotzdem HTTPS, nur ohne Zertifikat…
    Outlook-FAT-Client – Keine Verbindung, da das Zertifikat angeblich den Namen des Servers nicht enthält.
    Manueller Aufruf der Domain.com/MAPI – Verschlüsselt (Zertifikat i.O.)
    Ich habe bereits das Zertifikat aus der UTM im Exchange (neu) über das ECP hinterlegt und manuell über die PowerShell. Beides hat keine Veränderung gebracht.
    Der Verbindungsprüfer von Microsoft (dieses Online-Ding dessen Name mir gerade entfallen ist) meldet keinen einzigen Fehler.
    Das Phänomen tritt auf allen Clients (Win 7 und Win 10) auf, außer auf meinem Android-Handy…
    Hast Du eine Idee, was das sein könnte?
    Vielen Dank Dir vorab und viele Grüße,
    Justin

  5. Hallo Frank,
    wie immer super Blog.

    Ich habe alles nach deiner Anleitung eingerichtet. Soweit funktioniert alles bis auf eins.
    Wir haben öffentliche Ordner und SharedMailboxen im Einsatz.
    Es kommt immer die Aufforderung das Kennwort einzugeben. Ich bin jetzt schon so weit das er dies beim Zugriff auf die öffentlichen Ordner abfragt. Das Postfach und die SharedMailboxen funktionieren. OWA und alle anderen Services auch.
    Ist diesbezüglich was bekannt?

    Vielen Dank

  6. Danke für das Update! Selbst der Sophos Support verweist oft als Referenz auf deine Artikel!
    Werde mal unser 2016er DAG/Kemp LM/SG Cluster Setup durchgehen und auf relevante Unterschiede zu deinem neuen Guide untersuchen.

    Wir haben bisher nur mit Outlook 2016 Clients auf Apple Mac / Macbooks Probleme, wenn die von extern zugreifen. Das klappt grundsätzlich, aber es kommt permanent zu Verbindungsabbrüchen und der Support weiß da auch nicht weiter. Die verweisen dann immer gerne darauf, dass Exchange 2016 nicht offiziell zu 100% supportet ist *Hüstel*

  7. Hab die WAF Profile und Exceptions gemäß deiner Screenshots angepasst. Gut ist schon Mal: es läuft noch :-)
    Bei den Security Warnings sehe ich jetzt allerdings mehr Einträge als vorher im Log.
    Vor der Umstellung hatte ich nur einen wiederkehrenden Fehler im Log:
    900000 im Bezug auf /mapi/emsmdb/

    Jetzt habe ich
    960009 im Bezug auf /EWS/Exchange.asmx
    958291 im Bezug auf /OAB/…/oab.xml
    958291 im Bezug auf /owa/prem/15.1.1591.12/resources/sounds/email_notify.mp3
    981203 im Bezug auf /OAB/…/oab.xml
    981203 im Bezug auf /owa/prem/15.1.1591.12/resources/sounds/email_notify.mp3

    Ich weiß allerdings auch, dass man sich durch zu viele Exceptions die WAF-Dienste komplett zerschießen kann, obwohl sich mir der Grund dazu nicht erschließt. Ich lasse es jetzt mal so laufen und schaue, was die User melden, insbesondere die mit Outlook für Mac.

    Vorher:
    2019:04:17-11:26:56 mail-1 httpd[25611]: [security2:error] [pid 25611:tid 4078164848] [client 80.15.21.19] ModSecurity: Access allowed (phase 1). Operator GT matched 0 at ENV. [file „/usr/apache/conf/waf/base.conf“] [line „14“] [id „900000“] [hostname „mail.meinedomain.com“] [uri „/mapi/emsmdb/“] [unique_id „XLbxYMCobhEAAGQLRosAAABq“]

    Nacher:
    2019:04:17-11:35:10 mail-1 httpd[23071]: [security2:error] [pid 23071:tid 4036135792] [client 217.9.12.178] ModSecurity: Warning. Operator EQ matched 0 at REQUEST_HEADERS. [file „/usr/apache/conf/waf/modsecurity_crs_protocol_anomalies.conf“] [line „66“] [id „960009“] [rev „1“] [msg „Request Missing a User Agent Header“] [severity „NOTICE“] [ver „OWASP_CRS/2.2.7“] [maturity „9“] [accuracy „9“] [tag „OWASP_CRS/PROTOCOL_VIOLATION/MISSING_HEADER_UA“] [tag „WASCTC/WASC-21“] [tag „OWASP_TOP_10/A7“] [tag „PCI/6.5.10“] [hostname „mail.meinedomain.com“] [uri „/EWS/Exchange.asmx“]
    2019:04:17-11:40:55 mail-1 httpd[22045]: [security2:error] [pid 22045:tid 3725605744] [client 80.15.21.19] ModSecurity: Warning. String match „bytes=0-“ at REQUEST_HEADERS:Range. [file „/usr/apache/conf/waf/modsecurity_crs_protocol_violations.conf“] [line „427“] [id „958291“] [rev „2“] [msg „Range: field exists and begins with 0.“] [data „bytes=0-4721“] [severity „WARNING“] [ver „OWASP_CRS/2.2.7“] [maturity „6“] [accuracy „8“] [tag „OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ“] [hostname „mail.meinedomain.com“] [uri „/OAB/82cf7739-53f4-44dd-bb37-edec070e8a1a/oab.xml“] [unique_id „XLb0p8CobhEAAFYdLVEAAABj“]
    2019:04:17-11:40:55 mail-1 httpd[22045]: [security2:error] [pid 22045:tid 3725605744] [client 80.15.21.19] ModSecurity: Warning. Operator LT matched 5 at TX:inbound_anomaly_score. [file „/usr/apache/conf/waf/modsecurity_crs_correlation.conf“] [line „33“] [id „981203“] [msg „Inbound Anomaly Score (Total Inbound Score: 3, SQLi=, XSS=): Range: field exists and begins with 0.“] [hostname „mail.meinedomain.com“] [uri „/OAB/82cf7739-53f4-44dd-bb37-edec070e8a1a/oab.xml“] [unique_id „XLb0p8CobhEAAFYdLVEAAABj“]
    2019:04:17-11:41:48 mail-1 httpd[25445]: [security2:error] [pid 25445:tid 3868281712] [client 87.14.3.129] ModSecurity: Warning. String match „bytes=0-“ at REQUEST_HEADERS:Range. [file „/usr/apache/conf/waf/modsecurity_crs_protocol_violations.conf“] [line „427“] [id „958291“] [rev „2“] [msg „Range: field exists and begins with 0.“] [data „bytes=0-„] [severity „WARNING“] [ver „OWASP_CRS/2.2.7“] [maturity „6“] [accuracy „8“] [tag „OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ“] [hostname „mail.meinedomain.com“] [uri „/owa/prem/15.1.1591.12/resources/sounds/email_notify.mp3“] [unique_id „XLb03MCobhEAAGNlofQAAAIT“]
    2019:04:17-11:41:48 mail-1 httpd[25445]: [security2:error] [pid 25445:tid 3868281712] [client 87.14.3.129] ModSecurity: Warning. Operator LT matched 5 at TX:inbound_anomaly_score. [file „/usr/apache/conf/waf/modsecurity_crs_correlation.conf“] [line „33“] [id „981203“] [msg „Inbound Anomaly Score (Total Inbound Score: 3, SQLi=, XSS=): Range: field exists and begins with 0.“] [hostname „mail.meinedomain.com“] [uri „/owa/prem/15.1.1591.12/resources/sounds/email_notify.mp3“] [unique_id „XLb03MCobhEAAGNlofQAAAIT“]

  8. Hallo Frank,

    vielen Dank für die gute(n) Anleitungen …
    VIelleicht kannst du mir auch bei folgendem Problem helfen, ich sehe den Wald vor lauter Bäumen nicht mehr.

    – Exchange 2019 DAG mit 2x Postfachservern und 1x Zeugenserver
    – UTM 9.602 WAF nach dieser Anleitung gebaut ( URLs intern und extern gleich & Split-Brain DNS )
    – Outlook 2016 intern keine Probleme
    – gleiches Outlook 2016 extern durch die WAF bringt bei bereits intern eingerichtetem Konto Benutzername/Passwort Abfrage. Gebe ich das Passwort ein geht alles.
    – gleiches Outlook 2016 extern durch die WAF ohne konfiguriertes Konto kann „nichtmal“ autodiscover machen und das Konto einrichten ( ich sehe keinen Connect auf der WAF für autodiscover ).

    Ich habe auch schon den „Rat“ hier gefunden und kein Load Balancing oder so laufen sondern als Real Webserver einen der beiden Exchange Server eingetragen, keine Änderung.

    Besten Dank!

    Gruß

    Thomas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.