Avanti Indietro Indice


3.1 Alias e dot qmail

Quando il server riceve una e-mail controlla prima se il destinatario e' presente tra gli utenti di sistema, se non lo trova cerca l'utente nei file dot qmail:
i file .qmail (dot qmail) si possono trovare nella home directory dell'utente stesso o nella home directory dell'utente "alias" (/var/qmail/alias).
Ad esempio se vogliamo creare l'alias ciccio_di_nonna_papera@pluto.it per l'utente ciccio@pluto.it non dobbiamo fare altro che eseguire il comando

# echo "ciccio" > ~alias/.qmail-ciccio_di_nonna_papera

in questo modo tutta la posta inviata a ciccio_di_nonna_papera@pluto.it verra' inoltrata all'utente ciccio; inserendo piu' nomi utenti dentro il file .qmail-nome la posta verra' inoltrata a tutti gli utenti della lista creando una sorta di indirizzo di gruppo. NOTA: se volete creare un alias con il carattere "." leggete la sezione FAQ.
I file dot-qmail sono utilizzati da "qmail-local" ogni volta che deve essere consegnata una email per il sistema locale e possono contenere i seguenti comandi:

| /usr/bin/myprog

tutto cio' che segue il "|" viene eseguito dalla shell "sh", in questo caso viene avviato lo script /usr/bin/myprog.

&pippo@pluto.com

Il simbolo "&" indica "inoltro", quindi all'indirizzo email specificato dopo tale simbolo vengono inoltrate tutte le email destinate all'indirizzo del file .qmail .

/home/davide/Maildir/

Una linea che inizia con "/" e finisce con "/" indica di consegnare la posta in formato Maildir nella directory specificata.

/home/davide/mailbox

Questa riga, simile alla precendente, non termina con il carattere "/" e quindi specifica che le mail devono essere consegnate nel formato mailbox.
Per ulteriori informazioni consultate la manpage dot-qmail.
 

3.2 Script di avvio

Risulta molto utile creare uno script per attivare, disattivare e riavviare qmail con un semplice comando.
Se vi interessa copiate lo script quì sotto all'interno del file /etc/init.d/qmail:

----
#!/bin/sh
# script di avvio per qmail
#
PATH=/usr/local/bin:/var/qmail/bin:$PATH

[ -f /var/qmail/bin/qmail-smtpd ] || exit 0

RETVAL=0
prog="qmail"
hostname=`hostname`

start() {
# Start daemons.
echo -n $"Starting $prog: "

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
csh -cf '/var/qmail/rc &'
/usr/local/bin/tcpserver -H -R -x /etc/tcp.smtp.cdb -u$QMAILDUID -g$NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd & >/dev/null 2>&1
/usr/local/bin/tcpserver -v -H -R 0 pop3 /var/qmail/bin/qmail-popup $hostname /bin/checkpassword /var/qmail/bin/qmail-pop3d \ Maildir 2>&1 | /var/qmail/bin/splogger pop3d &

echo -n "qmail " RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/svscan
return $RETVAL
}

stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killall qmail-send
killall /usr/local/bin/tcpserver
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/svscan
return $RETVAL
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac

exit $RETVAL
----

# chmod root:root /etc/init.d/qmail

3.3 Vpopmail

by Angelo Conflitti - mvca (at) yahoo.com

v.0.8, del 13 Marzo 2002.

Se avete seguito l'installazione di qmail-pop3d+checkpassword sopra descritta vi sarete accorti che ogni utente pop3 deve avere un valido account nel sistema, spesso l'accesso via shell non è necessario quindi si usa creare degli utenti virtuali che abbiano accesso solamente al pop3 evitando problemi di sicurezza che potrebbero sorgere dando accesso in shell,ftp... ad utenti che non lo necessitano, vpopmail è molto utile proprio per questo scopo.
Vpopmail è un programma creato dalla inter7, rilasciato sotto la licenza GNU/GPL, che ci permette di aggiungere a qmail le seguenti caratteristiche:

   -  gestire, più comodamente, utenti/domini virtuali
   -  assegnazione quote di spazio e-mail
   -  possibilita' di relaying previa autenticazione pop3 e/o lookup inverso
   -  interfacciabilita' con database MySQL,PostgreSQL,Informix e Oracle.

Potete scaricare vpopmail all'indirizzo http://www.inter7.com/vpopmail.
Ora passiamo all'installazione di vpopmail, per ogni dubbio ricordatevi di cunsultare la documentazione in linea di vpopmail stesso.

Per prima cosa è necessario aggiungere un nuovo gruppo (vchkpw) ed un nuovo utente (vpopmail).
C'è una raccomandazione citata nel documento di installazione presente al link http://www.inter7.com/vpopmail/INSTALL: utilizzare sia per il gruppo che per l'utente l'id 89.
Quindi:

# groupadd -g 89 vchkpw
# useradd -g vchkpw -d /home/vpopmail -u 89 vpopmail

Nella distribuzione Mandrake 8.1 (e non so se per altre ancora), l'uid 89 e il gid 89 sono assegnati ad altro utente e gruppo. In questo caso le vie sono due:

Prima di continuare con l'installazione del vpopmail è necessario avere il pacchetto compilato di ucspi-tcp. Normalmente l'operazione viene svolta subito dopo l'installazione del qmail (capitolo 2 "Installazione e Configurazione". Nel nostro caso ipotizziamo di aver scompattato il file ucspi-tcp-x.xx.tar.gz (dove x.xx è la versione) nella directory /usr/src e di avere già il codice compilato.
Una volta prelevato il file vpopmail-x.x.x.tar.gz (dove x.x.x è la versione del pacchetto) scompattiamolo:
# cd /usr/src
# tar -xvzf [directory_dove_è_il_sorgente_compattato/]vpopmail-x.x.x.tar.gz

Durante l'operazione verrà creata una directory /usr/src/vpopmail-x.x.x contenente i file sorgenti di vpopmail.

Proseguiamo entrando nella directory appena creata:
# cd /usr/src/vpopmail-x.x.x

Le opzioni selezionabili sono numerose, in questo documento configureremo soltanto il roaming e l'hardquota.


Il roaming è attivabile con l'opzione --enable-roaming-users e serve per includere la regola che solo dopo un'autenticazione in POP3 è possibile inviare dei messaggi di posta attraverso il server SMTP ad utenti di posta di dominio diversi da quelli gestiti all'interno del nostro server.
L'hardquota è attivabile con l'opzione --enable-defaultquota e serve per definire un limite di default massimo in occupazione di spazio e per numero di e-mail per ogni account di posta (di default il limite è disabilitato).
Aggiungiamo poi, per il corretto funzionamento, due parametri: --enable-ucspi-dir che indica dove è contenuto il pacchetto compilato di ucspi-tcp e --enable-tcpserver-file che indica dove il file di relay "tcp.smtp" verrà memorizzato.

Quindi volendo abilitare il roaming e volendo fissare un default massimo per ogni account di posta di 5MBytes di spazio o 1000 messaggi di posta, eseguiamo per la configurazione:

# ./configure --enable-roaming-users=y --enable-defaultquota=5000000S,1000C --enable-ucspi-dir=../ucspi-tcp-0.88 --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp

per la compilazione:

# make

ed infine per l'installazione (con i diritti di amministratore):

# make install-strip

Durante l'installazione verranno create varie directory, contenenti vari files, in /home/vpopmail.

Modifichiamo (o creiamo se non esiste) il file /home/vpopmail/etc/tcp.smtp editandolo con un editor o inserendo al prompt questo comando:

# echo ':allow' > /home/vpopmail/etc/tcp.smtp

Poi aggiungiamo nel crontab di root (utilizzando il comando crontab -e) la riga:

40 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null


Il clearopensmtp è un eseguibile che pulisce dall'archivio /home/vpopmail/etc/open-smtp gli indirizzi IP degli hosts che non si collegano al server POP3 da più di 3 ore (il valore di default di 3 ore può essere modificato in configurazione con l'opzione --enable-relay-clear-minutes=valore_in_minuti) e ricrea il database /home/vpopmail/etc/tcp.smtp.cdb

Eseguiamo:

# /home/vpopmail/bin/clearopensmtp

Attenzione a non lanciare il comando "tcprules" per la creazione del database /home/vpopmail/etc/tcp.smtp.cdb poichè, se creato con permessi particolari, clearopensmtp non sarà in grado di aggiornarlo (vedi http://bluedot.net/mail/archive/read.php?f=2&i=3430&t=3417)

A questo punto possiamo creare il primo dominio virtuale con il comando vadddomain, l'operazione comporta la creazione automatica dell'account di amministratore chiamato "postmaster".
Eseguiamo:

# cd /home/vpopmail/bin
# ./vadddomain nome_dominio_virtuale
   (esempio: ./vadddomain test.com)
oppure
# ./vadddomain nome_dominio_virtuale password_del_postamaster
   (esempio: ./vadddomain test.com qwerty12)

Nella prima forma il programma chiederà la password e la conferma password per l'utente postmaster, nella seconda forma la password viene digitata come parametro sulla linea di comando.

Per mettere in esecuzione il nuovo dominio è necessario inviare il segnale di kill -HUP al processo qmail-send per comandare la rilettura dei file di configurazione:

# kill -HUP [pid_qmail-send]

Dopo il dominio possiamo inserire un nuovo utente di posta:

# cd /home/vpopmail/bin
# ./vadduser nome_utente@nome_dominio_virtuale
   (esempio: ./vadduser pippo@test.com)
oppure
# ./vadduser nome_utente@nome_dominio_virtuale password_utente_di_posta
   (esempio: ./vadduser pippo@test.com zxc32)

Anche qui la password può essere digitata alla richiesta del programma (prima forma) oppure come parametro sulla linea di comando (seconda forma).
L'inserimento comporterà la creazione di una sottodirectory, avente il nome dell'utente di posta, sotto /home/vpopmail/domains/nome_dominio_virtuale (esempio: per l'utente pippo@test.com verrà creata la sottodirectory /home/vpopmail/domains/test.com/pippo/ ). All'interno di tale sottodirectory verranno gestiti i messaggi di posta dell'utente.

Per la cancellazione di un utente di posta è necessario digitare:

# cd /home/vpopmail/bin
#./vdeluser nome_utente@nome_dominio_virtuale
   (esempio: ./vdeluser pippo@test.com)

Per la cancellazione di un dominio virtuale:

# cd /home/vpopmail/bin
#./vdeldomain nome_dominio_virtuale
   (esempio: ./vdeldomain test.com)

Per il cambio password di un account di posta:

# cd /home/vpopmail/bin
#./vpasswd nome_utente@nome_dominio_virtuale
   (esempio: ./vpasswd pippo@test.com)
oppure
#./vpasswd nome_utente@nome_dominio_virtuale password_utente_di_posta
   (esempio: ./vpasswd pippo@test.com rKjh45)

Per abilitare l'uso di vchpw è necessario modificare lo script di avvio di qmail, seguite le istruzioni a seconda del metodo di avvio in precedenza scelto:

1) utilizzando "tcpserver" (consigliato)

# /usr/local/bin/tcpserver -v -H -l<nome_vostro_dominio> -R 0 pop3 /var/qmail/bin/qmail-popup <nome_vostro_dominio> /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
   (dove nome_vostro_dominio è il nome della macchina dove risiede il server di posta)

2) utilizzando "inetd"

