Ssmtp

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"

Introduzione

Ssmtp è un semplice MTA che permette l'invio di email da un computer ad un hub mail (server smtp) senza la necessità di avere un ambiente grafico installato. È estremente leggero, essenziale e non richiede l'esecuzione di servizi permanenti (daemons) in background, tuttavia non permette ne di gestire code ne di ricevere mail, nemmeno quelle locali.
L'invio di mail può essere effettuato sia direttamente tramite l'eseguibile ssmtp che configurando opportunamente il proprio MUA (es. Mutt).

ssmtp ed exim

ssmtp non può coesistere con exim, il MTA predefinito di debian, pertanto installare il primo comporta necessariamente la rimozione del secondo.
Questo fatto può costituire un problema per coloro i quali trovano utile continuare a ricevere in locale le mail di sistema, infatti come già accennato ssmtp non permette in alcun modo la ricezione di email, nemmeno quelle locali, a differenza di exim.
In poche parole, se si ha a che fare con una macchina cui si accede prevalentemente via LAN, allora l'installazione di ssmtp può risultare non ottimale in quanto tutte le mail, anche quelle di sistema, verrebbero dirottate verso un server smtp esterno per poi essere di fatto rispedite indietro all'utente.
In tutti quei casi invece in cui la macchina non appartiene alla propria LAN e si ha bisogno di un sistema molto semplice e leggero per l'invio delle mail (di sistema e non), allora ssmtp risulta essere una soluzione molto valida.

Installazione

ssmtp è disponibile direttamente da repository:

apt-get install ssmtp

Configurazione

I file di configurazione di ssmtp sono due ed entrambi assolutamente minimali.

/etc/ssmtp/ssmtp.conf

Ecco un esempio generico di file di configurazione adatto a servizi gratuiti come gmail, yahoo, ecc. che supportano TLS:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=nome_account_email@dominio

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
UseTLS=YES
UseSTARTTLS=YES
mailhub=indirizzo_server_smtp:587

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=hostname_della_propria_macchina

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES

# Authentication parameters
AuthMethod=LOGIN
AuthUser=nome_account_email@dominio
AuthPass=password_account_mail

Significato dei parametri usati:

  • root definisce l'indirizzo mail a cui saranno inviate tutte le mail di sistema, ovvero quelle generate dagli utenti con UID < 1000
  • UseTLS e UseSTARTTLS devono avere valore YES se si intende usare il protocollo TLS.
  • mailhub specifica l'indirizzo del server smtp, comprensivo di porta, cui spedire le mail (ad esempio smtp.gmail.com:587 nel caso di gmail). È possibile definire più parametri mail hub e quindi specificare diversi server smtp, tuttavia si tenga presente che non è comunque possibile definire più di una coppia di credenziali di accesso.
  • hostname, parametro che definisce il nome host della propria macchina. Normalmente non necessita di essere modificato in quanto generato automaticamente durante l'installazione. Provare a commentarlo in caso di problemi durante l'invio delle email.
  • FromLineOverride permette di modificare il campo from di una mail con un valore arbitrario. Il valore predefinito inserito nelle mail da ssmtp coincide con nome_utente_linux@nome_host. Si Sconsiglia caldamente sia di abilitare tale opzione che mantenere il valore predefinito, in quanto entrambi i casi provocano spesso il rifiuto delle email da parte dei server smtp di società come gmail e yahoo. Vedere a tal proposito il file di configurazione /etc/sstmp/revaliases
  • AuthMethod, definisce il metodo di login. Le alternative di solito sono tra i valori LOGIN e PLAIN, tuttavia il primo risulta essere (al momento in cui si scrive) il valore più comune per i servizi come gmail e affini. Non è possibile definire più di una volta questo parametro.
  • AuthUser e AuthPass definiscono banalmente le credenziali necessarie ad autenticarsi presso il (o i) mail hub specificati. Entrambi i parametri possono essere specificati al più una volta.

