Implementare un relay SMTP interno alla rete aziendale
La migrazione ad Exchange Online e la dismissione del server Exchange locale può comportare alcune problematiche da risolvere.
Una di queste problematica è come gestire eventuali mail provenienti da apparecchiature Hardware quali, UPS, Stampanti multifunzione, le interfacce di amministrazione dei server (per esempio iDRAC di DELL o l’iLO di HP, alcuni software o scripts. Infatti può capitare che le apparecchiature o i software non supportino l’autenticazione di Exchange Online oppure non si desidera che tali apparecchiature possano accedere a Internet o inviare direttamente mail o ancora si vuole evitare di “memorizzare” credenziali in apparecchiature, software o scripts.
Per alcuni scenari potrebbero essere utilizzate le seguenti soluzioni proposte nelle documentazione ufficiale How to set up a multifunction device or application to send emails using Microsoft 365 or Office 365.
Per quanto riguarda l’invio di mail tramite scripts si possono valutare le soluzioni proposte nei seguenti:
- App-only authentication in Exchange Online PowerShell and Security & Compliance PowerShell | Microsoft Learn
- How to Send Email with Powershell — LazyAdmin
Un altro approccio è quello di implementare all’interno della LAN un relay SMTP che riceverà le mail provenienti da apparecchiature hardware, software e script e si occuperà poi di inviarle. Ovviamente il relay SMTP sarà configurato per poter essere utilizzato solo all’interno della LAN e se necessario solo da specifici endpoint e solo lui invierà poi le mail tramite le credenziali di un account di Exchange Online o anche tramite le credenziali di una cassetta di posta non su Exchange Online.
Per implementare un relay SMTP è possibile utilizzare il E-MailRelay un progetto in C++ disponibile su SourceForge al seguente link E-MailRelay | SourceForge.net che realizza un semplice server di posta SMTP store-and-forward con accesso POP ai messaggi di spool.
E-MailRelay, attualmente alla versione 2.5.1 rilasciata il 6 gennaio 2024, è disponibile sia per sistemi Windows che per sistemi operativi Unix-like (Linux e Mac OS X) e consente una buona duttilità d’impiego.
In ambiente Windows può essere configurato tramite GUI mediante l’eseguibile emailrelay-gui.exe e può anche essere impostato per essere eseguito come servizio e in questo caso E-MailRelay verrà eseguito mediante il processo emailrelay-service.exe che a sua volta eseguirà il batch script emailrelay-start.bat. il quale avvierà l’eseguibile emailrelay.exe con le opzioni configurate. Il batch script emailrelay-start.bat viene anche utilizzato nel caso E-MailRelay venga avviato manualmente o al logon dell’utente.
Se necessario è anche possibile configuare più instanze del servizio E-MailRelay, a riguardo si veda E-MailRelay – Running as a service.
Come detto precedentemente E-MailRelay può essere configurato in modo estremamente duttile e non tutte le opzioni sono disponibili tramite la GUI, ma alcune solo tramite le opzioni di avvio.
Di seguito alcuni suggerimenti per l’utilizzo di E-MalRealy.
E-MailRelay implementa la funziona di relay SMTP comportandosi come un server SMPT nei confronti degli endpoint che necessitano di usarlo per inoltrare mail e pensando agli scenari d’impiego descritti all’inizio del post conviene configuralo per restare in ascolto sulla porta 25 in modalità non autentica abilitando la TLS encryption in modalità STARTTLS, in questo modo si potranno gestire sia gli endpoint compatibili con la la TLS encryption che quelli non compatibili e potranno essere gestiti eventuali endpoint su cui non sia possibile modificare la porta TCP da utilizzare per connettersi al server SMTP (ad esempio software a bordo di apparecchiature hardware datati) ed endpoint che non prevedano l’autenticazione SMTP oppure scenari in cui le credenziali per l’autenticazione non potrebbero essere opportunamente protette (ad esempio scripts su client che necessitano di inviare mail in determinate circostanze), a riguardo si veda il mio post SMTPS e STARTTLS – DevAdmin Blog. Per maggiori informazioni si veda E-MailRelay – SMTP server options.
E-MailRelay inoltra poi le mail ricevute comportandosi come un client SMTP verso account Exchange Online, GMail, etc.., le credenziali per connettersi al server SMTP vengono salvate crittografate nel file emailrelay.auth. Per maggiori informazioni si veda E-MailRelay – SMTP client options.
Un funzionalità che alcuni scenari può essere particolarmente utile è quella di poter intervenire sui file che vengono creati quando si riceve una mail ovvero il file .content che contiene il contenuto della mail e il file .envelope che contiene i dati necessari per l’invio della mail (a riguardo si veda E-MailRelay – Message store) tramite gli E-MailRelay – Filters.
Ad esempio è possibile modificare l’indirizzo from, funzionalità necessaria quando il server SMPT verso cui E-MailRelay inoltrerà la posta accetta solo uno specifico indirizzo email mittente e sull’endpoint non è possibile configurarlo (come ad esempio sulle iDRAC DELL versione 8 o precedenti). La modifica dell’indirizzo from deve essere fatta sia sul file .content che sul file .envelope a riguardo è possibile vedere gli script di esempio emailrelay-edit-envelope.js e emailrelay-set-from.js disponibili nella cartella examples oppure si può vedere lo script emailrelay-set-from-content-envelope.js che ho reso disponibile nella seguente richiesta di supporto #93 Modify the FROM address che ho inoltrato all’autore di E-MailRelay.
Per quanto riguarda l’encryption TLS è possibile anche utilizzare un certificato autofirmato salvato su file PEM contenente anche la chiave privata generato ad esempio con OpenSSL come indicato in E-MailRelay – TLS encryption:
“The –server-tls option requires that the –server-tls-certificate option is used to specify a PEM-format file containing a X.509 certificate and private key.
This OpenSSL command can be used to create a self-signed certificate file suitable for testing:
$ openssl req -x509 -noenc -subj “/CN=$USER” -newkey rsa:2048 -keyout emailrelay.pem -out emailrelay.pem”
Di seguito alcuni suggerimenti per l’hardening di E-MailRelay:
- Installare E-MailRelay per essere eseguito su un volume dedicato configurando opportunamente le autorizzazione a livello di file system delle directory utilizzate da E-MailRelay.
- Se si configura E-MailRelay per essere eseguito come servizio impostare il servizio per essere eseguito con un account locale dedicato con il minimo di privilegi necessari (per default l’installazione configura il servizio per utilizzare Local System).
- Sul sistema su cui verrà installato E-MailRelay configurare opportunamente il firewall per consentire il traffico in ingresso solo sulla porta TCP configurata nelle opzioni SMTP Server e possibile accettare le connessioni solo dagli indirizzi IP necessari.
- Configurare E-MailRelay per accettare le connessioni solo dalle interfacce di rete necessarie, a riguardo di veda E-MailRelay – IP addresses e E-MailRelay – Connection blocking.
- Se possibile configurare E-MailRelay per accettare solo determinati indirizzi mail destinatario, a riguardo si veda E-MailRelay – Address verifiers.
Ciao Ermanno, buon anno!
L’avessi trovato qualche tempo fa.. alla fine ripiegai con IIS..
Visto che però potrebbe essere sempre utile, ti volevo fare una domanda ?
Lo hai già testato anche per riguarda le nuove avvertenze al riguardo l’uso degli smtp relay date da Microsoft poco tempo fa ?
Intendo quelle di questo link: https://techcommunity.microsoft.com/t5/exchange-team-blog/updated-requirements-for-smtp-relay-through-exchange-online/bc-p/4006418
Grazie ancora,
Fabrizio
Ciao Fabrizio,
io l’ho testato utilizzando un account di posta su Aruba che manda le mail, quindi non ho testato gli scenari del link da te indicato…. diciamo che avendo a disposizione un account di mail completamente svincolato dall’infrastruttura ho preferito non utilizzare credenziali di dominio anche la macchia è interna e protetta, ma in questo modo visto che ne avevo la possibilità o anche evitato di di esporre credenziali per così dire “più pregiate”