modificare la riga relativa al servizio pop3 nel file /etc/inetd.conf scrivendo:

pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup nome_vostro_dominio /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir

ed inviare il segnale di kill -HUP al processo "inetd"

3) utilizzando "xinetd"

creare o modificare il file /etc/xinetd.d/ipop3 in questo modo:
service pop3
{
        disable		= no
        socket_type	= stream
        protocol	= tcp
        wait		= no
        user		= root
        server		= /var/qmail/bin/qmail-popup
        server_args	= nome_vostro_dominio /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir
        log_type	= FILE /var/log/xinetd.log
        log_on_success	= HOST
        log_on_failure	= HOST RECORD
}

ed inviare il segnale di kill -USR2 al processo "xinetd".

Ringraziamenti.
Oltre a tutti coloro che si impegnano per lo sviluppo del Qmail e del vpopmail, devo ringraziare coloro che si prodigano per la stesura dei documenti di installazione e configurazione, e coloro che raccolgono i commenti nelle liste di discussione.
In particolar modo devo molto a Davide Giunchi che, oltre ad aver scritto il prezioso "ITALIAN QMAIL HOWTO", ha sopportato fino ad ora le mie richieste di aiuto (...sperando ne sopporti ancora :-) .

3.4 Anti spam

Lo spam e' una piaga di internet, ogni persona che utilizzi l'e-mail e' stata almeno una volta bersaglio di questo sistema di pubblicita' invadente e fastidioso, come amministratori del server di posta possiamo adottare alcune misure per eliminare, o almeno limitare, lo spam ricevuto dai nostri utenti ed evitare che loro stessi lo generino:

1) Attivate l'alias  abuse@host.dominio  che punti al vostro indirizzo o a quello dell'amministratore, spesso quando si riceve spam la prima cosa che si fa e' segnalarlo all'amministratore del server dal quale proviene, e l'indirizzo che si usa per questo scopo e' proprio abuse.
Se ricevete una segnalazione a questo indirizzo che un utente del vostro sistema ha fatto dello spamming informate subito l'utente che tale comportamento non e' ammesso, nel caso non risponda o non collabori cancellategli l'account.

2) Usare Realtime Black List (RBL), questo sistema fa in modo che ogni volta che riceviamo una mail il server controlli se l'indirizzo e-mail o ip del mittente e' contenuto nella lista degli spammer, tale lista e' in realta' un database che, grazie alle segnalazioni degli utenti, mantiene una lista di domini, indirizzi ip e indirizzi e-mail che praticano o incoraggiano lo spamming.
Dan J Berstein, il creatore di qmail, ha creato il programma rblsmtpd che usato assieme a tcpserver si occupa di controllare il database RBL per ogni mail ricevuta, per installarlo eseguiamo i soliti comandi

# gunzip rblsmtpd-0.70.tar.gz
# tar xvf rblsmtpd-0.70.tar
# cd rblsmtpd
# make
# make setup check

ora basta modificare il comando di avvio di qmail-smtpd in questo modo

/usr/local/bin/tcpserver -H -R -x /etc/tcp.smtp.cdb -u$QMAILUID -g$NOFILESGID 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd &  >/dev/null 2>/dev/null

come vedete abbiamo semplicemente aggiunto il comando rblsmtpd che controllera' nel database RBL.

3) Riportate tutto lo spam che ricevete, fatelo inoltrando lo spam all'indirizzo abuse del server dello spammer, oppure usate le facility che alcuni siti, creati proprio per combattere lo spam, mettono a disposizione:
http://www.abuse.net o http://spamcop.net
L'importante e' che non cancelliate l'e-mail e non la lasciate per piu' di due giorni nella vostra mailbox senza riportarla, ricordatevi anche di includere tutti gli header nel riportare la mail-spam all'amministratore.

