Avanti Indietro Indice


2.1. Installazione

Prima di procedere all'installazione assicuratevi di avere tutto il software necessario: scaricate qmail, checkpassword, ucspi-tcp e daemontools. Potete trovare i relativi URL nella sezione Links

Iniziamo ad installare qmail, scompattiamolo
(x installazione su Debian GNU/Linux leggete la sezione 4.2)

# cd /usr/src
# gunzip qmail-1.03.tar.gz
# tar xvf qmail-1.03.tar
# cd qmail-1.03

creiamo la sua home directory, di default viene utilizzata /var/qmail, nel caso vogliate cambiarla editate il file conf-qmail sostituendo a /var/qmail la directory da voi scelta, ricordatevi di eseguire questo passaggio per tutti i programmi che installerete (perche' si aspetteranno di trovarlo in /var/qmail)

# mkdir /var/qmail

Create gli utenti non privilegiati con i quali verranno avviati i processi,  questo passo e' NECESSARIO per il funzionamento di qmail ed e' molto importante per la sua sicurezza

# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails

se i comani useradd e groupadd non ci sono nel vostro sistema unix editate INSTALL.alias e guardate la parte relativa al vostro sistema operativo

Ora compiliamo qmail

# make setup check

NOTA: se state utilizzando Red Hat 9.0 o una distribuzione Linux che utilizzi le glibc 2.3.1 leggete questa FAQ.

questo compilera' e lo installera' nel vostro sistema, nel caso vi dia  errore controllate bene l'output e installate cio' che vi manca seguendo la sezione faq di questo documento

Ora settate i file di configurazione per il vostro dominio con il comando

# ./config

Questo comando prende il nome del dominio dal vostro server dns, nel caso quest'ultimo non sia configurato bene o non sia presente il comando config uscira' con errore, notate bene che non viene controllato l' /etc/hosts  quindi e' importante che il vostro server dns sia correttamente funzionate.
Nel caso abbiate problemi in questa procedura forzate il riconoscimento del dominio attraverso il comando

# ./config-fast vostrodominio.suf                         (es:#./config-fast linux.it)

Al termine di questa procedura i vostri file di configurazione per dominio e relaying saranno impostati per il votro sistema.

Ora create gli alias primari necessari per tutti i server smtp, al posto di "davide" sostituite il nome di un account valido al quale volete venga inoltrata tutta la posta destinata all'amministratore di sistema.

#cd ~alias
#echo davide >.qmail-root
#echo davide >.qmail-postmaster
#echo davide >.qmail-mailer-daemon

piu' avanti descrivero' meglio la gestione degli alias.
Bene, ora dobbiamo scegliere il metodo in cui verranno tenuti i messaggi ricevuti dal server, i due metodi possibili sono:

Mailbox:
Questo e' il metodo classico di unix, tutti i messaggi vengono accodati in un unico file per ogni utente,  il file e' /var/spool/mail/nomeutente.
Uno dei difetti di questo metodo e' che se dovessero sorgere problemi alla  porzione di filesystem /var/spool/mail tutte le caselle degli utenti verrebbero compromesse, a questo qmail pone rimedio utilizzando un metodo mailbox modificato mantenendo il file in /home/utente/Mailbox.

Maildir:
E' il metodo preferito da qmail ed e' l'unico supportato dal server pop3 di default per qmail-pop3d, tutti i messaggi vengono tenuti in 3 directory differenti

/home/nomeutente/Maildir/ -->new
-->cur
-->tmp
ogni e-mail risiede in un proprio file separato all'interno di una di queste directory (es: le mail appena arrivate verranno messe in new) I vantaggi di questo metodo sono molteplici:

1) la sicurezza di non perdere nessun messaggio, infatti con mailbox se il sistema si bloccasse durante la spedizione di una mail tale messaggio verrebbe troncato e risulterebbero come due diversi causandone la perdita, ancora peggio se a causa di un messaggio troncato l'mbox file si "corrompe" pregiudicando i successivi messaggi.

