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/ -->newogni 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:
-->cur
-->tmp
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
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.
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).
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 faqDaemontools 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.
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.
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..
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
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 smtpanche in questo caso riavviate xinetd inviandogli il segnale HUP.
{
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
}
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 pop3anche per xinetd inviate un segnale HUP al processo da riavviare.
{
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
}
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....