4) Istruite i vostri utenti su come riconoscere, evitare e combattere lo spam, non c'e' lista nera o programma efficace quanto un utente che conosca il problema e sappia come rispondere (un po' come per i virus).
Gli spammer fanno leva proprio sul fatto che l'utente utente medio non ha le conoscenze o la voglia per rispondere nel modo giusto a tale abuso e spesso si limita a cancellare il messaggio.
 

3.5 Imap

Internet Message Access Protocol v4 e' un protocollo che permette ad un client di gestire la posta direttamente nel server, tutte le email (comprese quelle scaricate) sono mantenute nel server imap ed ogni client ci accede come se fossero locali, in questo modo le e-mail possono essere manipolate indifferentemente dal vostro computer in ufficio, il pc casalingo, il portatile ecc... rimanendo sempre sincronizzate e senza bisogno di trasferire ogni volta la posta tra un pc e l'altro.
L'abilita' di imap di accedere ai messaggi (sia quelli nuovi che salvati) da piu' di un computer e' molto utile anche se, in alcune situazioni, non puo' sostituire il Pop3 che funziona meglio per un computer unico e per leggere la posta offline (quindi viene adottato dalla maggiorparte dei provider).
Per qmail in modalita' Maildir e' disponibile il server imap "Courier imap", mentre se la posta e' tenuta in mailbox non fa alcuna differenza tra i server
imap (courier imap e' cmq buono). Courier Imap e' mantenuto dalla Inter7 e disponibile in licenza GNU/GPL presso il sito www.inter7.com.
Per maggiori informazioni sul protocollo imap consultate l'rfc2060.
 

3.6 File control

I file control sono file di configurazione che si trovano in /var/qmail/control  attraverso i quali e' possibile configurare buona parte del comportamento di qmail.
I file control basilari vengono creati automaticamente in fase di installazione con il comando './config-fast host.dom' quindi, in genere, non ci sarà bisogno di occuparsi di questi file se non per implementare funzioni aggiuntive.
In questo paragrafo descrivero' i file control di maggiore utilizzo, per tutti gli altri consultate la man page 'qmail-control'.


- me : questo e' l'unico file control assulutamente necessario al funzionamento di qmail. Contiene l'hostname del server e viene usato per come stringa nel il comando HELO per identificarsi ad altri server, per identificarsi durante la connessione di altri server verso il proprio e identifica il dominio locale primario.
- locals : contiene la lista degli host per i quali il nostro server riceve le mail.
- rcpthosts : contiene la lista degli host o del dominio abilitati al relaying, se la variabile ambientale RELAYCLIENT è settata qmail-smtpd ignorerà rcpthosts utilizzando al suo posto questa variabile.
- virtualdomains : elenca gli utenti o i domini virtuali. Un utente virtuale ha la sintassi del tipo "utente@dominio:prefisso", quando qmail-send vede una mail per utente@dominio riscrive tale indirizzo in prefisso-utente@dominio e lo considera come un utente locale.
- smtproutes : tabella di routing per l'invio di email. Ogni route è identificata nella forma "dominio:relay", quando l'host di destinazione dell'email coincide con "dominio", il nostro server smtp si connette all'host "relay".

3.7 DMZ e mailhub

Al giorno d'oggi la costruzione di DeMilitarized Zone stà diventando sempre più comune visto l'alto grado di sicurezza che questa architettura di rete riesce ad offrire, praticamente si tratta di chiudere il/i server internet aziendale dietro ad un firewall, questo firewall permette l'accesso al server internet dall'interno della rete, ma nega tutto il traffico dal server internet verso l'interno della rete.
In questo modo un attacker che riuscisse a penetrare nel server internet non riuscirebbe ad entrare nella LAN interna, limitando fortemente i danni che un'intrusione potrebbe causare; in aggiunta a questo nel server internet vengono tenuti solo i dati strettamente necessari (pagina web, server ftp ecc...) mentre i dati sensibili vengono mantenuti in un server all'interno del firewall.
Nel nostro caso specifico di un server di posta, il server interno manterrà tutte le mailbox degli utenti locali e gestirà la spedizioni di email interne alla rete, mentre per le email verso l'esterno la inoltrerebbe al server internet, che quindi servirà solo per spedire e ricevere email da e verso internet (le email ricevute dal server internet verranno poi scaricate dal server interno); la sicurezza stà proprio nel mantenere me email interne, private ed importanti in una macchina "inaccessibile" da eventuali aggressioni esterne.
Se vi interessa attuare questa soluzione, dopo aver proceduto alla creazione di una DMZ (leggete il Net3-HOWTO e altri documenti), avete due scelte:
1 - Installare qmail su entrambi i server 2 - Installare qmail sul server internet.
La seconda soluzione viene spesso adottata da chi deve/vuole usare un server di posta diverso nella rete interna (spesso Exchange a causa degli utenti Outlook-dipendenti) e vuole mettere un server di posta sicuro nell' "interfaccia esterna" della propria rete; io personalmente consiglio la prima opzione per l'elevata affidabilità e gestibilità, in tutte le situazioni, di qmail.
Vediamo ora come procedere tecnicamente nei due casi:

1) Installate i due server normalmente, avendo cura di creare gli stessi utenti sia sul server interno che su quello esterno, per dare ad ogni utente il proprio indirizzo email valido su internet (a meno che non lo si voglia rendere invisibile da internet, in questo caso non create l'account sul server esterno), ed eseguite il seguente comando sul server interno:

# echo ":indirizzo_ip_server_internet" > /var/qmail/control/smtproutes
Il file control smtproutes ha questa sintassi:
<dominio>:<indirizzo_ip>

Questo file serve ad indicare che se una email ha come destinatario un utente dell'host <dominio> deve essere inoltrata al server <indirizzo_ip> ; nel nostro caso non specificando alcun dominio indichamo "tutti i domini tranne quello locale" riuscendo nel nostro scopo cioè far passare al server internet dietro al firweall tutto le mail verso l'esterno.
In fine per fare in modo che ogni tot di tempo il server interno scarichi la posta internet dal server esterno, installate e configurate "getmail" eseguendolo da crontab ogni 5 minuti (naturalmente indicando come server di posta il server esterno).

2) In questo caso le operazioni da eseguire sul server qmail sono molto poche, limitatevi ad installarlo normalmente e a creare gli utenti; mentre sul server di posta interno dovrete settarlo in modo inoltri al server esterno tutto il traffico internet e che scarichi la posta ogni tot di tempo.

3.8 Connessioni dial up

qmail viene spesso usato sia come server di posta per server internet con connessioni permanenti su linee dedicate, che come server di posta personale o per piccole aziende su classiche, e piu' economiche, connessioni intermittenti tipiche dei collegamenti modem punto-punto ad un provider (dialup).
Per rispondere efficacemente a queste esigenze il server di posta deve avere la capacità di inviare (e ricevere) la posta verso gli utenti internet a determinati orari e solo quando la connessione dialup è attiva, pur mantenendo immediato l'invio agli utenti locali.
Utilizzando qmail ci viene in aiuto il programma "serialmail" che aggevola l'uso di questo server su linee seriali con connessioni dialup, iniziamo subito ad installarlo seguendo la classica procedura:

# gunzip serialmail-0.75.tar.gz
# tar xvf serialmail-0.75.tar
# cd serialmail-0.75
# make
# make setup check

ora creiamo la maildir "pppdir" nella quale verranno accodati tutte le email destinate ad utenti esterni (cioè non locali)

# maildirmake ~alias/pppdir
# chown -R alias ~alias/pppdir

creiamo l'alias "ppp-default" al quale saranno inoltrate le email verso l'esterno e che saranno poi inserite nella Maildir /var/qmail/alias/pppdir

# echo "./pppdir/" > ~alias/.qmail-ppp-default

indichiamo a qmail-send di inviare all'utente ppp tutte le email non locali

# echo ":alias-ppp" >> /var/qmail/control/virtualdomains

il file virtualdomains ha questa sintassi: "dominio:prefisso_da_aggiungere". Ad esempio con un virtualdomains del tipo "pippo.com:alias-ppp" una email inviata a pluto@pippo.com verrebbe riscritta indicando come destinatario "alias-ppp-pluto@pippo.com".
Nel nostro caso non specificando nulla nel capo prima di ":" indichiamo che -tutte le email non destinate ad utenti locali- vengano indirizzate a "alias-ppp-utenteesterno@hostname", avendo noi creato l'alias "ppp-default" tutte le email destinate a "*ppp*@hostname" saranno prese dall'utente "ppp" che le accoderà nell'appostida Maildir.
Una volta collegati a internet lanciamo il comando per inviare la posta accodata:

# /usr/local/bin/serialmail/maildirsmtp ~alias/pppdir alias-ppp- server_di_posta_del_provider hostname

la sintassi di questo comando e': maildirsmtp <directory> <suffisso_da_togliere> <server_di_posta_esterno> <helohost>
- directory: Maildir dove sono accodate le mail da inviare
- suffisso_da_togliere: suffisso che in precedenza è stato aggiunto (per essere accodato nella pppdir) e che ora verrà tolto
- server_di_posta_esterno: server di posta SMTP del provider
- helohost: stringa che verrà usata nel comando HELO con il server di posta del provider (possiamo usare l'hostname del nostro pc).

Per fare in modo che ad ogni connessione ppp venga inviata la posta accodata basta inserire il comando sopra nel file /etc/ppp/ip-up.
Spesso i server locali con connessioni in dialup o i pc casalinghi sono configurati (in genere si configura con il comando ./config in fase di installazione) con domini non esistenti o non esatti, per fare in modo che venga cambiato il campo "From" delle email inviate verso l'esterno usate il programma qmail-masq.
Per scaricare la posta da account remoti su altri server ed accodarla nelle Maildir locali potete usare il programma getmail.

3.9 Antivirus

Sempre piu' spesso le reti interne aziendali sono composte da un server unix (a volte purtroppo NT) e tanti client windows di svariati tipi, in questo ambiente uno dei compiti piu' comuni di unix e' di file server con Samba e Mail server, per questi due servizi in particolare puo' risultare utile l'uso di un antivirus unix.
L'antivirus non e' importante per unix, dove i virus praticamente non esistono, ma per proteggere i fragili client windows eseguendo periodicamente una scansione della condivisione unix usata come file server, mentre per quanto riguarda il server di posta tutte le mail ricevute verrebbero scansionate con l'antivirus che verificherebbe l' assenza da virus (eseguibili, vbs&c).
Per quanto riguarda il mail server, prima ci serve un programma che si interfacci con l'MTA e metta a disposizione dell'antivirus i dati da analizzare e poi l'antivirus stesso, per qmail la prima parte e' svolta dai programmi  AMaVIS o Qmail-Scanner. L'antivirus è un discorso a parte, questi sono (quasi) tutti commerciali, potete trovare una lista degli antivirus per unix nell'ottima FAQ consultabile all'indirizzo http://www.openantivirus.org .
Naturalmente questa soluzione comporta un maggiore carico da parte del server, che dovrà avviare una sessione del programma antivirus per ogni email e scansionare la mail stessa con eventuale attachment.
Se volete qualcosa di più leggero potete utilizzare un "sanitizer" (vedi Anomy Mail sanitizer alla sezione link) che blocca le email potenzialmente pericolose in base a vari criteri, ad esempio una email con un .vbs in allegato viene subito bloccata per la pericolosità stessa dei .vbs .
Nel paragrafo seguente spiegherò come interfacciare qmail con un antivirus attraverso Amavis.

- Amavis:

by Andrea Barbaglia - andreabarb (at) tin.it

Amavis-perl-11 e' un programma in Perl che si interfaccia alla coda di qmail (e di altri MTA) e viene lanciato ogni volta che una mail transita nel sistema sia in entrata che in uscita. Quando una mail transita Amavis si attiva e lancia l'antivirus sulla mail stessa e sui suoi allegati; in presenza di virus, la mail viene messa in quarantena in una particolare directory e sia il mittente che postmaster vengono avvisati dell'accaduto.
Installazione:
Amavis e' *solo* uno script perl, non ha un antivirus "incorporato" quindi bisogna procurarsi un antivirus supportato da amavis. In questo How-to descrivero' l'installazione con l'antivirus McAfee Virus Scan, per altri antivirus la procedura differirà solo per l'installazione dello stesso, potete ottenere la lista degli antivirus supportati da amavis nella sua homepage www.amavis.org.
Ok, cominciamo a procurarci il necessario.
Prima di tutto scaricate il tar.gz di amavis-perl e installare un antivirus; per quanto riguarda McAfee l'installazione e' molto semplice, infatti basta lanciare lo script "install-uvscan " e scegliere le directory di default.
Per testarlo basta lanciare il comando:

# uvscan --version
Virus Scan for Linux v4.14.0
Copyright (c) 1992-2001 Networks Associates Technology Inc. All rights reserved.
(408) 988-3832 LICENSED COPY - Jan 18 2001
Scan engine v4.1.40 for Linux.
Virus data file v4175 created Dec 05 2001
Scanning for 59317 viruses, trojans and variants.

Se il vostro output e' simile a quello qui sopra il vostro antivirus dovrebbe essere stato installato correttamente. Ora creiamo un file di test per l'antivirus:

# vi EICAR.COM
e copiamoci dentro questa riga

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

salviamo il file e proviamo l'antivirus:

# uvscan EICAR.COM
/usr/local/src/amavis/amavis-perl-11/tests/EICAR.COM
Found: EICAR test file NOT a virus.

Se questi due test sono andati a buon fine l'antivirus e' a posto.

Prima di iniziare la compilazione di amavis, dobbiamo procurarci i moduli necessari al suo funzionamento, quindi puntate il vostro browser su search.cpan.org e nella sezione modules cercate e scaricate i seguenti moduli:

Archive-Tar
Archive-Zip
Compress-Zlib
Convert-TNEF
Convert-UUlib
IO-stringy
MIME-Base64
MIME-tools
MailTools
Syslog
TimeDate

Solo per ordine, consiglio di scompattare i moduli in una directory in /usr/src/modules.
Ora, per la felicita' di chi ama solo i binari, dobbiamo compilarci uno ad uno tutti i moduli appena scaricati!!! State tranquilli l'operazione risulta semplice e veloce infatti per ogni modulo (c'e' comunque un README per ogni modulo) bastera' dare i comandi:

# perl Makefile.PL
# make
# make test (opzionale ma raccomandato)
# make install

Se make vi da un errore, probabilmente il modulo che state compilando dipende da un modulo che non avete ancora compilato (indicato nell'errore), quindi compilate e installate il modulo necessario e riprendete l'installazione del modulo che vi dava l'errore.
Finita l'installazione dei moduli vi rimane da installare in /usr/local/bin il programma arc, il quale e' un utility di archiviazione che deriva dal dos ed e' necessaria al funzionamento di amavis, potete scaricarlo all'indirizzo http://sources.isc.org/archiver/arc-5.21.tar.gz. decomprimetelo nella solita /usr/src, entrate nella directory arc521 ed eseguite "make", dopodichè copiate l'eseguibile "arc" appena creato in /usr/local/bin.
Ora dovremmo avere tutto il necessario per amavis.
Scompattiamo amavis-perl-11.tar.gz in /usr/src:

# cd /usr/src
# gunzip amavis-perl-11.tar.gz
# tar xvf amavis-perl-11.tar

e compiliamo il programma:

# ./configure --prefix=/usr/local --with-runtime-dir=/var/local/amavis --enable-syslog --with-syslog-level=mail.info --with-virusdir=/var/local/virusmails
# make

Ora make avra' creato lo script in perl vero e prorio.
Copiamo amavis in /usr/local/sbin e diamogli i permessi per essere eseguito da qmail:

# cp amavis /usr/local/sbin
# chown qmailq.qmail /usr/local/sbin/amavis

Adesso fermate qmail (/etc/init.d/qmail stop), assicuratevi che non ci siano altri processi attivi e portatevi nella directory /var/qmail/bin. Rinominate qmail-queue in qmail-queue-real e linkate amavis in /var/qmail/bin/qmail-queue:

# /etc/init.d/qmail stop
# ps auxwww|grep qmail (se ci sono processi attivi killateli con kill -9 nomeprocesso)
# cd /var/qmail/bin
# mv qmail-queue qmail-queue-real
# ln -s /usr/local/sbin/amavis qmail-queue (se non funziona con il link usate cp)

Creiamo l'alias "virusalert", che punti preferibilimente all'amministratore, a cui verrà inviata una copia dell'email che notifica il virus trovato:

# echo "utente_amministratore" > ~alias/.qmail-virusalert

In fine settiamo il valore di ulimit all'inizio del file di avvio di qmail, ulimit serve per fissare il limite di utilizzo di CPU e Memoria in modo da prevenire attacchi Denial Of Service es: mandando un allegato troppo grande in modo che tutta la cpu venga utilizzata per scansionarlo da virus:
(inserite questa riga all'inizio dello script di avvio di qmail)
ulimit -v 32768

Ok, abbiamo finito; facciamo ripartire qmail e testiamo il tutto:

# /etc/init.d/qmail start

Per testare provaimo a mandare una mail anche da console ad uno user esistente e controlliamo i log:

# echo pippo|mailx -i user@mydomain.xxx
Se nel log vedete una riga (oltre a quelle standar di qmail) come questa, allora e tutto ok.

...
# Dec 14 14:52:13 fw amavis[15894]: starting. amavis perl-11 Tue Apr 17 18:15:07 CEST 2001
# Dec 14 14:52:14 fw amavis[15894]: do_exit:399 - ending execution with 0
# Dec 14 14:52:14 fw qmail: 1008337934.410583 new msg 61336
...
(seguono i normali log di qmail)
Infine provate a mandare una mail con in allegato il file EICAR.COM e controllate che la mail venga messa in quarantena in /var/local/virusmails e che venga recapitata una mail di allarme sia al mittente sia a postmaster.
Ora abbiamo finito, se aggiornerete regolarmente il file dat sul vostro server di posta, non dovreste avere problemi di "infezioni" e potrete dormire sonni tranquilli.
Per aggiornare l'antivirus, basta scaricarsi al sito della nai il tar del file dat e scompattarlo dentro /usr/local/uvscan/ il link dove potete trovare il dat e' ftp://ftp.nai.com/pub/antivirus/datfiles/4.x/dat-DATVERSIONEW.tar

3.10 Funzionamento smtp, pop3 e crypto info

Descrivo brevemente il funzionamento dei protocolli smtp e pop3, e' sempre utile sapere come funzionano e ci aiutera' a configurare qualsiasi client di posta elettronica.

  - SMTP:

Ogni volta che inviate una e-mail con il vostro client di posta preferito questo non fa altro che collegarsi alla porta 25 del server, inviare alcuni comandi e il testo del messaggio, potete simularne il funzionamento collegandovi manualmente al server con il comando

$ telnet indirizzo_del_server 25
Trying 127.0.0.1...
Connected to duke.
Escape character is '^]'.
220 dukestation.it ESMTP

qui' il server si indentifica, qmail non si identifica con il proprio nome (come ad esempio fa sendmail che specifica anche la versione) ma come un generico ESMTP, da adesso quindi possiamo iniziare ad inviare comandi al server di posta.

HELO pippo.com

con il comando helo ci identifichiamo, puo' essere interpretato come "hello i'm pippo.com"

MAIL FROM:<pluto@pippo.com>

questo comando serve per iniziare la comunicazione e indicare l'indirizzo del mittente, se tale campo viene accettato il server risponde con "250 ok"

RCPT TO:<miky@mouse.com>

il terzo passo serve ad indicare il "foward path" cioe' il destinatario del nostro messaggio, anche qui' se il server accetta risponde con "250 ok"

DATA

se il server risponde a questo comando con "354 go ahead" possiamo iniziare a scrivere il  vero e proprio messaggio con gli header Date, Subject, To, Cc, From ... e il testo, quando abbiamo finito concludiamo il messaggio con una riga vuota e un "." all'inizio della riga, se il server ci risponde con "250 ok" vuol dire che tutta la procedura e' andata a buon fine e il server si occupera' di recapitare il messaggio.
Possiamo chiudere la connessione con il comando

QUIT

Potete notare come i dati necessari per inviare una mail siano molto pochi, quindi per impostare un qualsiasi mail client per l'invio (e per adesso solo per l'invio) basta indicare l'indirizzo del server di posta SMTP e il nostro indirizzo di e-mail che verra'usato nell'helo e nel mail from.
Notate anche come tutti questi dati non richiedano alcuna "autenticazione" quindi non c'e' alcuna sicurezza che il mittente di un'e-mail sia proprio la persona indicata oppure che la data di invio sia quella, l'indirizzo del mittente .... si puo' avere certezza solo con la firma elettronica  (come con PGP/GPG).

Spesso quando qualcuno riceve dello spam si sente dire "ho ricevuto dello spam e non era nemmeno indirizzato a me" questo e' un trucchetto che usano gli spammer, in RCPT TO indicano il nostro indirizzo e dentro "data" mettono To: indirizzo@falso.com   cosi' il nostro mail client indichera' come destinatario indirizzo@falso.com  mentre quello reale sara' indicato nel campo RCPT TO visualizzabile richiedendo i dettagli su tale mail (in ogni mail client che si rispetti c'e' il modo per visualizzarli, in genere nel menu' View poi Header si sceglie "all").

  - POP3:

Anche qui' ogni volta che controllate la posta il vostro mail client si collega alla porta 110 del server pop3 del vostro provider e con alcuni comandi scarica la posta, potete simularne il funzionamento con il comando

$ telnet indirizzo_del_server 110
Trying 127.0.0.1...
Connected to duke.
Escape character is '^]'.
+OK <600.977834344@dukestation.it>

in questa sezione la maggiorparte dei server pop3 si identificano, qmail-pop3d invece (rispettando la politica di qmail che non da'dettagli su se' stesso) si limita ad indicarci l'id che viene assegnato alla nostra connessione.

USER pippo

ecco uno dei due comandi per indicare il nostro account formato da username e password, in questo comando specifico indichiamo il nostro nome utente.

PASS pluto

con PASS indichiamo la password, se username e password sono corretti il server ci rispondera' con "+OK"

LIST
+OK
1 273
.

Ora con LIST viene visualizzata la lista dei messaggi presenti nella nostra mailbox, in questo caso e'presente solo un messaggio indicato con il numero 1

RETR 1
+OK
Return-Path: <pippo@pluto.it>
Delivered-To: davide@dukestation.it
Received: (qmail 489 invoked from network); 26 Dec 2000 11:59:00 -0000
Received: from unknown (HELO pippo.com) (127.0.0.1)
by 127.0.0.1 with SMTP; 26 Dec 2000 11:59:00 -0000
prova123

.

retr ci permette di visualizzare i messaggi, senza argomenti vengono visualizzati tutti i messaggi mentre se specifichiamo un numero ci viene mostrato solo il messaggio selezionato.
 

QUIT
+OK

Dopo aver letto la posta possiamo uscire con il comando QUIT.

Anche da questo possiamo notare come per impostare un qualsiasi mail client per ricevere la posta basti indicargli l'indirizzo del server pop3 e il nostro   username e password.
I dati che ho indicato in questa sezione sono fondamentali per l'impostazione di ogni client, tutti gli altri variano da programma a programma e non sono   necessari al fine del funzionamento.

Eseguendo la procedura di scaricamento della posta dal pop3 salta subito all' occhio come username e password vengano inviati senza protezione o criptazione, qualunque sniffer che si riesca ad interporre nella comunicazione tra noi e il mail server non avrebbe alcuna difficolta' a scoprire la nostra password e leggere la nostra e-mail.
Il protocollo pop3, come la maggiorparte dei protocolli che si appoggiano al TCP/IP, e'stato creato parecchio tempo fa quando veniva usato in reti interne universitarie dove la sicurezza era assicurata da un rapporto di fiducia tra gli utenti, tale protocollo e'ora il piu' diffuso in tutto il mondo per la posta elettronica e, in tale ambito, diventa molto importante la sicurezza delle comunicazioni.
Per questo sono state sviulppate modifiche/aggiunte al protocollo, i metodi piu' diffusi sono APOP e SSL:

  APOP:

Vediamo subito un esempio di connessione ad un server pop3 con APOP

$ telnet localhost 110
Trying 127.0.0.1...
Connected to duke.
Escape character is '^]'.
+OK <367.977853857@dukestation.it>
APOP pippo c4c9334bac560ecc979e58001b3e22fb
+OK maildrop has 1 message (369 octets)

E' importante che il server di posta risponda subito alla nostra connessione con una stringa del tipo  +OK <PID.DATE@host.domain>    come scritto tale stringa e' composta da tre numeri che contraddistinguono il PID del processo che si e' creato a seguito della nostra connessione, seguito da un punto vediamo la data in decimale e  il nome host con il domain, sia il server che il client si annotano tale stringa (che sara'diversa per ogni connessione).
Poi viene il comando vero e proprio per autenticarsi: APOP username md5_di_password_e_stringa come vedete si specifica lo username piu' un "digest", tale digest e' formato dall'hash crittografico in md5 (quello che si ottiene con il comando md5sum) della stringa presentata a prompt dal server piu' la password, il risultato e' una stringa crittografata ogni volta diversa e non riconducibile alla password, quindi anche sniffando la connessione non si verrebbe a conoscenza dalla password.

  SSL:

SSL e' un protollo per l'autenticazione e la criptazione delle comunicazioni on-line molto usato nei siti di e-commerce per la trasmissione di numeri di carte di credito o altri dati sensibili.
Si tratta di un algoritmo basato chiavi pubblico/private, la chiave pubblica e' disponibile a tutti e viene utilizzata dai client per criptare i dati da inviare al server, mentre la chiave privata e' segreta ed e' usata dal server per firmare elettronicamente (autenticare) le transazioni.
In questo modo si ottiene una criptazione dei dati che varia tra 64 e 128 bit a seconda del tipo di chiave; assume pero' una grande importanza la famosa "terza parte fidata" ossia una Certification Authority che si occupa di firmare le nostre transazioni per certificare che il server con cui stiamo comunicando sia proprio il server che dichiara di essere senza possibilita' di frodi.
Tale procollo e' maggiormente usato nelle connessioni http (che diventano https) ma si puo' applicare anche a smtp,pop3,ftp ... in questo caso si fanno passare i protocolli attraverso dei wrapper (a volte si modificano proprio i protocolli) che si occupano di criptare i nostri dati, allora si parla di SMTPs che risiedera' sulla porta 465 e POP3s sulla 995.
Naturalmente e' necessario che il client di posta supporti SSL, e sarebbe importante (ma non necessario) che il nostro certificato sia firmato da una CA, i certificati rilasciati dalle CA hanno durata annuale e costano abbastanza, consiglio quindi di usare questo metodo solo se siete gia' in possesso un certificato firmato utilizzato per e-commerce, mentre per tutti gli altri casi e' meglio usare APOP.
Se volete utilizare ssl con qmail per i protocolli smtp,pop3 e imap, scaricate il programma "stunnel" che funziona da wrapper ssl, si tratta quindi di creare un certificato e configurare stunnel perche' lo usi correttamente, a questo punto basta modificare le linee di startup di qmail-smtpd e qmail-pop3d per farli passare attraverso a tale wrapper.

Maggiori dettagli sul funzionamento di questi protocolli potete trovarli
negli rfc 821 (smtp) e 1939 (pop3).


Avanti Indietro Indice