2) siccome non c'e' un unico file di posta per tutti i messaggi relativi ad un utente ma uno per ogni singola e-mail il sistema esegue il lock di un solo file per volta aggevolando di molto l'uso di NFS per condividere le mailbox tra piu' sistemi.
Probabilmente per il momento non vi interessa nfs ma quando questo sistema di gestione e-mail diventera' vitale per la vostra azienda vi troverete a scegliere sistemi di clustering o condivisioni di dischi di massa tra server che fanno largo uso di NFS, codafs, afs ... in quel momento ringrazierete voi stessi per aver fatto questa scelta.

3) il server pop3 consigliato per qmail, qmail-pop3d, supporta solo maildir. E' un ottimo server POP3 e considerato lo stato attuale dei comuni programmi di questo tipo (per quanto riguarda la sicurezza) vi consiglio di puntare su questo pop3d.

Il mio consiglio e' di usare Mailbox solo in caso abbiate bisogno di applicazioni particolari che non supportano questo metodo, nella mia esperienza con qmail ho sempre trovato il programma equivalente in formato maildir, eccovi gli URL di alcuni programmi molto usati:

Getmail, Fetchmail per formato maildir
http://www.qcc.sk.ca/~charlesc/software/getmail/
Maildrop, Procmail per maildir
http://www.flounder.net/~mrsam/maildrop/

Dopo aver scelto tra maildir e mailbox configuriamo i file di startup di qmail a seconda del sistema della nostra scelta

#cp /var/qmail/boot/home /var/qmail/rc
#vi /var/qmail/rc

se abbiamo scelto Maildir sosituiamo "./Mailbox" con "./Maildir/" se invece abbiamo sceldo mailbox  lasciamo "./Mailbox"

nel caso abbiate scelto maildir create la direcory delle mail con questo comando

$ /var/qmail/bin/maildirmake $HOME/Maildir

se invece avete scelto mailbox basta eseguire un link tra /home/Mailbox usato da qmail e il file di spooling classico di unix /var/spool/mail/nomeutente

$ ln -s $HOME/Mailbox /var/spool/mail/`whoami`

Per adesso vi basta creare la maildir/mailbox solo per un utente di prova, se avete la necessita' di crearla per tutti gli utenti usate gli script qui' sotto che automatizzeranno il tutto
Per maildir (con creazione della Maildir in /etc/skel per creare in automatico la maildir per i nuovi utenti che verranno creati in futuro):

--- cut here ---
#!/bin/sh
/var/qmail/bin/maildirmake /etc/skel/Maildir
for utente in `ls /home`
do
/var/qmail/bin/maildirmake /home/$utente/Maildir
chown -R $utente:users /home/$utente/Maildir
done
--- cut here ---

Per mailbox:

--- cut here ---
#!/bin/sh
for utente in `ls /home`
do
ln -s /home/$utente/Mailbox /var/spool/mail/$utente
chown $utente:users $utente/Mailbox
--- cut here ---

qmail e' equipaggiato con la propria documentazione man, per indicare al sistema di cercare anche in /var/qmail/man la documentazione eseguiamo il comando qui' sotto e aggiungiamolo all' /etc/profile

export MANPATH=$MANPATH:/var/qmail/man

2.2 Test

Potete iniziare a testare il funzionamento di qmail avviandolo

$ csh -cf '/var/qmail/rc &'

questo non interferira' con sendmail quindi per adesso non sara' necessario disabilitarlo (se presente).
Appena avviato controlliamo il log    /var/log/mail.log   per la presenza di una riga del tipo

    qmail: status: local 0/10 remote 0/20

se invece notate un " cannot start qmail non e' riuscito a partire, in questo caso consultate la sezione Faq.

Proviamo subito ad inviarci una mail con il comando

$ echo to: davide | /var/qmail/bin/qmail-inject                       (sostituite a davide il vostro utente)

questo inviera' una mail vuota a noi stessi, controllate subito in /home/utente/Maildir/new  (o /home/utente/Mailbox) se la e-mail e' stata consegnata correttamente, nel caso usiate maildir noterete un nuovo file nella directory new mentre se usate mailbox troverete il messaggio accodato nel file della posta; fin da adesso prendete la buona abitudine di controllare il file di log per assicurarvi del corretto funzionamento o, in caso contrario, avere maggiori dettagli sull'errore, ecco cosa conterra' il log in caso di successo:

   qmail: new msg 53
   qmail: info msg 53: bytes 246 from <me@domain>qp 20345 uid 666
   qmail: starting delivery 1: msg 53 to local me@domain
   qmail: status: local 1/10 remote 0/20
   qmail: delivery 1: success: did_1+0+0/
   qmail: status: local 0/10 remote 0/20
   qmail: end msg 53

