Empfanfsconnectoren die keine Authentifizierung erfordern, werden benötigt um Systemen das Versenden von Mails zu erlauben, die keine Authentifizierung unterstützen. Das stellt normalerweise kein Problem dar, wenn die Connectoren richtig konfiguriert sind. Ich habe aber schon oft gesehen das ganze Subnetze ohne Authentifizierung Mails überall hin verschicken dürfen (Historisch so gewachsen).
So etwas wieder abzulösen ist mühselig. Wer kennt schon jedes System was Mails verschickt, ein ganzes Subnetz wird es bestimmt nicht benötigen. Um zumindest erst einmal anzufangen, muss rausgefunden werden, welche Rechner Mails über den Relay Connector verschicken, dann kann der Connector auf die Systeme eingeschränkt werden und zu guter Letzt kann man sich die Rechner anschauen und sie ggf. umstellen..
Ich habe ein Script geschrieben, welches die Message Tracking Logs durchsucht und alle Rechner auflistet die einen Connector benutzen, das Script schränkt auch wenn gewünscht den Connector auf die entsprechenden IPs ein.
param
(
[Parameter(Mandatory=$True)]
[string]$Server
,
[Parameter(Mandatory=$True)]
[string]$Connector
,
[Parameter(Mandatory=$True)]
[int]$Days
,
[Parameter(Mandatory=$True)]
[string]$ChangeConnector
)$end = get-date
$start = $end.AddDays(-$days)
$connectorname = „$server\$connector“$log = get-messagetrackinglog -EventID „RECEIVE“ -Start $start -End $end -Server $server -resultsize unlimited | where {$_.Source -match „SMTP“ -and $_.ConnectorID -eq $connectorname}
$servers = $log | foreach-object {$_.clientip} | select -unique
$ErrorActionPreference = „silentlycontinue“
$conips = $NULLwrite-host „“
write-host „IP-Adresse`t`tHostname“
write-host „————————————————————–“
write-host „“foreach ($server in $servers)
{
$name = $null
$ip = $server
$name = [System.Net.Dns]::GetHostEntry($ip).hostname
$conips +=@(„$ip“)
write-host $ip`t`t$name
}write-host „“
$ErrorActionPreference = „continue“if ($changeconnector -match „True“)
{
Set-ReceiveConnector $connectorname -RemoteIPRanges $conips
write-host „Connector $connector auf Server $server wurde angepasst“ -foregroundcolor yellow
write-host „“
}
else
{
write-host „Connector $connector auf Server $server wurde nicht angepasst“ -foregroundcolor green
write-host „“
}
Kopiert den Scripttext einfach in eine Datei mit der Endung .ps1 (Beispiel query-relayhost.ps1). Folgende Paramenter müssen übergeben werden:
-Server: Der Name des Hub Transport Server auf dem sich der Connector befindet
-Connector: Der Name des Connectors auf dem Hub Transport Server
-Days: Anzahl an Tagen die in den Tracking Logs zurückgegangen werden sollen.
-ChangeConnector: True oder False, bei True wird der Connector auf die gefundenen IPs eingeschränkt, False listet nur auf
Beispiel: query-relayhosts.ps1 –Server SMAIL01 –Connector “Allow Relay” –Days 30 –ChangeConnector true
Skript ausgeführt aber leider listet er mir keine IPs :-(
Geht das mit Exchange 2016 nicht mehr?
Bei Exchange 2016 taucht leider immer unter „ConnectorId“ der „Default Name“ auf und nicht der eigentliche FrontEndTransport Connector an dem die IP-Adressen hinterlegt sind. Hast Du hier eine Lösung oder ist das wirklich by Design so was wirklich Schade wäre ;-(
Hallo,
genau sowas habe ich gesucht. Allerdings ist im Skript noch das Problem, dass die Variable $Server doppelt benutzt wird.
Da ich bei mir sehr viele Konnektoren verwende, habe ich das Skript so umgebaut, dass die Empfangs-Konnektoren alle abgefragt werden und in einer Schleife verarbeitet werden. Das MessageTrackingLog ziehe ich dabei nur einmalig und selektiere dort jeweils nur nach der Connector-Identity, da das Log doch etwas länger braucht.
Ideal für ein Konfigurations-Review, um zu sehen, was überhaupt noch verwendet wird, oder gar nicht zum Tragen kommt, da ein anderer Konnektor gezogen wird.
Nochmals danke für das Skript, macht die Fehlersuche viel einfacher!