Exchange Server 2016: creare un connettore relay anonimo

Microsoft Exchange Server

A prescindere dalle considerazioni sulla sicurezza di un connettore di questo tipo, spesso si ha la necessità di configurare Exchange per inoltrare la posta all’esterno anche se non originata da un suo client. Ad esempio, per la funzione dei scan to mail delle multifunzione, o per l’inoltro di segnalazioni di allarmi o per l’invio automatico delle fatture dai diversi prodotti gestionali.

Come prima cosa controlliamo la configurazione attuale di Exchange. Apriamo la PowerShell e lanciamo il seguente comando: Get-ReceiveConnector

Figura 1 – Elenco Connettori

Come si può vedere dalla figura 1, l’installazione di Exchange Server ha creato un connettore di default che si chiama “EXC-00\Default Frontend EXC-00” (EXC-00 è il nome del server), che per definizione ascolta tutto il traffico proveniente da qualsiasi IP (sia IPv4 che IPv6) sulla porta 25. Questo connettore è in grado di fare il relay verso qualsiasi mailbox sul nostro (nostri) server, in pratica può fare tutto il relay interno. Se andiamo a vedere la sua configurazione possiamo vedere che è in grado di effettuare sia il relay autenticato sia quello anonimo – figura 2.

Figura 2 – Proprietà Connettore

Se preferite lo stesso controllo si può ovviamente fare via ECP, come mostra la figura 3.

Figura 3 – Proprietà Connettore da ECP

Possiamo anche verificare il tutto con la solita connessione Telnet sulla porta 25; nel caso non sia installato sul vostro PC, potete farlo tramite Add roles and features, o da prompt dei comandi (dism /online /Enable-Feature /FeatureName:TelnetClient) o da PowerShell (Install-WindowsFeature -name Telnet-Client), quindi da un prompt dei comandi, lanciate i seguenti comandi.

Telnet exc-00.pmincloud.com 25

Helo stampanti.com

Mail from: multifunzione1@stampanti.com

Rcpt to: andrea.garattini@pmincloud.com

Data

Subject: Messaggio finto da una multifunzione

.

Figura 4 – Risultato Telnet

Il messaggio verrà correttamente consegnato, come mostra la figura 5. Tuttavia, se proviamo a mandare il messaggio verso l’esterno, riceveremo un errore che ci conferma che non è possibile effettuare il relay anonimo, in particolare un messaggio: 550 5.7.54 SMTP; Unable to relay recipient in non-accepted domain – figura 6.

Telnet exc01.pmincloud.com 25

Helo test.com

Mail from: test@multifunzione

Rcpt to: andrea.garattini@acmeconsulting.com

Data

Subject: Messaggio finto da una multifunzione

.

Figura 5 – Consegna Messaggio

Figura 6 – Fail Telnet

Tutto come previsto, nonostante in apparenza il relay anonimo fosse consentito. Per poter fare relay anonimo verso l’esterno dobbiamo procedere con un’operazione a tre passi:

  1. Creare un connettore dedicato
  2. Configurarlo come anonimo
  3. Assegnargli i permessi AD necessari

Creazione Connettore

NB: per semplificarmi la vita uso la variabile $Server al posto di specificare ogni volta il nome del mio server. Quindi prima di usare gli script qui sotto, la variabile va caricata con il nome del vostro server (con un cmdlet tipo: $Server = EXC-00).

Lanciamo PowerShell e creiamo un connettore con le seguenti specifiche (così vediamo anche un po’ di parametri):

  • Nome: Relay Anonimo
  • Possibilità di ricevere SOLO da questi IP: 192.168.200.1, 192.168.200.10 e gli ip da 192.168.200.21 a 192.168.200.30
  • Specifichiamo il suo IP come IP di bindings
  • Uso Custom
  • Dimensione massima dei messaggi: 50 MB
  • Banner: smtp.pmincloud.com
  • Disabilitato (lo abilitiamo solo quando è finita la configurazione)

New-Receiveconnector -Name “Relay Anonimo” -RemoteIPRange 192.168.200.1,192.168.200.10,192.168.200.21-192.168.200.30 -TransportRole FrontendTransport -Bindings 192.168.200.20:25 -usage Custom -fqdn “smtp.pmincloud.com” -MaxMessageSize 50MB -Enabled: $false -Server “$($Server)”

Figura 7 – Creazione Connettore

Procediamo a configurarlo come anonimo. I gruppi che possiamo assegnare a un connettore sono: None, AnonymousUsers, ExchangeUsers, ExchangeServers, ExchangeLegacyServers, Partners, Custom. Andiamo a rimuovere tutti lasciando solo “AnonymousUsers” (cioè andiamo a impostare SOLO AnonymousUsers: Exchange non aggiunge ma sostituisce!) tramite il comando: Set-ReceiveConnector “$($Server)\Relay Anonimo” -PermissionGroups AnonymousUsers

Quindi controlliamo nuovamente per essere sicuri che sia tutto in ordine.

Figura 8 – Verifica Nuovo Connettore

Assegnazione Permessi

Per assegnare i permessi AD corretti, lanciate questo cmdlet: Get-ReceiveConnector “$($Server)\Relay Anonimo” | Add-ADPermission -User ‘NT AUTHORITY\Anonymous Logon’ -ExtendedRights MS-Exch-SMTP-Accept-Any-Recipient

Figura 9 – Aggiunta Permessi AD

Abilitiamolo tramite il comando Set-ReceiveConnector “$($Server)\Relay Anonimo” -Enabled:$True e facciamo una nuova prova tramite Telnet per verificare che tutto funzioni correttamente.

Figura 10 – Test Telnet

Per sicurezza facciamo un paio di controlli aggiuntivi:

Get-ReceiveConnector “$($Server)\Relay Anonimo” | Format-List Name,Enabled,TransportRole,Bindings,RemoteIPRanges,PermissionGroups,MaxMessageSize

Figura 11 – Dettaglio Connettore

Get-ADPermission “Relay Anonimo” -User “NT AUTHORITY\ANONYMOUS LOGON” | where {($_.Deny -eq $false) -and ($_.IsInherited -eq $false)} | Format-Table User,ExtendedRights

Figura 12 – Dettaglio Permessi AD

Se tutto è ok… abbiamo finito! Buon relay a tutti!!!

NB: Attenzione a non commettere un errore nella configurazione dei valori del RemoteIPRange: supponiamo di avere una subnet intera dedicata ai server, ad esempio la 172.16.1.0/24. Supponiamo di avere due server Exchange (in DAG o no non cambia nulla). Supponiamo che per semplificarci la vita decidiamo di mettere tutta la subnet negli IP autorizzati a fare relay. Abbiamo appena azzoppato i nostri due poveri Exchange!!! In pratica se guardiamo il connettore che Exchange usa per le comunicazioni tra server… usa la stessa porta, cioè la 25, ma come range accetta tutti gli IP, tanto che la comunicazione è autenticata. Ma quando deve scegliere che connettore utilizzare, Exchange vede che c’è un connettore che accetta tutto e un connettore sulla stessa porta che invece è più specifico, sceglie quest’ultimo, visto che è più “puntuale”! Per ovviare a questo problema abbiamo tre strade:

  1. Uso una porta diversa per il connettore anonimo (ad esempio la 2552 – ma non la 2525 che la usa già Exchange!!!)
  2. Definisco puntualmente i server Exchange nel connettore corretto aggiungendolo a “tutti gli IP”
  3. Non uso la sottorete completa ma solo i server o i range che effettivamente mi servono!