Check Exchange Online Protection IP's with PowerShell (ExOIPChecker)

Hallo zusammen,

Die Dokumentation der Office 365 URL's und IP's existiert schon sehr lange. Anfänglich konnte man sich ein XML herunterladen. Seit knapp zwei Jahren gibt es einen Webservice, welches ein JSON zurückliefert.

Office 365 URLs and IP address ranges

https://docs.microsoft.com/en-us/office365/enterprise/urls-and-ip-address-ranges

 

Office 365 IP Address and URL web service

https://docs.microsoft.com/en-us/office365/enterprise/office-365-ip-web-service

 

Falls auf einer Firewall die IP's für Exchange Online Protection eingeschränkt werden, so sollte man zumindest mitbekommen, wenn sich die IP's ändern, damit man die Firewall Regeln angepasst werden können. Dafür habe ich ein entsprechende Script entwickelt.

 

Es gibt sogar Scripte für Checkpoint Firewalls, welche das automatisch anpassen https://github.com/leinadred/IPaddressFeed2CheckPointAPI

 

So sieht das JSON aus und ist einfach zu lesen.

Für die Abfage muss man eine GUID angeben. Man kann mit folgendem Code eine GUID erzeugen

$GUID = ([guid]::NewGuid()).guid
$ClientRequestId = $GUID

Die Endpoints kann man sich mit folgendem Query abfragen. Mit dem NoIPv6=True Parameter erhält man nur IPv4 Adressen

#Get Exchange Endpoints
$uri =
https://endpoints.office.com/endpoints/worldwideServiceAreas=Exchange&NoIPv6=true&ClientRequestId=$ClientRequestId
Write-Host "DEBUG: URL: $uri"
$Result = Invoke-RestMethod -Method GET -uri $uri

Mit dem folgenden Filter grenze ich die Resultate auf eine bestimmte URL ein.

#EOP IP's
$addresses = ($Result | where {$_.urls -match "mail.protection.outlook.com"}).ips | Sort-Object -Unique

Beim Centralized Mail Transport, werden die ausgehenden Mails über die On-Prem Exchange Organisation ausgeliefert. Manchmal wird dazu auch ein Exchange Edge Server eingesetzt.

Mit dem von mir entwickelten Script kann man sich nicht nur über die Changes informieren lassen, sondern gleich den Exchange Receive Connector mit den Remote IP Ranges aktualisieren.

 

Für den Einsatz in einer Anderen Umgebung, müssen einfach die Variablen im Script angepasst werden.

So sieht das Script bei der Ausführung aus.

Danach ist der Receive Connector mit den Remote IP's aktualisiert. Achtung die IP Adresse 127.0.0.1 darf nicht entfernt werden, sonst funktioniert die Managed Availability von Exchange nicht mehr. Das ist aber im Script bereits berücksichtigt.

Ausserdem kann man sich über das Array $CustomRemoteIPRanges weitere Ranges hinzufügen, welche beim Update ebenfalls hinzugefügt werden.

Will man den Exchange Receive Connector nicht updaten, so stellt man einfach die Variable $UpdateExchangeConnector auf $false

So sieht das info Mail aus, wenn es keine Änderungen gibt.

Das Script habe ich auf GitHub publiziert

https://github.com/BohrenAn/ExOIPChecker

Grüsse
Andres Bohren