Gestire la posta in entrata (POP3) uscita (Qmail) in modo sicuro e senza spam
Gestire la posta in entrata (POP3) uscita (Qmail) in modo sicuro e senza spam
scritto da: teknux - teknux[AT]ustc[DOT]edu
Data: 25/11/2002 - copyleft GPL2
Ultimo aggiornamento: -
Riferimenti web: http://unixware.sf.net
1 - Introduzione
Chi usa Qmail ed ha una connessione dialup, vuol dire che probabilmente scarica
la posta tramite POP3. Per chi, poi, è abituato all'ambiente testuale è ancora
più probabile che per prelevare la posta da POP3 usi il programma fetchmail.
Purtroppo fetchmail, nonostante sia arrivato alla 5.9 (o giù di lì), non solo
ancora non supporta il formato (decisamente più sicuro) Maildir di Qmail, ma
recapita la posta tramite l'MTA (Qmail nel nostro caso). In poche parole, una
soluzione meno sicura di fetchmail non si potrebbe trovare, il rischio di
perdere la posta è relativamente alto, senza contare il rischio di buffer
overflow e altri problemi di sicurezza del programma stesso.
L'autoproclamato "hacker" Raymond ha toppato ("tutto fumo" del resto...).
Questo documento è il risultato di alcuni appunti che ho scritto mentre cercavo
di ottimizzare il mio sistema di posta. Visto che sono riuscito nel mio
intento e che la documentazione è stranamente poca riguardo la mia soluzione,
ho pensato di metterla in rete.
2 - Installazioni e configurazioni
2.1 - Requisiti e installazione
I programmi che occorrono sono:
- Getmail: http://www.qcc.sk.ca/~charlesc/software/getmail-2.0/getmail.html
- "Active Spam Killer" (ASK): http://www.paganini.net/ask
- Procmail: http://www.procmail.org
- Python: http://python.org
- Qmail: http://qmail.org - http://cr.yp.to
Gli ultimi tre programmi è facile trovarli pacchettizzati per il proprio
sistema e si presume siano già stati installati e configurati (se non lo avete
fatto troverete molta documentazione per farlo, anche in italiano). Python è
necessario perchè sia Getmail che ASK sono scritti in questo linguaggio.
Installare questi ultimi è abbastanza semplice, una volta scopattati, si entra
nella loro directory relativa e, dopo aver letto le varie note, readme e
install, basterà lanciare il comando
#python setup.py install
la procedura è identica per entrambi, non si può sbagliare :)
2.2 - Configurazioni
Di seguito illustrerò le configurazioni che ho adottato, l'importante è capire
il "meccanismo", il resto potrete personalizzarlo secondo i vostri gusti.
2.2.1 - Qmail
Dato scontato che Qmail sia "up and running", tutto quello che serve è
creare/modificare il file ~/.qmail con questa linea:
|preline /usr/bin/procmail #cambiare il percorso di procmail se diverso
questo indicherà a Qmail che tutta la posta da recapitare all'utente dovrà
prima passare per il programma procmail. Sarà anche utile creare un link da
.qmail a .qmail-default per essere certi che venga recapitata all'utente
desiderato.
ln -s ~/.qmail ~/.qmail-default
2.2.2 - Procmail
Come prima cosa ho scaricato il programma e l'ho ricompilato per accertarmi di
avere il supporto Maildir, mi è bastato modificare nella directory "src/" dei
sorgenti il file authenticate.c come segue:
#define MAILSPOOLDIR "/var/spool/mail" -> riga da modificare
#define MAILSPOOLDIR "./Maildir/" -> riga modificata :)
A compilazione terminata, anche in questo caso sarà necessario creare/modificare
il file ~/.procmailrc aggiungendo queste linee all'inizio del file:
MAILDIR=/home/UTENTE/Maildir/
:0 fW
|/usr/local/bin/ask.py #modificare il path di ASK se diverso
:0 e
/dev/null
La prima linea indica il percorso della vostra Maildir (mi raccomando lo "/"
finale, altrimenti verrà considerata come mailbox), il resto delle linee
dicono a procmail di processare la posta con il programma ASK, nel caso in cui
questo ritorni un codice di errore, allora la posta va dirottata in /dev/null.
Questa opzione non è forse molto sicura, ma ASK mantiene comunque una copia
delle mail dubbie o scartate, perciò potete stare abbastanza tranquilli, se
non vi fidate, eliminate quella linea. Se usate già procmail per latri scopi,
non ci sono problemi, l'importante è mantenere all'inizio del file quelle
regole.
2.2.3 - ASK
Dopo l'installazione, per usare ASK, bisogna lanciare il comando
/usr/local/bin/asksetup.py
che si occuperà di generare nella vostra home una directory (~/.ask/) con
alcuni file necessari al suo funzionamento e un file di configurazione
(~/.askrc). E' MOLTO IMPORTANTE che editiate questo file prima di qualsiasi
uso di ASK, eccovi alcune delle opzioni (già sufficentemente commentate nel
file stesso):
rc_mymails = vostra_mail@provider.tld #vostra mail (può essere più di una)
rc_myfullname = vostro_nome_completo
rc_mymailbox = ${HOME}/Maildir/ #directory di recapito (attenzione allo /)
rc_junkmailbox = ${HOME}/Maildir/junk #dove salvare l'eventuale spam
rc_mailkey = ASK is good #una frase da allegare alla posta in uscita
rc_md5_key = my MD5 key #una kiave SEGRETA per generare signature MD5
rc_whitelist_on_mailkey = true #recapita il messaggio se ha la nostra mailkey
#la configurazione in basso imposta le lingue, ho messo italiano e inglese
rc_confirm_langs = it, en #lingue usate per i messaggi di richiesta conferma
rc_blacklist_langs = it, en #come sopra ma per i messaggi di rifiuto
Ho messo solo le voci più importanti, ce ne sono altre presenti che potrete
impostare come preferite, molte potete lasciarle di default. Molto
interessanti sono i messaggi templates per la richiesta di conferma o per il
rifiuto dei messaggi, esitono molte lingue tra i quali l'italiano, io ho
preferito inserire l'italiano e l'inglese. I templates possono essere
personalizzati con un vostro messaggio anche se quelli presenti sono già
esplicativi di per sè.
Per quanto riguarda la configurazione delle liste, i file sono contenti di
default in ~/.ask e sono essenzialmente 3 (un quarto è temporaneo per gli
indirizzi da confermare):
- whitelist.txt: è la lista degli indirizzi da accettare
- blacklist.txt: è la lista degli indirizzi dai quali rifiutare ogni mail, non
solo ma riceveranno un messaggio poco amichevole nel caso ci inviino qualcosa.
Meglio lasciarlo bianco :)
- ignorelist.txt: è la lista degli indirizzi da ignorare, ogni mail ricevuta
da questi è come se fosse recapitata in /dev/null. Da usare con cautela, ma
è utile per quei server che spammano.
Le sintassi sono spiegate nei rispettivi file, sono abbastanza semplici da
seguire, ecco alcuni esempi:
from @dominio.tld #tutti gli indirizzi di dominio.tld sono considerati
from user@ #tutte le mail da user@QUALSIASI_DOMINIO
subject job #tutte le mail che hanno la parola job nel soggetto
to user@dominio.tld #tutte le mail con user@dominio.tld nel campo to/cc/bcc
Potete comunque usare le espressioni regolari per una maggiore granularità.
2.2.4 - Getmail
Finalmente eccoci alla ricezione dei messaggi da POP3, getmail offre la
possibilità di scaricare i messaggi da diversi POP e di recapitarli a più
utenti usando un file di configurazione in "/etc", tuttavia mi riferirò al
file che si trova nella nostra home. Bisognerà creare una directory
"~/.getmail" con un file all'interno chiamato "getmailrc". La sintassi va
scritta in questo modo:
[default]
verbose = 1
readall = 1
delete = 1
#postmaster = ~mio_login/Maildir/
postmaster = "|/usr/bin/procmail"
[account numero 1]
server = pop.provider.tld
username = nome_utente
password = "mia_password"
[account numero 2]
server = pop.provider2.tld
username = nome_utente
password = "mia_password"
La sezione "default" indica il comportamento da tenere per tutti gli account,
ma potrete applicare delle eccezioni anche singolarmente. Note particolari
vanno dette per "verbose", settato ad 1 scriverà tutti i messaggi, è utile per
monitorare quello che succede ma è un po' troppo ingombrante. La voce
"readall", forza getmail a rileggere anche le mail già lette e "delete" può
essere impostato a 0 se non volete cancellare i messaggi sul POP (mi è stato
molto utile mentre facevo le prove di questi programmi). La voce "postmaster"
indica il percorso per recapitare la posta scaricata oppure, come nel mio
caso, si può indicare un "piping" ad un altro programma, che in questo caso
sarà procmail (vedete la sua configurazione sopra). Ho lasciato commentata
l'opzione per recapitare la posta in una Maildir, potrebbe tornarvi utile nel
caso vogliate recapitare la posta di un determinato indirizzo senza farla
processare da procmail e ASK, per fare questo, basterà inserire l'opzione
"postmaster" nella sezione account che preferite. Un'ultima nota, un pochino
dolente, è che getmail non ha l'opzione di poter essere lanciato in "daemon
mode" per scaricare la posta ad intervalli regolari. Nelle FAQ di getmail,
l'autore spiega che non c'è motivo di avere una feature simile perchè esitono
comandi come cron adibiti a questo, secondo me ha ragione, tuttavia ho scritto
un piccolo script in bash per ovviare a questo incomdo.
#!/bin/sh
#Simple script to run Getmail in "daemon mode"
#author: teknux ~ teknux[AT]ustc[DOT]edu
#date: 24/11/2002
#copyleft under GPL2
#usage: getmaild.sh &
DEFAULT_TIME=600
daemon() {
if [ $# = 0 ] ; then D_TIME=$DEFAULT_TIME; fi
while [ $D_TIME != 0 ]
do
getmail -q 2>~/getmaild.log
sleep $D_TIME
done
}
usage()
{
echo "Usage: $0 (default 600s=10min)"
exit 0
}
case $1 in
-h | --help) usage ;;
*) daemon $1 ;;
esac
3 - Conclusioni
Con questi pochi strumenti siete ora in grado di ricevere la posta, smistarla
e filtrarla come preferite. Esistono anche altre soluzioni con relativi pregi
o difetti, ad esempio esistono molti progetti dedicati a scrivere regole
antispam per procmail, oppure programmi simili ad ASK (un esempio per tutti
TMDA - http://tmda.net). Personalmente ho speso un bel po' di ore a cercare la
soluzione che più si adattava alle mie esigenze (flessibilità, sicurezza e
semplicità), ho provato molte altre soluzioni ma questa che ho mostrato mi è
parsa la migliore. Gradirei commenti e consigli in proposito.
4 - Bibliografia/Webografia
- SourceForge - http://sourceforge.net (ricerca: antispam)
- ASK - http://paganini.net/ask (andate soprattutto sul forum)
- TMDA - http://tmda.net
- Qmail contribs - http://www.qmail.org/
- man qmail*
- man procmail
- Life with Qmail - http://www.lifewithqmail.org
trad. http://medialab.freaknet.org/~elibus/lwq.html
- Italian qmail HOWTO - http://www.folug.linux.it/qmail-HOWTO.html
- Procmail Documentation Project - http://pm-doc.sourceforge.net
- Procmail home page - http://procmail.org
»
- Login o registrati per inviare commenti

