Linux: gestione delle e-mail
Unix non solo è il
padre di tutti i sistemi di smistamento della posta tanto che
ancora poco tempo fa si diceva che qualunque messaggio inviato
su Internet incontrava per strada, prima o poi un server
basato su Unix, ma è anche per lunga tradizione una solida
piattaforma per la gestione della posta dal lato client. Linux,
poi, ha saputo stare al passo con i tempi e oggi si trovano
sistemi di gestione di e-Mail in grado di soddisfare qualunque
tipo di esigenza. Si parla di sistemi di gestione di e-Mail
non a caso: l'utente smaliziato è con un minimo di confidenza
con il sistema, difficilmente utilizzerà un client
configurato semplicemente per ricevere posta da una casella
Pop e inviarla tramite un server Smtp. Praticamente qualunque
distribuzione appena installata prevede un vero e proprio
server di posta perfettamente funzionante sia per l'invio sia
per la ricezione di messaggi: nella stragrande maggioranza dei
casi, se la macchina è connessa direttamente a Internet,
basta effettuare un paio di operazioni sul Dns del proprio Isp
e aggiungere utenti al sistema per avere un vero e proprio
server di posta elettronica che non avrà nulla da invidiare a
quelli presenti presso tanti piccoli Isp. Per gli utenti con
una connessione dial-up le cose si complicano leggermente, ma
bastano un paio di ritocchi alle configurazioni per ottenere
lo stesso risultato. Avere
un server interno di posta e utile in moltissime circostanze.
Prima di tutto permette di lavorare in pieno accordo con la
filosofia Unix che prevede tanti piccoli programmi
estremamente specializzati invece di programmi monolitici e
per questo più difficili da controllare; in secondo luogo
lavorare con gli standard di posta dei sistemi Unix permette
di usare non un unico client ma tutti quelli che si
desiderano, in quanto ciascuno di essi si interfaccia in modo
trasparente con il sistema di posta interno. Ultimo ma non
meno importante: esistono oggi alcuni freenet che non
prevedono la possibilità di usare un server Smtp: averne uno
proprio significa potere inviare e-Mail senza passare dalle
spesso scomode interfacce Web. Il sistema tipo dell'utente Ppp
è formato da:
-
un server Smtp,
detto anche Mta (Mail Transport Agent) che si occupa di
smistare tutta la posta, in arrivo e in ricezione (Sendmail,
Postfix, Qmail);
-
se si usano caselle
presso provider esterni: un'e-Mail checker che si occupa
di scaricare la posta presente presso le caselle Pop/Imap
dei vari provider (fetch-mail a oggi è il software di
riferimento in questo campo) e a inserirle nel sistema di
posta interno;
-
un programma per la
gestione della posta locale, detto anche Mda (Mail
Delivery Agent), che provvede a smistare la posta
arrivata, possibilmente in base a regole definite
dall'utente, quali per esempio filtri che inseriscono
direttamente i messaggi in determinate cartelle, o che
prevedono meccanismi di risposta automatica (si può
citare il classico procmail in questa categoria);
-
uno o piu client per
la lettura e scrittura di messaggi, detti anche Mua (Mail
User Agent).
Il primo passo per la
configurazione di un sistema di posta è la scelta del server
Smtp. Un buon punto di partenza può essere lo storico
Sendmail (www.sendmail.org),
oggi arrivato alla versione 8.10: questo programma è
parte integrante della storia di Internet e tra i suoi
vantaggi si può annoverare l'imbattuta flessibilità e
solidità di fronte alle situazioni più critiche. Grazie alla
sua estrema configurabilità di fatto può gestire qualunque
esigenza, dalla più semplice alla più complessa, e le
risorse su Internet relative a Sendmail
costituiscono un mare sconfinato, capace di fornire tutte le
soluzioni necessarie. Per contro Sendmail si porta dietro una
serie di difetti che ancora oggi sono difficili da risolvere:
si tratta innanzitutto di un programma monolitico, spesso e
volentieri estremamente pesante da gestire e relativamente
lento rispetto alle alternative che si possono trovare su
Internet. Inoltre Sendmail è intrinsecamente poco sicuro:
sono usciti molti buchi di sicurezza relativi a questo
sistema, e il tipo di architettura che si porta dietro fa
prevedere che altri potranno seguire in futuro. Infine
Sendmail è noto per la difficoltà nella configurazione: si
dice che nessuno può dirsi un vero sistemista Unix se non ha
dovuto avere a che fare con la scrittura di un file di
configurazione di Sendmail almeno una volta, e che parimenti
non esiste sistemista Unix che sia stato tanto pazzo da
ripetere l'esperienza: la definizione e configurazione del
file Sendmail.cf rappresenta quindi un enorme scoglio da
superare per chi non ha una più che solida esperienza di
amministrazione di sistema. Scegliere Sendmail oggi significa
scegliere un prodotto estremamente stabile e potente, in grado
di fare fronte a qualunque tipo di esigenza. Ma significa
anche farsi carico di tutti i problemi che Sendmail porta con
sé, per cui occorre prepararsi a leggere quintali di
documentazione, a seguire almeno un paio di mailing list sulla
sicurezza, e a curare giorno per giorno il sistema. D'altro
canto, se di quello che si vuole e farsi una cultura
sull'amministrazione di un sistema di posta, Sendmail
rappresenta un passo obbligato, ed è un riferimento assoluto
che non può mancare nel percorso formativo di un sistemista.
Oggi esistono alternative tecnicamente valide a Sendmail, che
mirano a risolvere le sue più grosse lacune relative alla
pesantezza e alla sicurezza del sistema. Un primo passo è
stato Qmail (www.qmail.org),
che però ha presentato alcuni gravi difetti: uno tra
tutti il sistema di sviluppo, estremamente accentrato
sull'autore (Dan Bernstein), persona sicuramente non facile e
che non è stata in grado di costruire intorno a sé una
comunità come richiesto dai principi dell'Open Source. Qmail
inoltre presenta una scelta progettuale che ha un impatto
notevole sui sistemi, in quanto non è compatibile con nessuno
dei programmi di gestione della mail, dal momento che invece
di usare il formato Mailbox utilizza il formato Maildir nella
home degli utenti. Per questo e per altri motivi Qmail quindi
sta cedendo gradualmente il passo a quello che sembra essere
il server Smtp del futuro: Postfix. Postfix presenta
innanzitutto un'enorme garanzia nella persona dell'autore.
Wietse Venema è parte integrante della storia di Unix ed è
autore di alcuni tra i software più usati su questa
piattaforma (i Tcp wrapper, o tcpd). Le performance di questo
sistema, in termini di velocità e di sicurezza, fanno
impallidire tutti gli altri server, e la flessibilità offerta
da Postfix non richiede, come Sendmail, il pagamento di un
grande prezzo in termini di difficoltà di configurazione: è
sufficiente nella stragrande maggioranza dei casi cambiare un
paio di parametri di configurazione per avere un sistema
funzionante. Postfix si può trovare precompilato praticamente
per tutte le distribuzioni, oppure in formato sorgente
direttamente da uno dei mirror di www.postfix.com.
Una volta effettuata l'installazione è sufficiente
definire nel file /etc/postfix/main.cf quale deve essere
l'indirizzo da usare nella posta in uscita e quale o quali
devono essere gli indirizzi per i quali si vuole ricevere
mail. In una contigurazione tipica per connessioni dialup,
supponendo che all'atto della configurazione di rete si sia
scelto come dominio "esempio.it" e che il proprio o
i propri indirizzi di mail siano xxx@provider.it si dovranno
cambiare i parametri "myorigin" e "mydestination",
per esempio inserendo:
myorigin =
provider.it
mydestination = provider.it localhost localhost.esempio.it
esempio.it
In questo modo Postfix
saprà che la mail in uscita dovrà essere inviata come
username@esempio.it, e che dovranno essere accettate mail
destinate a xxx@provider.it, xxx@localhost, xxx@localhost.esempio.it
e xxx@esempio.it. In aggiunta a questi parametri un utente
dialup tipico potrà volere aggiungere:
relayhost =
smtprelay.provider.it
se il provider fornisce
un servizio di Smtp server. In
questo modo tutta la mail in uscita verrà inviata al server
del provider che provvederà a consegnarla a destinazione.
Inoltre è sicuramente il caso di definire:
defer_transports =
smtp
Questo permette di non
cercare di inviare immediatamente la posta, ma di tenerla in
coda fino a quando non viene richiesto esplicitamente di
effettuare l'invio. E' sufficiente inserire il comando "sendmail
– q" in un file come /etc/ppp/ip-up per fare in modo
che la coda venga svuotata non appena si effettua il
collegamento all'Isp. Parimenti è utile definire:
disable dns lookups =
yes
in modo da impedire a
Postfix di cercare tramite Dns i dati necessari all'invio
della posta, dati che non potrebbe trovare se non quando la
connessione e attiva. Attenzione: se si è definita la keyword
relayhost insieme a disable dns lookups occorre che in
relayhost venga inserito un Ip, oppure un hostname contenuto
in /etc/hosts, in modo che Postfix sappia dove indirizzare la
posta. Postfix ovviamente presenta moltissime possibilità di
configurazione, ma queste quattro o cinque righe, unite a
quelle che sono le configurazioni standard, sono sufficienti
per quasi tutti i casi. Una volta terminata la configurazione
se Postfix è in esecuzione occorre ricordarsi di effettuare
un reload della stessa, attraverso il comando
postfix reload. Se Postfix non è in esecuzione lo si può
fare partire con il comando postfix start e verificare
attraverso i log che la configurazione sia corretta. Per
eventualmente fermare il servizio il comando sarà ovviamente
postfix stop.A questo punto si ha un sistema Smtp
perfettamente funzionante, in grado di ricevere e spedire
mail: ma chi possiede un collegamento dialup riceve mail su un
server diverso, tipicamente quello del provider, al quale si
accede tramite protocolli quali Pop o Imap: quello che manca
quindi è un sistema in grado di connettersi automaticamente
ai server di posta sui quali risiedono le caselle, prelevare
le mail presenti e smistarle al sistema di posta interno. La
soluzione di riferimento in questo momento è sicuramente
Fetchmail, un programma divenuto ormai talmente famoso da
essere incluso in praticamente in tutte le distribuzioni.
Fetchmail permette di effettuare il collegamento a tutte le
mailbox che si desiderano, di scaricare le mail tramite
protocollo Pop (versione 2 o 3) o Imap e di spedirle
attraverso il server Smtp locale agli utenti finali. La
configurazione di Fetchmail è semplice e può basarsi su un
file comune (tipicamente /etc/fetchmailrc) o su una serie di
file presenti nelle home degli utenti (con il nome .fetchmailrc).
Il file comune presenta alcuni vantaggi, soprattutto in quanto
permette di automatizzare l'intera procedura: le regole
contenute nei vari file .fetchmailrc vengono lette solo quando
ciascun utente utilizza Fetchmail, mentre quando Fetchmail
viene lanciato dall'amministratore di sistema quello che viene
solitamente usato è il file di configurazione generico. Il
formato del file è semplice. Ciascuna casella viene prefissa
dalla parola chiave "poll" o "skip": una
casella marcata come "poll" viene controllata in
automatico alla partenza di Fetchmail, mentre una casella
marcata come "skip" è solo configurata, ma non
viene controllata in automatico: occorre specificare
esplicitamente il nome della casella sulla linea di comando
per fare in modo che i messaggi vengano scaricati. Questo può
essere utile per esempio per effettuare i test, oppure quando
si vuole che una determinata casella venga controllata solo se
esplicitamente richiesto. Per ogni casella vanno poi
specificati il server sul quale la casella risiede, il tipo di
protocollo, la coppia di username e password necessaria per
collegarsi al server e lo username locale al quale inviare la
posta. Assumendo quindi che la mail destinata a utente@provider.it
vada scaricata collegandosi mediante protocollo Pop3 al server
pop.provider.it con username "utente" e password
"test" e quindi consegnata all'utente localuser
presente sul proprio server Linux, la riga di configurazione
in /etc/fetchmailrc sarà:
poll pop.provider.it
protocol POP3 user utente password test is localuser
Una volta terminata la
configurazione di tutte le caselle da controllare si potrà
lanciare a mano Fetchmail con le opzioni "-a"
(controlla tutte le caselle) "–keep" (lascia i
messaggi sul server, da tenere per la fase di test) e "-vv"
(in modo da controllare se le operazioni vengono effettuate
nel modo giusto). Se tutto va bene il passo successivo sarà
quello della automatizzazione delle operazioni, facendo in
modo che la posta venga controllata durante ciascun
collegamento. Per fare questo sarà sufficiente inserire il
comando "fetchmail" direttamente nello script /etc/ppp/ip-up,
che viene eseguito non appena il collegamento all'Isp è
effettivo e funzionante. Se si fanno dei collegamenti lunghi
se può essere il caso di controllare la mail più volte
durante gli stessi. Per fare questo si possono immaginare più
sistemi: per esempio si potrebbe creare uno script che
controlli la mail ogni cinque minuti; tale script andrebbe
fatto partire in corrispondenza del collegamento all'Isp e
dovrebbe rimanere in esecuzione per tutto il tempo in cui si
è collegati e non oltre. Occorre quindi pensare a un
meccanismo che fermi il processo in corrispondenza della
sconnessione: per raggiungere questo risultato è sufficiente
registrare Pid (numero di processo) dello script che effettua
il controllo della mail ed effettuare un kill dello stesso
all'interno del file che viene lanciato una volta effettuata
la sconnessione. In pratica lo script di controllo della mail
sarà qualcosa del tipo:
#!/bin/sh
# Registra il PID del
processo
# (contenuto nella variabile $$)
# in un file
echo $$ > /var/run/chekmail.pid
# Esegui un ciclo
infinito
while true
do
#
Ricevi la posta
fetchmail -a -vv >
/var/log/fetchmail.log
# Attendi 5 minuti (300 secondi)
sleep 300
done
A questo punto,
supponendo che lo script venga salvato come /usr/local/bin/checkmail
(ricordandosi di permettere l'esecuzione dello stesso con un
opportuno chmod 755), nel file il /etc/ppp/ip-up andrà
inserita la riga:
/usr/local/bin/checkmail
&
Parimenti, nel file /etc/ppp/ip-down
andrà inserita una riga del tipo
kill -9 ‘cat /var/run/checkmail.pid‘
che provvederà a fare
terminare il processo in esecuzione. Quello che si ha a questo
punto è un sistema di posta perfettamente funzionante, in
grado di ricevere e spedire mail in maniera trasparente ed
efficiente. Un ulteriore perfezionamento può essere
l'aggiunta di meccanismi di delivery locale intelligenti, in
grado di effettuare operazioni di filtraggio delle mail.