Warning.png ATTENZIONE
La password dell'account di posta è in chiaro, quindi può potenzialmente essere letta da chiunque. Si consiglia pertanto di restringere i permessi di questo file almeno a 640. Si veda il prossimo paragrafo per restringre l'accesso mantenendo comunque la possibilità per gli utenti normali di inviare mail.


Restringere l'accesso a ssmtp.conf

Limitarsi a cambiare i permessi del suddetto file in 640 significa anche restringere l'utilizzo di ssmtp.conf all'utente root.
Per "salvare capra e cavoli" è sufficiente seguire la seguente procedura:

  1. # chmod 640 /etc/ssmtp/ssmtp.conf
  2. # groupadd ssmtp
  3. # chown :ssmtp /etc/ssmtp/ssmtp.conf
  4. # chown :ssmtp /usr/sbin/ssmtp
  5. # chmod g+s /usr/sbin/ssmtp

Naturalmente l'utente è libero di scegliere un qualsiasi nome per il nuovo gruppo, la scelta di chiamarlo ssmtp è del tutto arbitraria. Quello che conta è che nessun utente normale appartenga a tale gruppo.
L'ultimo comando fa si che l'eseguibile /usr/sbin/ssmtp risulti appartenere al gruppo ssmtp quando eseguito, a prescindere dall'utente che ha effettivamente lanciato tale applicativo. In tal modo l'utente continua a non poter accedere al file di configurazione, ma l'eseguibile sì.

/etc/sstmp/revaliases

Ecco un esempio generico di file di configurazione adatto a servizi gratuiti come gmail, yahoo, ecc. che supportano TLS:

# sSMTP aliases
# 
# Format:	local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:nome_account_email@dominio:indirizzo_server_smtp:587
nome_utente_linux:nome_account_email_utente@dominio:indirizzo_server_smtp:587

Il formato di ogni riga è come facilmente visibile:

nome_utente_linux : nome_account_email_utente@dominio : indirizzo_server_smtp:587

Per quanto riguarda il primo e il terzo parametro non vi è nulla da aggiungere, mentre per quanto riguarda il secondo si fa notare che tale parametro definisce il mittente (cioè il valore predefinito del campo From) delle email che si spediscono. Tale valore sostituisce quello predefinito di sistema, ma può essere a sua volta sostituito dagli utenti se in /etc/ssmtp/ssmtp.conf è stato impostato FromLineOverride=YES.
Si consiglia sempre di far coincidere l'indirizzo del mittente con quello usato per autenticarsi presso il server smtp (cioè quello specificato dal parametro AuthUser nel file /etc/ssmtp/ssmtp.conf), pena il rischio di verdersi rifiutare l'invio delle mail e anche la chiusura temporanea del suddetto account (es. gmail).

Esempi

gmail.com

/etc/ssmtp/ssmtp.conf

root=nome_account@gmail.com
UseTLS=YES
UseSTARTTLS=YES
mailhub=smtp.gmail.com:587
hostname=nome_host
AuthMethod=LOGIN
AuthUser=nome_account@gmail.com
AuthPass=password_account

/etc/ssmtp/ssmtp.conf

root:nome_account@gmail.com:smtp.gmail.com:587

Note:

  • evitare di specificare come indirizzo mittente un indirizzo diverso da quello usato per autenticarsi presso il server smtp;
  • è probabile che sia necessario abilitare l'uso di applicazioni meno sicure dalla pagina del proprio account gmail (account personale --> app e siti collegati --> consenti app meno sicure);
  • se si modifica il mittente o si specificano impostazioni che gmail mal sopporta è possibile che cercando di inviare più mail (N > 3) il proprio account gmail venga chiuso temporaneamente con richiesta di verifica attraverso l'invio di un sms sul proprio cellulare.

gmx.com

/etc/ssmtp/ssmtp.conf

root=nome_account@gmx.com
UseTLS=YES
UseSTARTTLS=YES
mailhub=mail.gmx.com:587
hostname=nome_host
AuthMethod=LOGIN
AuthUser=nome_account@gmx.com
AuthPass=password_account

/etc/ssmtp/ssmtp.conf

root:nome_account@gmx.com:mail.gmx.com:587

Note:

  • evitare di specificare come indirizzo mittente un indirizzo diverso da quello usato per autenticarsi presso il server smtp.

yahoo.it

/etc/ssmtp/ssmtp.conf

root=nome_account@yahoo.it
UseTLS=YES
UseSTARTTLS=YES
mailhub=smtp.mail.yahoo.it:587
hostname=nome_host
AuthMethod=LOGIN
AuthUser=nome_account@yahoo.it
AuthPass=password_account

/etc/ssmtp/ssmtp.conf

root:nome_account@yahoo.it:smtp.mail.yahoo.it:587

Nota, evitare di specificare come indirizzo mittente un indirizzo diverso da quello usato per autenticarsi presso il server smtp poiché altrimenti si riceve il seguente messaggio d'errore:

553 From: address not verified;<br/>
"see http://help.yahoo.com/l/us/yahoo/mail/original/manage/sendfrom-07.html"

Invio mail

Come già accennato nell'introduzione è possibile inviare mail sia usando l'eseguibile ssmtp che un qualsiasi MUA di propria scelta.

ssmtp

È possibile inviare mail sia in modo interattivo che specificando un file testuale contenente il messaggio della mail.
Si noti che ssmtp è inserito nel path degli eseguibili disponibili solo per root, gli utenti normali invece, pur potendolo eseguire, devono o aggiungere manualmente il suo percorso all'elenco che definisce dove cercare i vari eseguibili, oppure specificare ogni volta il percorso completo di ssmtp.

invio interattivo

Digitare:

$ ssmtp indirizzo_mail_destinatario@dominio

e premere "invio". Nella nuova riga digitare:

To: indirizzo_mail_destinatario@dominio

e premere "invio". Nella nuova riga digitare:

Subject: oggetto della mail

e premere "invio". Nella nuova riga scrivere il corpo del messaggio e quindi premere CTRL + D per inviare il messaggio.
In sintesi prima si inseriscono i vari campi della mail e solo per ultimo il messaggio da inviare:

  1. destinatario (To:);
  2. eventuali destinatari in copia (Cc:) uno per riga;
  3. mittente se diverso da quello predefinito e se non crea problemi come descritto sopra (From:);
  4. oggetto della mail (Subject:);
  5. corpo della mail.

invio da file testuale

La formattazione da seguire è la medesima descritta al punto precedente, ma tutti i dati devo essere inseriti in un file testuale contenente qualcosa di simile a quanto segue:

To: indirizzo destinatario
Cc: indirizzo destinatario copia 1
Cc: indirizzo destinatario copia N
Subject: oggetto della mail

Corpo della mail

Si noti che tra Subject: e corpo della mail deve NECESSARIAMENTE esserci una riga vuota.
Per inviare la mail è sufficiente digitare:

$ ssmtp indirizzo_destinatario@dominio < nome_file

Mutt

Premesso che chi scrive non ha mai provato ad usare Mutt in combinazione con ssmtp, la configurazione di questo MUA dovrebbe essere semplice.

Creare, se già non esiste, un file di nome ~/.muttrc (copiandolo per esempio da /etc/Muttrc), quindi editarlo inserendo le seguenti linee:

set sendmail="/usr/sbin/ssmtp"
set from="indirizzo_account@dominio"
set use_from=yes

Come già ripetuto in precedenza, evitare di indicare come indirizzo del mittente un indirizzo differente da quello usato per autenticarsi al server ssmtp specificato in smtp.conf (a meno di non essere assolutamente sicuri che ciò non crei problemi col proprio provider di posta).

Approfondimenti

Man pages

man ssmtp
man ssmtp.conf

Sitografia




Guida scritta da: Wtf 16:03, 11 gen 2016 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized