Un Mail Server fatto in casa

Transcript

Un Mail Server fatto in casa
Un Mail Server fatto in casa
Avere le email su servizi pubblici è si comodo, per via del fatto che possiamo connetterci alla loro
webmail sempre e comunque, ma non è sicuro in quanto le nostre email risiedono su server di
“sconosciuti” presso i quali lavorano “sconosciuti” che hanno il potere di leggere le email altrui avendo
i diritti di amministratori.
In questo documento spiegherò come mettere in piedi un infrastruttura per ricevere posta a casa ma la
posta non arriverà direttamente al nostro server, bensì verrà spedita a Gmail ed il nostro sistema la
preleverà da li, cancellandola dal server, per renderla disponibile a casa nostra.
Ho eseguito l'installazione su un sistema Ubuntu Server, perciò penso che le istruzioni per Debian siano
simili.
Ovviamente il tutto necessita che si lasci la macchina accesa sempre, o quando se ne ha bisogno, però
attualmente ci sono delle ottime soluzioni, prima su tutte il Raspberry PI che permettono di avere un
vero e proprio computer in uno spazio ridotto, a basso costo e silenzioso.
Gli ingredienti
• Un account Dyn DNS. In realtà funzionerebbe anche inserendo l'IP a mano ma spesso i provider
telefonici applicano una tariffa maggiorata per chi richiede l'IP fisso perciò vediamo di evitare
questa inutile spesa.
• Fetchmail. Fetchmail è un programma gratuito ed open source per il reperimento delle email. In
poche parole si occupa di scaricare la posta da un server tramite i protocolli conosciuti (POP3,
IMAP etc...) e salvarla da qualche parte, tipo il nostro account su Linux oppure passarla ad un
altro programma.
• Procmail. Procmail è un altro programma gratuito ed open source che si occupa di processare la
posta, volendo la può smistare in cartelle, mandarla ad un altro indirizzo email (forwarding)
passarla ad un altro programma ancora e così via.
• Spamassassin. Lo avrete capito dal nome, spamassassin è un altro programma gratuito ed open
source che si occupa di controllare il contenuto e la provenienza delle email e, tramite varie
regole, magie ed incantesimi vari, riesce a marcare come spam la posta che lui ritiene tale
aggiungendo headers appositi alle email.
• Dovecot. Dovecot è un programma server di email (indovinate un po'? Gratuito ed open source)
che si occuperà di servirci le email. Lui si espone tramite i protocolli conosciuti, IMAP nel
nostro caso e noi potremo connetterci a lui con un client di posta e controllare la posta.
Vai con l'impasto!
Salto la parte dell'account su Dyn DNS, mettiamo che abbiate registrato un DNS chiamato
mymailserver.dyndns.org.
Procediamo ad installare i componenti. Per prima cosa installiamo fetchmail. Si può installare usando i
sistemi di pacchettizzazione delle distribuzioni Linux, ad esempio:
Debian (e derivati): sudo apt-get install fetchmail
Fedora (e derivati): sudo yum install fetchmail
Per tutti gli altri sistemi è possibile scaricare i sorgenti da http://fetchmail.info e compilarlo seguendo le
istruzioni (il classico ./configure && make && make install).
Lasceremo per ora inconfigurato fetchmail e passeremo all'installazione di Procmail. La procedura è la
stessa che per fetchmail:
Debian (e derivati): sudo apt-get install procmail
Fedora (e derivati): sudo yum install procmail
Per le altre distro potrete installare direttamente dai sorgenti scaricabili al sito http://procmail.org.
Saltiamo anche la configurazione di procmail e andiamo a installare Spam Assassin. La procedura è
identica, anche questo è disponibile nei repository ufficiali:
Debian (e derivati): sudo apt-get install spamassassin
Fedora (e derivati): sudo yum install spamassassin
La configurazione di Spam Assassin la salterò del tutto perché è talmente variegata che vi rimando alla
documentazione ufficiale e al download dei sorgenti nel caso abbiate bisogno o vogliate compilarlo da
essi all'indirizzo https://spamassassin.apache.org. Sappiate comunque che la configurazione di base fa
già un ottimo lavoro.
Per ultimo installiamo Dovecot. Anche questo disponibile sui repository ufficiali. Nel nostro caso
installeremo la versione apposita per fornire il protocollo IMAP.
Debian (e derivati): sudo apt-get install dovecot-imapd
Non utilizzando Fedora non sono riuscito a capire se esiste sui repository, per voi e per gli utilizzatori
di distro in cui non sia presente nei repository, vi rimando ai sorgenti sul sito ufficiale
http://dovecot.org/.
Abilitare su Google il prelievo in POP3
Gmail di default non supporta il download della posta tramite protocollo POP3, esso va abilitato.
Andiamo nelle impostazioni di Gmail (di solito è il tastino con l'ingranaggio in alto a destra),
selezioniamo “Settings”, clicchiamo sul tab “Forwarding and POP/IMAP”. Nella sezione “POP
Download” selezioniamo “Enable POP for all mail”. Nel caso vogliate che le email vengano cancellate
da Gmail una volta scaricate, nella sezione “When messages are accessed with POP” selezionate
“delete Gmail's copy”. Salvate e siamo a posto.
I certificati di Google
Ovviamente fetchmail storcerà il naso quando vedrà che stiamo prelevando la posta da un server di cui
non possediamo il certificato, così ora andremo a scaricare i certificati di Google in una nostra cartella
da passare poi a fetchmail. La seguente procedura la potete trovare descritta al seguente indirizzo:
http://www.andrews-corner.org/mutt.html#ssl.
Andiamo ad eseguire i seguenti comandi:
mkdir -pv $HOME/.certs
In questo modo creiamo la cartella .certs nella nostra home la quale conterrà i certificati.
cd $HOME/.certs
touch Thawte_Premium_Server_CA.pem
touch Equifax_Secure_CA.pem
Ci siamo spostati nella cartella .certs e abbiamo creato i due file .pem vuoti.
wget --no-check-certificate https://github.com/bagder/curl/raw/master/lib/mk-cabundle.pl
perl mk-ca-bundle.pl
Abbiamo scaricato un bundle perl per la creazione dei certificati. Ora che abbiamo lanciato il file perl
mk-ca-bundle.pl, esso avrà generato il file ca-bundle.crt nella cartella, questo è il pack dei certificati.
Andiamo ad aprirlo con un qualsiasi editor di testo. In questo file troverete due blocchi di codice alieno
contenuti tra le stringhe -----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----.
Il primo blocco lo troverete sotto il titolo Thawte Premium Server CA, copiatelo (comprensivo di
-----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----) dentro il file
Thawte_Premium_Server_CA.pem. Prendete il secondo blocco di codice sotto il titolo Equifax Secure
CA e copiatelo dentro il file Equifax_Secure_CA.pem.
Ora lanciamo il comando
c_rehash $HOME/.certs/
e avremo i certificati belli e pronti per l'uso dentro la cartella .certs nella nostra home.
Vai con la cottura!
Dopo aver installato questa saccocciata di roba è arrivato il momento di configurare il tutto. Partiamo
dal fondo, ovvero da Dovecot. A Dovecot basterà indicare la directory in cui salveremo la posta (per
comodità sceglieremo il formato Maildir). Personalmente ho messo la cartella su un HD secondario, se
avete uno di quei NAS che si collegano via USB3 o eSATA sarebbe ancora meglio. Perciò ammettiamo
che vogliamo salvare la posta nella cartella del nostro hard disk ausiliario /mnt/MailHD/dovecot.
Apriamo il file 10-mail.conf che troviamo nel percorso /etc/dovecot/conf.d e cerchiamo
la variabile mail_location, come valore inseriamo il nostro percorso appena scelto, la riga nel file avrà
questo aspetto:
mail_location = maildir:/mnt/MailHD/dovecot/Maildir
Sostanzialmente gli stiamo dicendo che la posta sarà memorizzata in formato maildir nella cartella
Maildir dentro la cartella che abbiamo scelto. Maildir sarà la cartella che conterrà l'architettura della
cartella della posta in arrivo. Dovecot è già pronto, se lo avete installato dai repository del vostro
sistema operativo sarà già configurato per partire all'avvio, in questo modo già vi fornisce la posta con
protocollo IMAP.
Ora andiamo a configurare procmail, ovvero il software che si occuperà di infilare la posta di Gmail
dentro a Dovecot. Creiamo un file chiamato .procmailrc dentro la home del nostro utente, il file
avrà il seguente contenuto:
PATH=/usr/bin:/usr/local/bin
MAILDIR=/mnt/MailHD/dovecot/Maildir
DEFAULT=/mnt/MailHD/dovecot/Maildir
LOGFILE=/home/user/procmail.log
DELIVER="/usr/lib/dovecot/deliver"
SHELL=/bin/sh
:0fw: spamassassin.lock
* < 256000
| spamassassin
# All mail tagged as spam (eg. with a score higher than the set
# threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
$MAILDIR/.INBOX.Spam/
:0 w
| $DELIVER
Vi spiego in breve cosa abbiamo scritto:
PATH = E' il percorso dove si trova l'eseguibile
MAILDIR = La directory madre in formato Maildir relativa alla posta
DEFAULT = E' la directory dove sarà memorizzata la posta, di solito si mette lo stesso percorso di
MAILDIR
LOGFILE = Quale sarà il file di log, vi consiglio vivamente di inserire questa variabile così nel caso ci
siano problemi potete facilmente investigarne la natura.
DELIVER = E' un eseguibile opzionale, nel nostro caso vitale, che si occuperà di fare lo store delle
email. Nel nostro caso è obbligatorio in quanto se mettessimo le email direttamente nella cartella di
Dovecot, esso non aggiornerebbe il suo indice e non riusciremmo a farci restituire le email arrivate. In
questo caso, deliver aggiorna l'indice e copia la mail nella directory Maildir.
SHELL = La shell dei comandi da utilizzare
Dopo il blocco delle variabili abbiamo le seguenti direttive.
:0fw: spamassassin.lock
* < 256000
| spamassassin
Queste tre righe passano qualsiasi mail arrivata a spamassassin che aggiungerà degli header alle email
nel caso ritenga che siano spam.
:0:
* ^X-Spam-Status: Yes
$MAILDIR/.INBOX.Spam/
Questa parte fa si che tutte le email che Spamassassin ha marcato con l'header X-Spam-Status vengano
spostate nella directory Spam.
:0 w
| $DELIVER
Quest'ultima parte passa tutte le email, processate e non, all'eseguibile deliver che si occuperà di
inserirle in Dovecot.
Passiamo ora a configurare fetchmail, che si occuperà di prelevare la posta da Gmail. Creiamo un file
dentro la home dell'utente chiamato .fetchmailrc.
Il file avrà il seguente contenuto:
set no bouncemail
set logfile /home/user/fetchmail.log
set daemon 90
poll pop.gmail.com
proto pop3
port 995
auth password
user '[email protected]' there
with password 'myPasswordOrMyGoogleApplicationsPassword'
options
nokeep
ssl
sslcertck
sslcertpath /home/user/.certs
mda "/usr/bin/procmail -f %F -d %T";
Le prime tre righe indicano semplicemente che le email errate non devono tornare al destinatario, il
percorso al file di log e che fetchmail girerà in modalità demone ogni 90 secondi.
Le righe seguenti indicano che prenderemo la posta dal server pop.gmail.com usando il protocollo
POP3 sulla porta 995 autenticandoci con la password.
Lo username sarà il nostro indirizzo Gmail, la password sarà la nostra password Gmail ma se avete
abilitato il 2-step-authentication dovrete inserire la password delle applicazioni che Google vi ha dato
al momento che avete abilitato questo sistema, potete vederla nel vostro profilo Google.
Options indica che andremo ad indicare le opzioni sotto. Nokeep indicherà che la posta non dovrà
essere conservata sul server di Google. Ssl, sslcertck e sslcertpath sarà il percorso in cui sono i
certificati di Google.
L'ultima riga invoca il Mail Delivery Agent, nel nostro caso procmail che andrà a processare ogni email
prelevata.
Il varo
Ok ora è tutto pronto, se avete installato tutto da repository dovrebbe essere tutto già in piedi e pronto a
partire al boot del sistema. Se fetchmail non dovesse partire all'avvio, potete lanciarlo con il comando:
fetchmail -d 600
l'opzione -d indica che partirà in modalità demone (non sarà huppato alla console e cose del genere) e
girerà ogni 600 secondi.
Ora dovrebbe cominciare a tirare giù la posta, ci mettera molto, ve lo dico subito. Controllate di
frequente i log di Fetchmail e Procmail per vedere se ci sono errori particolari o se procede tutto
spedito.
Apertura all'esterno e configurazione del client
Ora quello che vi rimane da fare è rendere disponibile il sistema dall'esterno. All'inizio del documento
vi ho indicato dyndns. In soldoni, DynDns rende disponibile il vostro IP esterno di casa tramite un
indirizzo umano, nel nostro caso ad esempio sarà mymailserver.dyndns.org (l'indirizzo lo scegliete al
momento dell'apertura dell'account e della crazione di un nuovo servizio DNS). Alcuni router
supportano l'account DynDns, basta inserire le credenziali e il router aggiornerà automaticamente
DynDns con l'IP del momento. Per chi non ha un router che supporta questa configurazione non c'è
problema, sono disponibili i tool di DynDns da installare sulla macchina che penseranno ad aggiornare
automaticamente l'IP, potete scaricarli a questo indirizzo: http://dyn.com/support/clients/.
Ora dovete configurare il router per esporre il servizio IMAP dall'esterno. Per fare questo vi rimando
alle istruzioni del vostro router, solo vi do un consiglio. La porta IMAP è la 143 ma non esponete
direttamente la 143, configurate il PAT/NAT in modo che la porta esterna sia ad esempio la 5421 o una
porta strana e poi rimappare internamente verso la 143.
Ora aprite il client di posta che volete usare e configurate il vostro account Gmail. Andate poi nelle
impostazioni del server della posta in arrivo e cambiate i seguenti valori:
Server: mymailserver.dyndns.org (o qualsiasi indirizzo DynDns avete scelto)
Porta: 5421 (o la porta che avete aperto dall'esterno sul router)
Sicurezza: STARTTLS
Autenticazione: password
Come username e password inserite le credenziali del vostro utente Linux.
Come server di posta in uscita SMTP utilizzate quello di Google, lasciate quindi configurato così
com'è.