Configurare Postfix per usare un SMTP esterno su Ubuntu Server

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.