Exchange 2010 Support bis 13.10.2020 verlängert

Microsoft hat den Exchange 2010 Support bis zum 13. Oktober nächsten Jahres verlängert.

Wie so häufig in der montagmorgen Lektüre am Dienstag finden sich interessante News in den RSS Feeds. Heute meldete sich der Exchange Team Blog und gibt bekannt, dass das Ende vom Extended Support von Exchange Server 2010 vom 14. Januar 2020 auf den 13. Oktober 2020 verschoben wird: https://techcommunity.microsoft.com/t5/Exchange-Team-Blog/Microsoft-Extending-End-of-Support-for-Exchange-Server-2010-to/ba-p/753591

Migration von Exchange 2010 zu 2016

Das Ende von Exchange 2010 steht „kurz“ bevor, daher hier noch einmal ein kleines How-To für die Migration von Exchange 2010 zu Exchange 2016.

Wie hier bereits erwähnt, werden mit dem Exchange 2010 SP3 RollUp 22 (endlich) Windows Server 2016 Domain Controller in der Active Directory Gesamtstruktur (Forest) unterstützt. Daher ist es jetzt möglich, die alten DCs und Exchange Server in „einem Schritt“ abzulösen. Das ist insbesondere bei Small Business Servern 2011 sehr hilfreich. 🙂 Somit steht einer Migration von Exchange auf SBS 2011 zu Exchange 2016 auf Server 2016 nichts mehr im Weg.

Die Systemanforderungen hat jedermann / jedefrau natürlich gelesen / überflogen. Die Installation der Vorbereitungen sowie des eigentlichen Exchange Servers 2016 (mit dem aktuellesten CU!) setze ich hier an dieser Stelle einmal ganz dreist voraus, so dass direkt mit den Vorbereitungen des Updates der Exchange Organisation losgelegt werden kann. Dazu sollte als erstes am Exchange 2010, sofern noch möglich, eine weitere Mailboxdatenbank mit einem Proxy-Postfach für die öffentlichen Ordner angelegt werden.

$Ex2010 = Get-ExchangeServer | ? AdminDisplayVersion -like "Version 14.3*"
$Ex2016 = Get-ExchangeServer | ? AdminDisplayVersion -like "Version 15.1*"

New-MailboxDatabase -Server $Ex2010  -Name PFProxyDatabase -IsExcludedFromProvisioning $true
Set-MailboxDatabase PFProxyDatabase -CircularLoggingEnabled $true
Mount-Database PFProxyDatabase

# Hier könnte man mit Invoke-Command die Mailbox vom Exchange 2016 auf dem 2010 erstellen, oder einfach und schnell die EMC auf dem Exchange 2010 öffnen und die Befehle dort ausführen. ;)
New-Mailbox -Name PFProxyMailbox1 -Database PFProxyDatabase -UserPrincipalName PFProxyMailbox1@[Domain].[tld] -Password $(ConvertTo-SecureString G3he!mesPW -AsPlainText -Force)
Set-Mailbox -Identity PFProxyMailbox1 -HiddenFromAddressListsEnabled $true
Vorbereitung Exchange 2010 PFProxyMailbox
Vorbereitung Exchange 2010 PFProxyMailbox

Sollte es auf dem Exchange Server 2010 (Standard) bereits 5 Datenbanken (z.B. 4x Postfachdatenbank / 1x öffentliche Ordner Datenbank) geben, bleibt nicht viel anderes übrig, wie die PFProxyMailbox1 in einer bestehenden Datenbank zu erzeugen. Wer möchte, der darf natürlich eine Datenbank leer räumen, diese löschen und dann die PFProxyDatabase samt PFProxyMailbox1 erstellen.

Weiter geht die wilde Migration von Exchange am neuen Server, wo die eben erstellte öffentliche Ordner Proxy-Mailbox (PFProxyMailbox1) zum Einsatz kommt und später die Zugriffe auf den legacy Exchange Server ermöglicht bis die öffentlichen Ordner komplett in die neue modern Public Folder übertragen wurden. Da es bei vielen Migrationen immer mal wieder zu Problemen mit MAPI over HTTP gekommen ist, bin ich dazu übergegangen und habe es für die Dauer der Migration deaktiviert. Nach erfolgreicher Deinstallation des legacy Servers aktiviere ich es dann wieder.

Set-OrganizationConfig -MapiHttpEnabled $false
Set-OrganizationConfig -PublicFoldersEnabled Remote -RemotePublicFolderMailboxes PFProxyMailbox1

# Zum Prüfen:
Get-OrganizationConfig | fl *PublicFolder* 
Exchange 2016 Remote Public Folder aktivieren
Exchange 2016 Remote Public Folder aktivieren

Im nächsten Schritt wäre es sehr hilfreich, wenn der Exchange 2010 bereits nach Best Practice konfiguriert ist und die internen URLs der virtuellen Verzeichnisse gleich denen der externen URLs sind (SplitDNS). Sollte dies nicht der Fall sein – Don’t Panic! Dann wird SplitDNS eben umgehend eingeführt: https://jans.cloud/2014/09/exchange-2007-2010-2013-2016-virtuelle-verzeichnisse-zertifikate-splitdns/

# Ggfs. noch die erste / einzige Datenbank umbenennen und verschieben
Dismount-Database -Identity "Mailbox Database *" -Confirm:$false
Get-MailboxDatabase | Set-MailboxDatabase -name "Exch2016DB01"
Move-Databasepath -Identity "Exch2016DB01" -edbfilepath "d:\ExchangeDBs\Exch2016DB01\Exch2016DB01.edb" -logfolderpath "d:\ExchangeLogs\Exch2016DB01" -Confirm:$False

# Je nach Speicherplatz evtl. Umlaufprotokollierung für die Dauer der Migration aktivieren #
Set-MailboxDatabase -Identity "Exch2016DB01" -CircularLoggingEnabled:$true
Mount-Database -Identity "Exch2016DB01" -Confirm:$false

# Receive Connector für den Mail-Empfang erstellen
New-ReceiveConnector -Name "Internet" -Usage Custom -TransportRole FrontendTransport -PermissionGroups AnonymousUsers -Bindings 0.0.0.0:25 -RemoteIpRanges [IP der Firewall / SPAM Filter]

# Offline Adressbuch setzen
$OAB = Get-OfflineAddressBook | ? Identity -like "*(Ex2013)"
foreach ($Ex in Get-ExchangeServer ) { Get-MailboxDatabase -Server $Ex.Name | Set-MailboxDatabase -OfflineAddressBook $OAB }
# Exportiertes Zertifikat vom Exchange 2010 installieren
$Cert = Import-PFXCertificate -FilePath "[Pfad zum Zertifikat].pfx" -CertStoreLocation Cert:\LocalMachine\My -Password $(ConvertTo-SecureString G3he!mesPW -AsPlainText -Force)

Get-OwaVirtualDirectory -Server $Ex2016 | Set-OwaVirtualDirectory -InternalUrl 'https://owa.[Domain].[tld]/owa' -ExternalUrl 'https://owa.[Domain].[tld]/owa' Get-EcpVirtualDirectory -Server $Ex2016 | Set-EcpVirtualDirectory -InternalUrl 'https://owa.[Domain].[tld]/ecp' -ExternalUrl 'https://owa.[Domain].[tld]/ecp'
Get-OABVirtualDirectory -Server $Ex2016 | Set-OABVirtualDirectory -InternalURL 'https://owa.[Domain].[tld]/OAB' -ExternalURL 'https://owa.[Domain].[tld]/OAB'
Get-ActiveSyncVirtualDirectory -Server $Ex2016 | Set-ActiveSyncVirtualDirectory -InternalURL 'https://owa.[Domain].[tld]/Microsoft-Server-ActiveSync' -ExternalURL 'https://owa.[Domain].[tld]/Microsoft-Server-ActiveSync'
Get-WEbServicesVirtualDirectory -Server $Ex2016 | Set-WEbServicesVirtualDirectory -InternalURL 'https://owa.[Domain].[tld]/EWS/Exchange.asmx' -ExternalURL 'https://owa.[Domain].[tld]/EWS/Exchange.asmx'
Get-MapiVirtualDirectory -Server $Ex2016 | Set-MapiVirtualDirectory -InternalURL 'https://owa.[Domain].[tld]/mapi' -ExternalURL 'https://owa.[Domain].[tld]/mapi'
Get-ClientAccessService -Identity $Ex2016.Name | Set-ClientAccessService -AutodiscoverServiceInternalUri https://owa.[Domain].[tld]/autodiscover/autodiscover.xml
Get-OutlookAnywhere -Server $Ex2016 | Set-OutlookAnywhere -ExternalHostname owa.[Domain].[tld] -InternalHostname owa.[Domain].[tld] -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Ntlm'
Enable-ExchangeCertificate -Thumbprint $Cert.Thumbprint -Services IIS, POP, SMTP, IMAP -Confirm:$false -Force
SplitDNS virtuelle Verzeichnisse
SplitDNS virtuelle Verzeichnisse

Bevor die erste Mailbox verschoben werden kann, sollte der neue Exchange Server noch zum bestehenden Sende Connector hinzugefügt werden. Sobald das erledigt ist, wird die erste Test-Mailbox verschoben und an einem Test Client die Hostsdatei bearbeitet sowie Outlook gestartet.

Get-SendConnector | Set-SendConnector -SourceTransportServers $(Get-ExchangeServer)
$Ex2016MBX = Get-MailboxDatabase -Server $Ex2016
New-MoveRequest Test.User -TargetDatabase $Ex2016MBX

Am oben genannten Test Client kann jetzt vorsichtshalber einmal die HOSTS-Datei bearbeitet werden und um die Einträge

  • [IP des Exchange 2016] owa.[DOMAIN].[tld]
  • [IP des Exchange 2016] autodiscover.[DOMAIN].[tld]

ergänzt werden.

HOSTS Datei am Test Client
HOSTS Datei am Test Client

Meldet sich der auserkorene Test User jetzt am Test Client an und öffnet Outlook, so sollte er zum letzten Mal in seinem Leben die folgende Nachricht erhalten:

Migration von Exchange am Client
Migration von Exchange am Client

Nach Bestätigung eben dieser Nachricht öffnet Outlook die Mailbox auf dem neuen Server und proxied die öffentlichen Ordner per PFProxyMailbox1 auf den legacy Server. Sobald der Test User sich vom ordnungsgemäßen Funktionieren des neuen Exchanges überzeugt hat, sollten die für SplitDNS konfigurierten Einträge auf den neuen Exchange Server geändert werden. Es kann nicht schaden die DNS Server Dienste einmal neu zu starten. Danach können die restlichen Postfächer inkl. der Arbitration-Mailboxes (Systempostfächer) verschoben werden.

Get-Mailbox -Server $Ex2010 -Arbitration | New-MoveRequest -TargetDatabase $Ex2016MBX
Get-Mailbox -Server $Ex2010 | New-MoveRequest -TargetDatabase $Ex2016MBX

# Mit einer kleinen Schleife lässt sich jetzt z.B. automatisch prüfen, ob alle Move Requests fertig sind..
do { Start-Sleep -Seconds 60; Get-MoveRequest | ? Status -ne "Completed" | Get-MoveRequestStatistics } until (!$(Get-MoveRequest | ? Status -ne "Completed"))

Während die Postfächer verschoben werden, kann an der Firewall / am SPAM Filter der Mailflow bereits auf den neuen Exchange gelenkt werden. Ist dies geschehen, kann mit der Überführung der alten öffentlichen Ordner in die neue modern Public Folder Strukturen begonnen werden -> KLICK 🙂

P.S.: Am Test Client sollte ASAP nach dem Test die HOSTS Datei wieder in den Ursprungszustand zurückversetzt werden. Es ist ja nicht so, dass einem so eine HOSTS Datei noch nie auf die eigenen Füße gefallen ist. 😉

Exchange Juni 2018 Updates

Microsoft hat am 19.06.2018 die nächsten Quartals-Updates für Exchange 2010, 2013, 2016 veröffentlicht.

Die folgenden Exchange Server Updates wurden veröffentlicht:

  • Exchange 2010 Service Pack 3 Rollup 22 (4295699)
  • Exchange 2013 Kumulativ Update 21 (4099855)
  • Exchange 2016 Kumulativ Update 10 (4099852)

Die Downloads stehen für Exchange 2010 >hier<, für Exchange 2013 >hier< und für Exchange 2016 >hier< bereit.

Für die aktuellen Exchange Versionen 2013 CU21 und 2016 CU10 ist das .Net Framework 4.7.1 nun Vorraussetzung. Ebenso werden, ebenfalls für Exchange Server 2010, die VC++ Runtime 2013 benötigt.

Die beste Neuerung dürfte, abgesehen von den Sicherheitsupdates, das Exchange SP3 Rollup 22 mit dem Support von Windows Server 2016 Domain Controllern innerhalb der Exchange Organisation darstellen. Diverse „meiner“ Kunden haben hier in der Vergangenheit häufig den unsupporteten Zustand mit Server 2016 DCs in Kauf genommen anstatt zuerst die Postfächer / öffentlichen Ordner auf einen aktuellen Exchange zu schieben und danach erst die Domänen Controller upzudaten.

Es sollte nicht unerwähnt bleiben, dass Exchange Server 2013 mit dem letzten Kumulativen Update (CU20) im April in den Extended Support gegangen ist. Daher ist das CU21 das letzte geplante „quarterly“ (vierteljährliche) Update. Die zukünftig erscheinenden Sicherheitsupdates werden als Installationsvorraussetzung somit das CU21 haben!

Viel Spaß beim Patchen. 🙂

Ein „kleiner“ aber wichtiger Nachtrag: Immer häufiger finde ich bei Kunden recht „verwahrloste“ Exchange Server. Diese wurden häufig installiert und nach dem kölschen Motto „Et hätt noch immer jot jejange“ betrieben. Obwohl die Server direkt veröffentlich wurden und somit aus dem Internet erreichbar waren, hat das die Kunden oder deren Dienstleister wenig bis gar nicht interessiert. Sollte jemand auf ein solches Kunstwerk treffen, so ist manchmal guter Rat teuer. Folgendermaßen bin ich bis jetzt immer zum Ziel gekommen:

  • Backup anfertigen und im Idealfall auf Funktion testen
  • Update des .Net Frameworks auf die aktuellste von Exchange unterstützte Version (Derzeit .Net Framework 4.7.1) sowie einen Reboot
  • Update des Exchange Servers auf das aktuellste Cumulative Update (Derzeit Exchange 2013 CU21 bzw. Exchange 2016 CU10) sowie einen Reboot
  • SplitDNS konfigurieren
  • Zertifikat des Exchanges prüfen und nach Möglichkeit durch eines einer öffentlichen CA ersetzen
  • IIS Crypto (GUI) von Nartac herunterladen und den „Best Practice“ Knopf sowie „Apply“ drücken sowie einen Reboot
IIS Crypto Exchange IIS Sicherheit
IIS Crypto Exchange IIS Sicherheit