03/01/2012
Premesse e considerazioni:
La situazione iniziale è una semplice macchina con RedHat Linux installato con tutti i pacchetti di default. L'MTA preconfigurato è sendmail. Lo scopo non è quello di configurare la macchina come una mail server ma semplicemente dare la possibilità alle mail di sistema di essere inviate mediante una smtp gateway Gmail attraverso un qualsiasi account valido. Quello che verrà descritto sono i semplici passi per configurare sendmail sendza dover installare altri MTA come postfix per mantenere la configurazione il più standard possibile.
1. Controllare Sendmail
Da quando Gmail usa TLS, devi essere sicuro che sendmail sia compilato con il supporto TLS (per la crittazione) e SASL (per l'autenticazione). Questo è il comando per controllarlo:
/usr/sbin/sendmail -d0.1 -bv root
Nel mio caso senmail ha già tutti i flag di compilazione necessari e quindi non ho dovuto fare nulla.
Se per qualche ragione la tua installazione non dovessere avere i flag necessari dovrai ricopilare sendmail ed aggiornare i binari. Questo caso non è affrontato in questa guida.
2. Aggiornare Cyrus SASL
La configurazione di default di RedHat ha tutti i plugin SASL necessari ma se stai usando un'altra distribuzione o non hai le librerie “plain” e “login” compilate all'interno di SASL puoi fare riferimento al punto 2 di questa guida:http://www.phinesolutions.com/sendmail-gmail-smtp-relay-howto.html per poi riprendere dal prossimo punto
3. Generazione dei certificati SSL
Creiamo una cartella certs sotto /etc/mail. Di seguito i comandi usati per generare i certificati SSL:
cd /etc/mail/certs
openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 3650
openssl req -nodes -new -x509 -keyout sendmail.pem -out sendmail.pem -days 3650
Nota che i certificati creati sono validi per 10 anni .
Hop inoltre copiato /etc/pki/tls/certs/ca-bundle.crt in /ect/mail/certs ed incluso nella configurazione di sendmail altrimenti avrei avuto un errore del tipo:
unable to get local issuer certificate
La ragione è che il file del certificato ca bundle file permette di evitare l'errore con Gmail. Ho letto comunque che anche senza questo file la posta dovrebbe partire lo stesso. Ma se possiamo risolvere il problema perchè ignorarlo?.
cp /etc/pki/tls/certs/ca-bundle.crt .
4. Configurare sendmail
Con i preparativi fatti fin'ora siamo pronti per configurare sendmail. Ho trovato questo tutorial molto utile per arrivare alla configurazione corretta.
Crea un file /etc/mail/auth/client-info come questo:
AuthInfo:smtp.gmail.com “U:root” “I:username(AT)gmail.com” “P:password” “M:PLAIN”
Ovviamente cambia nome utente e password con quelli del tuo account gmail e fai attenzione agli apici doppi!!!
Se usi un dominio ersonale gestito da google If you use Gmail hosted email, dovrai usare il tuo indirizzo mail username@hostname.tld al posto del classico nome@gmail.com.
Ricordati di eseguire poi il comando:
makemap -r hash client-info.db < client-info
e di rendere i permessi del file 600.
Chmod 600 *
Aggiungi o modifica al file /etc/mail/sendmail.mc le seguenti righe (Prima della direttiva MAILER(smtp)dnl)
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
dnldefine(`ESMTP_MAILER_ARGS', `TCP $h 587')
dnldefine(`CERT_DIR', `/etc/mail/certs')
define(`confCACERT_PATH', `CERT_DIR')
define(`confCACERT', `CERT_DIR/ca-bundle.crt')
define(`confCRL', `CERT_DIR/ca-bundle.crt')
define(`confSERVER_CERT', `CERT_DIR/sendmail.pem')
define(`confSERVER_KEY', `CERT_DIR/sendmail.pem')
define(`confCLIENT_CERT', `CERT_DIR/sendmail.pem')
define(`confCLIENT_KEY', `CERT_DIR/sendmail.pem')
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
Attenzione: Gli apici inziali e quelli finali sono differenti. Questo particolare può creare dolorosi mal di testa e perdite di tempo. Lo dico per esperienza!
Dopo aver modificato il file ricordati di creare la versione sendmail seguendo “make” o m4.
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Riavvia sendmail e verifica che tutto funzioni bene!
/etc/init.d/sendmail restart
Trucchi ed errori
Se nel log vedi un “stat=Service unavailable” significa che il server gmail sta rifiutando per qualche ragione la tua mail. Ti consiglio vivamente di partire con un debug dei messaggi SMTP utilizzando il comando descritto al punto 3 del paragrafo DEBUG.
DEBUG
1. Ypuoi alzare il livello di log in sendmail.mc (per esempio portandolo a 100) per vedere nel dettaglio quale punto del recapito della mail crea problemi e perchè. Modifica o aggiungi la seguente linea
define(`confLOG_LEVEL', `100')dnl
e ricordati di lanciare il solito comando m4 alla fine della modifica.
2. Puoi controllare (e tenere sotto controllo in tempo reale) il file di log mail così:
tail -f /var/log/maillog
3. Un alro trucco molto utile per ferificare lo scambio di messaggi SMTP tra il vostro server ed il server gmail:
(echo subject: test; echo) | sendmail -Am -v your_email_address(AT)gmail.com
4. Usa mailq per controllare la tua coda di mail in uscita
(versione tradotta ed aggiornata di http://www.phinesolutions.com/sendmail-gmail-smtp-relay-howto.html)
Pagine utili con informazioni addizionali: