PostFix in relay su Microsoft 365 con OAuth2: copertina

La Microsoft dopo aver centralizzato tutti i suoi prodotti come servizi SaaS ha fatto un importante potenziamento della sicurezza in particolare introducendo il sistema OAuth2 per la posta elettronica.

Se questo complica di poco l'utilizzo delle applicazioni di email su cellulari, tablet e computer, per i server e applicazioni server il panorama è decisamente più complesso.
Infatti oltre alle credenziali di accesso alla casella dobbiamo:

  • o creare una specifica configurazione su Azure;
  • o presentare il nostro server come un semplice client email.

In questa guida vediamo come configurare un server Ubuntu 24.04 con Postfix in ralay su una casella SMTP Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. con i seguenti parametri:

User: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Pass: MyPass1#example
SMTP: smtp.office365.com:587
Sicurezza:  StartTLS
Protocollo: OAuth2

Installare Postfix

Installiamo Postfix e l'ecosistema per XOuth2

sudo apt install postfix libsasl2-modules-gssapi-mit libsasl2-modules sasl2-bin

alla richieste del tipo di installazione di Postfix segliamo il "Internet Site" e inserire il nome FQDN del server (in questa guida è myexample.com .

Abilitiamo e avviamo saslauthd

sudo systemctl enable saslauthd --now

verifichiamo il funzionamento di saslauthd

testsaslauthd -u Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. -p MyPass1#example -s smtp -f /var/run/saslauthd/mux

/var/run/saslauthd/mux è la directory dove saslauthd crea il socket Unix.

Editiamo /etc/postfix/main.cf per configurare il relay di Postfix

sudo nano /etc/postfix/main.cf

Configuriamo Postfix

Aggiungiamo le seguenti righe in chiusura del file

[ ... ]
relayhost = [smtp.office365.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_security_level = encrypt

Creiamo /etc/postfix/sasl_passwd dove metteremo la username e la password che Postfix userà per autenticarsi su Office 365

sudo nano /etc/postfix/sasl_passwd

inseriamo la stringa con username e password come segue

[smtp.office365.com]:587 Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.:MyPass1#example

processiamo il file appena creato

sudo postmap /etc/postfix/sasl_passwd

Tuning finale di Postfix

A questo punto Postfix è pronto per fare un relay di tutte le mail su Office 365 comportandosi come un MTA, ma dobbiamo automatizzare la trasformazione di tutte le stringhe sender delle mail con l'utente noto a Office 365. Se non lo facciamo Postfix riceverà un errore come il seguente: "SendAsDenied; Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. not allowed".
Per evitare questo useremo sender_canonical e header_checks per cambiare tutti i sender con l'unico utente riconosciuto da Office 365.

Editiamo ancora /etc/postfix/main.cf

sudo nano /etc/postfix/main.cf

e aggiungiamo le seguenti righe

# Tabelle di Sostituzione Automatica
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_header_checks = regexp:/etc/postfix/header_checks

Creiamo ed editiamo /etc/postfix/sender_canonical

sudo nano /etc/postfix/sender_canonical

e inseriamo le seguenti righe

/.+/    Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
@myexample.com Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
@www.myexample.com Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

e processiamo il file

sudo postmap /etc/postfix/sender_canonical

Creiamo ed editiamo /etc/postfix/header_checks

sudo nano /etc/postfix/header_checks

e inseriamo le seguenti stringhe

/^From: root/ REPLACE From: Nome <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.>
/^To: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo./ REPLACE To: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

Riavviamo Postfix

sudo systemctl restart postfix

Test finale

verifichiamo il lavoro inviandoci una email:

echo "Test email" | mail -s "Test email" Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

Se la mail arriva tutto il lavoro è corretto.