Configurare Postfix per usare un SMTP esterno su Ubuntu Server

Questo articolo illustra la configurazione di Postfix come smarthost (relay SMTP esterno) su Ubuntu Server. L’obiettivo è fare in modo che tutte le email in uscita vengano inviate tramite un provider esterno (ad es. il server SMTP del tuo ISP o servizi come Gmail/Outlook/SendGrid).

Installare i pacchetti necessari

Installa Postfix e i moduli SASL per l’autenticazione verso lo smarthost.

sudo apt update
sudo apt install -y postfix mailutils libsasl2-modules

Scelta rapida con il configuratore (opzionale)

Se preferisci, puoi lanciare il configuratore e scegliere “Internet with smarthost” (o “Satellite system”). In ogni caso, rifiniremo a mano i parametri chiave.

sudo dpkg-reconfigure postfix

Impostare lo smarthost in main.cf

Apri il file di configurazione principale.

sudo nano /etc/postfix/main.cf

Aggiungi o modifica le seguenti direttive (adatta host e porta al tuo provider; 587 con STARTTLS è la scelta più comune):

# Inoltra tutta la posta al provider SMTP esterno
relayhost = [smtp.example.com]:587

# Autenticazione SASL verso lo smarthost

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

# Crittografia TLS in uscita (STARTTLS su 587)

smtp_tls_security_level = encrypt
smtp_tls_loglevel = 1
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

# Identità del mittente locale (regola secondo il tuo dominio)

myhostname = mail.tuodominio.tld
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost 

Creare la mappa delle credenziali sasl_passwd

Inserisci utente e password del provider nel file delle credenziali.

sudo nano /etc/postfix/sasl_passwd

Esempi:

[smtp.example.com]:587    utente@example.com:passwordMoltoSicura
# Gmail:
# [smtp.gmail.com]:587     utente@gmail.com:APP_PASSWORD
# Outlook.com:
# [smtp.office365.com]:587 utente@tuodominio.tld:LaTuaPassword

Proteggi il file, genera il database hash e rimuovi eventuali copie dalla shell:

sudo chown root:root /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
shred -u ~/.bash_history 2>/dev/null || true

Ricaricare Postfix e verificare

sudo systemctl restart postfix
sudo systemctl status postfix --no-pager

Invia un messaggio di prova:

echo "Corpo del messaggio" | mail -s "Test Postfix via smarthost" destinatario@esempio.tld

Controlla i log:

sudo tail -f /var/log/mail.log

Esempi

Gmail (consigliato: Password per le app)

Per gli account personali/Workspace senza OAuth su server, usa una Password per le app e abilita STARTTLS su 587.

relayhost = [smtp.gmail.com]:587
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 utente@gmail.com:APP_PASSWORD

Microsoft 365 / Outlook

Su molti tenant è richiesta l’autenticazione moderna (OAuth). Se il tuo tenant consente SMTP AUTH con utente/password:

relayhost = [smtp.office365.com]:587
# /etc/postfix/sasl_passwd
[smtp.office365.com]:587 utente@tuodominio.tld:LaTuaPassword

Se SMTP AUTH è disabilitato o serve OAuth, valuta un connettore sul tenant o un provider SMTP dedicato.

Provider SMTP dedicati (SendGrid, Mailgun, ecc.)

relayhost = [smtp.sendgrid.net]:587
# /etc/postfix/sasl_passwd
[smtp.sendgrid.net]:587 apikey:SG.xxxxxxxx

Opzioni utili e sicurezza

  • Forzare TLS: smtp_tls_security_level = encrypt richiede connessione cifrata; in caso di problemi, usa temporaneamente may per test.
  • CA truststore: su Ubuntu il percorso predefinito è /etc/ssl/certs/ca-certificates.crt.
  • Permessi stretti: lascia /etc/postfix/sasl_passwd a 600.
  • UFW/Firewall: consenti traffico in uscita verso la porta del provider (es. 587).

Risoluzione dei problemi

  • Autenticazione fallita: controlla username/password nel file sasl_passwd e rigenera il db con postmap.
  • Errore TLS/Certificato: verifica smtp_tls_CAfile; aumenta il dettaglio log con:
    smtp_tls_loglevel = 2
    
  • Debug verso host specifico:
    debug_peer_list = smtp.example.com
    
  • Log in tempo reale:
    sudo tail -f /var/log/mail.log
    
  • Test SMTP esplicito (opzionale): con openssl s_client per ispezionare il banner e STARTTLS.
    openssl s_client -starttls smtp -connect smtp.example.com:587 -crlf -ign_eof
    

Identità e recapito: SPF, DKIM, DMARC

Anche usando uno smarthost, è buona pratica allineare i record DNS del tuo dominio:

  • SPF: includi lo smarthost nel record TXT SPF (es. include:_spf.provider.tld).
  • DKIM: se il provider firma in uscita, pubblica il suo record pubblico DKIM.
  • DMARC: imposta una policy coerente (none/quarantine/reject) e un indirizzo di report.
Torna su