Sel il passaggio sopra e' andato a buon fine simuliamo l'invio di e-mail ad un indirizzo non esistente

$ echo to: nonexistent | /var/qmail/bin/qmail-inject

Dovreste notare nel log un messaggio simile:

   qmail: starting delivery 2: msg 53 to local nonexistent@domain
   qmail: status: local 1/10 remote 0/20
   qmail: delivery 2: failure: No_such_address.__#5.1.1_/
   qmail: status: local 0/10 remote 0/20

Potremmo fare tanti altri test ma in genere se queste prove hanno dato esito positivo tutto dovrebbe funzionare per il meglio.

Ora qmail e' installato, nei prossimi paragrafi procederemo alla cancellazione di sendmail e all'installazione dei pacchetti checkpassword, ucspi-tcp e daemontools molto utili (soprattutto ucspi-tcp e' praticamente indispensabile) per il nostro server di posta.

2.3 Rimuovere sendmail

Nella maggiorparte dei sistemi unix e nei sistemi linux installati in modalita' server sendmail viene installato di default, siccome state leggendo questo documento vuol dire che avete scelto qmail e volete rimuovere sendmail in modo che non interferisca con il nostro server di posta.
Se invece state usando sendmail e volete passare a qmail mantenendo le impostazioni e senza che gli utenti se ne accorgano leggete la pagina sul passaggio sendmail ->qmail di Djb
http://pobox.com/~djb/qmail/sendmail.html
troverete molto utili i programmi dot-foward e fastfoward che permettono di convertire i file .foward e gli alias in /etc/alias.

Bene, iniziamo killando il demone sendmail

# killall sendmail

ed evitiamo il suo avvio ad ogni riavvio del sistema togliendolo dagli script di avvio. Ogni sistema unix ha il proprio direttorio specifico per gli script di avvio, per identificare la directory del vostro sistema eseguite il comando:

# grep sendmail /etc/*/*

Una volta indentificato lo script cancellatelo o commentate, all'interno di esso, le righe per l'avvio di sendmail.
NOTA x Linux: per disabilitare l'avvio di qmail su sistemi Linux potete usare:
Red Hat (e distrubizioni derivate): # setup poi "system services", deselzionate "sendmail"
Debian: rm /etc/rc2.d/*sendmail; rm /etc/rc3.d/*sendmail
FINE NOTA
Rimuoviamo il bit di setuid dai binari di sendmail per evitare eventuali problemi di sicurezza.

# chmod 0 /usr/lib/sendmail
# chmod 0 /usr/sbin/sendmail
# chmod 0 /usr/lib/sendmail.mx

spostiamo i binari di sendmail

# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

qmail mette a disposizione dei wrapper che simulano il comportamento di sendmail, questo perche' molti programmi (tripwire,pine ecc)fanno uso di sendmail e il wrapper ne permette il funzionamento rendendo gli eseguibili di sendmail dei "link con adattamento dell'input" (che definizione orribile:)  a qmail

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

quest'ultimo passaggio andra' eseguito anche se non avete installato sendmail (per il motivo sopra descritto).

2.4 Ucspi-tcp

Questo programma contiene l'utility tcpserver, tcpserver e' un applicazione client-server che attende le connessioni in entrata al server, e per ogni connessione avvia un programma di nostra scelta (qmail-smtpd) utilizzando alcune variabili di ambiente come l'indirizzo ip del client che ha originato la connessione e la porta.
qmail puo' essere lanciato facilmente anche da inetd o xinetd ma tcpserver e' stato scritto specificatamente per qmail e ci permette di specificare alcune opzioni che gli altri superserver non ci danno:
- tcpserver ci permette di settare il limite massimo di connessioni contemporanee al servizio ignorando quelle in eccedenza e continuando a servire le altre (mentre inetd semplicemente disabilita il servizio). Offre un sistema di controllo ip simile al tcp-wrapper host.deny e host.allow ma piu' veloce perche' la "lista degli ip" viene compilata in un minidatabase in formato cdb, cosi' possiamo gestire velocemente centinaia di host (questa opzione ci tornera' utile per gestire il relaying).

# gunzip ucspi-tcp-0.84.tar.gz
# tar xvf ucspi-tcp-0.84.tar
# cd ucspi-tcp-0.84

Per compilarlo basta eseguire

# make

e installarlo con

# make setup check.

NOTA: se il make esce con un errore del tipo "dns.o(.text+0x4a3): undefined reference to '__res_search'" leggete questa faq

2.5 Daemontools

Daemontools e' una collezione di utility per gestire e monitorare servizi, in questo documento non spiegherò l'avvio di qmail con daemontools perchè non è *necessario* al suo funzionamento. Se volete avviare qmail con daemontools leggete l'ottimo daemontools and qmail italian howto di Ivan Fabris.
Tra i vari programmi che daemontools mette a disposizione notiamo:

supervise: lancia un servizio e lo riattiva nel caso il demone muoia
multilog: salva i log in uno o piu' file, mantiene i file di una certa dimensione
e li routa se al superano

# gunzip daemontools-0.61.tar.gz
# tar xvf daemontools-0.61.tar
# cd daemontools-0.61
# make
# make setup check.

NOTA: se il make esce con un errore del tipo "tai64nlocal.c:58: dereferencing pointer to incomplete type" leggete questa faq

2.6 Checkpassword

Il pacchetto principale qmail-1.03 ci fornisce, tra le altre cose, il demone pop3 qmail-pop3d e qmail-popup per richiedere username e password, ma non ci fornisce alcun programma che si interfacci con il file delle password di unix /etc/passwd e /etc/shadow, questo compito e' svolto da checkpassword che si interfaccia con tali file e ci autentica a seguito dell'inserimento di username/password corretti

# gunzip checkpassword-0.81.tar.gz
# tar xvf checkpassword-0.81.tar
# cd checkpassword-0.81
# make
# make setup check.

2.7 Relaying

Questo non e' un programma ma un concetto che e' importante chiarire prima di configurare e gestire qualunque server di posta.
Quando un utente invia una e-mail attraverso il server di posta del proprio provider, il suo mail client non fa altro che collegarsi a tale server (o ad un server intermedio), invargli i campi HELO,FROM,TO e il testo del messaggio, a questo punto il server accetta l' e-mail e si occupa di recapitarla al destinatario.
Il relaying e' proprio questo: quando un server di posta accetta di consegnare un messaggio che non sia indirizzato ad un utente locale. Il nostro scopo e' consentire il relaying agli utenti della rete interna (o chi ne deve usfruire) e negarlo a tutti gli altri in modo che gli utenti non autorizzati possano inviare email *solo* ad utenti locali.
Se non tenessimo in considerazione questo problema rischieremo di diventare un "open relay" permettendo a tutti di usare il nostro sistema per mandare e-mail e diventando facile preda di spammer.
Se gestiamo una rete il metodo spesso usato per gestire il relaying e' abilitarlo per un intervallo di indirizzi ip o un'intera sottorete.
Se volete abilitarlo anche ad utenti dialup si puo' concedere l'uso del server previa autenticazione pop3, in pratica prima di mandare e-mail dovranno almeno    una volta controllarla, in questo modo dovranno fornire una password (quindi siamo "sicuri" che sia un utente autorizzato).
Un metodo molto usato dai provider e' abilitarlo solo agli utenti che abbiano l'hostname "proveniente" da tale provider, praticamente prima di abilitarci il provider esegue un nslookup inverso verso il nostro indirizzo ip ricevendo cosi' il nostro hostname, se il nostro hostname e' composto da quello del provider vuol dire che siamo connessi ad internet tramite loro e quindi saremo abilitati.
Nella sezione successiva vedremo anche come configurare il relaying per una rete interna..

2.8 Configurazione

Ovvero: mettiamo insieme i programmi installati fino ad ora e configuriamo il tutto.

qmail di default disabilita totalmente il relaying consentendo di inviare e-mail solo agli utenti del dominio stesso, ora configuriamo il relaying abilitandolo per gli utenti della nostra rete interna, creiamo il file     /etc/tcp.smtp  in questa forma

indirizzo_ip_dei_client:allow,RELAYCLIENT=""

es: per abilitarlo a tutta la rete interna della classe 192.168.0.x

192.168.0.:allow,RELAYCLIENT=""

creiamo il file cdb con il comando

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp </etc/tcp.smtp
# chmod 644 /etc/tcp.smtp*

cosi' relaying e' a posto.

qmail, come la maggiorparte dei servizi di rete, puo' essere attivato e reso disponibile alla rete in due modi: inetd o standalone daemon.
Come descritto nella sezione ucspi-tcp e' consigliabile lanciarlo come demone con l'ausilio dell'utility tcpserver, quindi create uno script che venga eseguito ad ogni boot del sistema oppure aggiungete le seguenti righe ai file di startup (oppure create un nuovo file in /etc/init.d/):

csh -cf '/var/qmail/rc &'
QMAILUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
/usr/local/bin/tcpserver -H -R -lhostname.domain -x /etc/tcp.smtp.cdb -u$QMAILUID -g$NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd &  >/dev/null 2>/dev/null

NOTA:attenzione a fare il copia/incolla delle righe sopra, alcuni caratteri potrebbero venire incollati non correttamente.
NOTA x BSD: se usate un sistema unix *BSD con la shell csh, i comandi da usare per esportare le variabili QMAILUID e NOFILESGID sono:
setenv QMAILUID `id -u qmaild`
setenv NOFILESGID `id -g qmaild`
FINE Nota.
NOTA x Sun Solaris: al posto di "id" scrivete "/usr/xpg4/bin/id". FINE NOTA

Ricordatevi di sostituire a hostname.domain il vostro dominio.
lanciate questi quattro comandi e, se avete seguito tutti i passaggi fino ad ora descritti, il vostro server di posta sara' completamente funzionante!
possiamo subito provare a mandare una posta con il nostro mail client per verificarne il funzionamento.

Se invece volete avviarlo tramite inetd modificate il file
/etc/inetd.conf aggiungendo la seguente riga:

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

poi fate rileggere la configurazione all'inetd con un bel

# kill -HUP "inetd_pid"

Se invece volete utilizzare xinetd per avviare qmail, aggiungete queste righe al file /etc/xinetd.conf:

service smtp
{
disable = no
flags = NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = qmaild
server = /usr/sbin/tcpd
server_args = /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
}
anche in questo caso riavviate xinetd inviandogli il segnale HUP.

Il server smtp e' a posto, ora occupiamoci del pop3, se avete scelto come server qmail-pop3d continuate a leggere mentre se avete optato per un'altro server saltate questa sezione.
Consiglio di avviare anche qmail-pop3d tramite tcpserver, per fare cio' aggiungiamo allo script di startup descritto sopra la seguente linea:

tcpserver -v -H -lhostname.domain -R 0 pop3 /var/qmail/bin/qmail-popup hostname.domain /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger  pop3d &

se preferite usare inetd aggiungete la seguente linea al file /etc/inetd.conf

pop3   stream  tcp     nowait  root    /var/qmail/bin/qmail-popup qmail-popup hostname.domain /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 

per rendere effettive le modifiche all'inetd eseguite un
#kill -HUP inetd_pid

se invece utilizzate xinetd aggiungete queste righe a xinetd.conf:

service pop3
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /var/qmail/bin/qmail-popup
server_args = hostname.domain /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
log_type = FILE /var/log/xinetd.log
log_on_success = HOST
log_on_failure = HOST RECORD
}

anche per xinetd inviate un segnale HUP al processo da riavviare.
naturalmente in entrambi i comandi sostuite a hostname.domain sostituite il vostro reale domain name.
 

Ora anche il server pop3 e' funzionante! potete usare il vostro mail client per controllare la posta e verificarne il funzionamento, ricordatevi di inserire lo username e la password valida per gli account del vostro sistema.

Per le prime volte che controllate/inviate la posta e quando ricevete un errore ricordatevi di controllare i log per ricevere maggiori dettagli sull'errore, normalmente i log del sistema mail vengono tenuti in
/var/log/mail.log
in altri sistemi il syslogd potrebbe essere configurato per mettere tutto in
/var/log/syslog

Il nostro server di posta e' completo e funzionante, nei prossimi paragrafi descrivero' alcune funzioni "avanzate": interfacciamento con antivirus, vpopmail, misure antispam, gestione degli alias ecc....


Avanti Indietro Indice