Qmail può essere installato tramite pacchetti o compilando i sorgenti, in entrambi i casi la procedura è generalmente più laboriosa di quella necessaria per altri sistemi di posta dal momento che raramente questo software, dal momento su si basa su un ambiente non standard, è fornito di default sulle distribuzioni Linux.
Esistono siti non ufficiali che forniscono pacchetti precompilati per Qmail. fra cui:
Qmail Toaster - Con RPM ragionevolmente aggiornati per Mandrake/RedHat/Fedora e i file .spec che ricrearsi gli RPM sul propro sistema.
Untroubled - Software e pacchetti
Pape Debian Packages - Pacchetti DEB precompilati per Qmail e altri software di DJB, non sono fra quelli ufficiali di Debian (in cui si trova il pacchetto dei sorgenti qmail-src nel ramo stable).
Oltre alla installazione, soprattutto se fatta compilando i sorgenti, si devono eseguire una serie di operazioni manuali, si deve gestire l'interazione con i daemontools (con altri software di DJB, come ucspi-tcp) e si deve prevedere l'applicazione di variegate patch per funzionalità o requisiti specifici.
INSTALLAZIONE
Se si procede dai sorgenti ha senso seguire le indicazioni fornite da una delle migliori guide sull'argomento presenti in rete: "Life With Qmail" che è anche stata tradotta in italiano e va considerata il punto di riferimento per ogni approfondimento.
In rete esistono molteplici HOWTO, che illustrano soluzioni diverse per mettere in piedi un supporto completo per un sistema di posta: autivirus, antiscan, interfaccia web di gestione, autoresponder, mailing list, autenticazione SMTP, server POP3, POP3s, IMAP, Webmail.
Spesso è necessario applicare specifiche patch a qmail per gestire i prerequisiti richiesta da questi software aggiuntivi, per cui è opportuno, prima di lanciarsi nella compilazione di Qmail:
- definire le proprie necessità (cosa deve fare/avere il mio sistema di posta?)
- valutare le soluzioni disponibili (quali software offrono le funzionalità che mi servono?)
- se possibile, scegliere il sistema operativo e valutare se optare per pacchetti precompilati o procedere con i sorgenti.
- indagare sulle interdipendenze richieste dai software scelti e selezionare le patch qmail necessarie (basarsi sugli HOWTO in rete e la documentazione di chi produce i singoli programmi)
- procedere alla compilazione e installazione di qmail e dei molteplici complementi software con cui sicuramente in un sistema di posta non essenziale, ci si ritroverà a dover gestire.
Installazione dei Daemontools
I Daemontools sono programmi realizzati da DJB che gestire in modo ottimale l'avvio di servizi e demoni. Seppur non indipensabili sono raccomandati per gestire l'avvio dei diversi daemon di Qmail e posso essere utili per gestire in modo altri servizi.
La procedura da sorgenti è semplice:
mkdir -p /package
chmod 1755 /package
cd /package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar -zxvf /tmp/daemontools-0.76.tar.gz
cd admin/daemontools-0.76
package/install
Si può optare per l'installazione di rpm o deb, il pacchetto daemontools (di solito non ufficiale nelle distribuzioni Linux) non ha particolari dipendenze (ma può essere prerequisito per altri).
Rimandando ad altrove per approfondimenti, è utile sapere che la semplice presenza nella directory /service
di un link ad uno script (run) di avvio servizio, fa in modo che questo venga avviato entro 5 secondi: se per qualche motivo cade, viene riavviato.
Installazione di UCSPI-TCP
Il pacchetto ucspi-tcp (Unix Client Server Programming Interface) comprende vari tool per istanziare facilmente dei servizi client-server tcp. Si pone come alternativa e miglioramento di inetd con funzionalità di filtro e limiti sulle connessioni.
L'installazione tramite sorgenti è essenziale:
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar -zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check
Compilazione di Qmail e installazione del servizio
Procedura di compilazione di QMAIL usando la versione netqmail 1.05 (basata su qmail 1.03 con alcune patch, tra cui il supporto di qmailqueue)+ una patch per il supporto tls e smtpauth.
1- Scaricare i sorgenti di netqmail dal sito ufficiale
wget http://qmail.org/netqmail-1.05.tar.gz
2- Scaricare, se si desidera, la patch per tls+smtpauth
wget http://shupp.org/patches/netqmail-1.05-tls-smtpauth-20041111.patch
3- Scompattare e praparare la configurazione
tar -xzf netqmail-1.05.tar.gz
cd netqmail-1.05
./collate.sh
4- Applicare, se si desidera, la patch tls+smtpauth (notare che per poterla compliare è necessario avere gli header delle librerie ssl installate sl proprio sistema. Queste vengono tipicamente fornite con un pacchetto dedicato (separata da openssl). Su Debian si chiama libssl-dev.
cd netqmail-1.05
patch -p0 < ../../netqmail-1.05-tls-smtpauth-20041111.patch
5- Modificare i sorgenti, se si desidera, per permettere il backup delle mail in ingresso e in uscita. Trovare il file extra.h nella directory principale dei sorgenti e modificarlo per avere:
#define QUEUE_EXTRA "Tlog\0"
#define QUEUE_EXTRALEN 5
6- Creare l'ambiente necessario a qmail, creando la directory e utenti
mkdir /var/qmail
7- Creare gli utenti e i gruppi sul proprio sistema. Il file INSTALL.ids contiene le stesse istruzioni per diversi Unix, su Linux scrivere:
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
8- Procedere con la compilazione dei sorgenti
Compilare
cd netqmail-1.05
make
make setup check
make cert
make tmprsadh
9- Si può avviare qmail in vari modi tramite lo script /var/qmail/rc
, nella directory /var/qmail/boot
sono presenti diversi file di esempio per far partire qmail con il supporto di diversi formati di mailbox. Noi intendiamo usare il formato maildir, che prevede una directory Maildir nella home di ogni utente che contiene le mail registrate su file separati. Questa impostazione è quella di default, può essere modificata a livello di file .qmail per singolo utente.
LWQ suggerisce di creare uno script /var/qmail/rc con questo contenuto:
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
A questo punto basta scrive in /var/qmail/control/defaultdelivery
(notare che non è un file ufficiale di qmail, ma una soluzione dell'autore di LWQ) il tipo di mailbox che si vuole utilizzare ( ./Mailbox , ./Maildir/ , |preline procmail , |dot-forward .forward ... )
Ricordarsi di rendere eseguibile il file rc e creare la directory dover loggare:
chmod 755 /var/qmail/rc
mkdir /var/log/qmail
(successivamente verrà configurato il logging su questa directory)
10- Preparare gli script di avvio di qmail
Un comodo script per gestire il servizio qmail è fornito a questo indirizzo:
http://www.lifewithqmail.org/qmailctl-script-dt70
copiarlo in /var/qmail/bin/qmailctl e renderlo facilmente utilizzabile:
wget http://www.lifewithqmail.org/qmailctl-script-dt70 -O /var/qmail/bin/qmailctl
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
11- In questa fase si preparano gli script per il comando supervise dei daemontools, sia quelli necessari per l'esecuzione del servizio che per il logging. Si basano sulle indicazioni di LWQ ma possono essere adattati alle proprie esigenze.
Per qmail-send il servizio che si occupa di inviare e gestire la posta presente nelle code:
- Creare le directory che servono (la principale e la log):
mkdir -p /var/qmail/supervise/qmail-send/log
- Creare il file /var/qmail/supervise/qmail-send/run
per l'avvio del servizio. Scriverci:
#!/bin/sh
exec /var/qmail/rc
- Creare il file /var/qmail/supervise/qmail-send/log/run
per gestire il logging:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
- Rendere eseguibili i file creati:
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
- Attivare il servizio (entro 5 secondi verrà avviato) facendo trovare la directory supervise in /service
(per evitare l'avvio di qmail-send al boot basterà rimuovere il link simbolico):
ln -s /var/qmail/supervise/qmail-send /service
Analoga procedura va fatta per qmail-smtpd il servizio qmail che si mette in ascolto sulla porta 25 (sia questo che il precedente sono NECESSARI per far funzionare qmail):
- Creare le directory che servono (la principale e la log):
mkdir -p /var/qmail/supervise/qmail-smtpd/log
- Creare il file /var/qmail/supervise/qmail-smtpd/run
per l'avvio del servizio:
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
Questa versione dello script, presa da LWQ, prevede la presenza di un file custom di configurazione /var/qmail/control/concurrencyincoming
che contiene il numero di connessioni massime in entrata contemporaneamente. Per mettere 40 connessioni massimo:
echo 40 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
- Creare il file /var/qmail/supervise/qmail-smtpd/log/run
per gestire il logging:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
- Rendere eseguibili i file creati:
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
- Creare le directory di log (quella principale, che viene usata da qmail-send) è stata creata precedentemente:
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd
- Attivare il servizio:
ln -s /var/qmail/supervise/qmail-smtpd /service
Se si vuole usare anche il server pop3 fornito con qmail (qmail-pop3) procedere come segue (notare che a differenza dei passi precedenti questa parte è facoltativa e va fatta solo se si vuole usare qmail come server pop3 e magari un altro software come courier come server imap):
- Creare le directory che servono (la principale e la log):
mkdir -p /var/qmail/supervise/qmail-pop3d/log
- Creare il file /var/qmail/supervise/qmail-pop3d/run
per l'avvio del servizio:
#!/bin/sh
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
mail.dominio.it /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1
In questo script va inserito il FQDN del proprio server di posta (qui mail.dominio.it) e il programma da usare per la verifica di login e password. Quello fornito di default da DJB, checkpassword, va comunque scaricato e compilato autonomamente, ma ne esistono di alternativi per gestire domini virtuali (dove esiste un solo utente di sistema per ogni dominio) o diversi meccanismi di autenticazione. Ad esempio il softwrae vmailmgr si aspetta come path per il comandi di autenticazione: /bin/checkvpw .
Per maggiori dettagli: http://www.qmail.org/top.html#checkpassword
- Creare il file /var/qmail/supervise/qmail-pop3d/log/run
per gestire il logging:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/pop3d
- Rendere eseguibili i file creati:
chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
- Creare le directory di log (quella principale, che viene usata da qmail-send) è stata creata precedentemente:
mkdir /var/log/qmail/pop3d
chown qmaill /var/log/qmail /var/log/qmail/pop3d
- Modificare lo script qmailctl per gestire anche il servizio pop3.
Seguire le indicazioni date su LWQ: http://www.lifewithqmail.org/lwq.html#pop-imap-servers
- Attivare il servizio:
ln -s /var/qmail/supervise/qmail-pop3d /service
Sostituzione di Sendmail
Se non è ancora stato fatto, questo è un buon momento per rimuovere Sendmail dal proprio sistema o quantomeno evitare che venga avviato e sostituire i suoi binari con i corrispondenti di Qmail.
mv /usr/sbin/sendmail /usb/sbin/sendmail.orig
mv /usr/bin/sendmail /usb/bin/sendmail.orig
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
LA STRUTTURA MODULARE DI QMAIL
L'architettura modulare di Qmail è uno dei suoi punti di forza, è alla base della sua intrinseca semplicità, della facilità con cui si può espandere e della sua potenza, flessibilità e stabilità.
I moduli principali, che corrispondono ai nomi dei rispettivi processi (e man pages) sono:
qmail-smtpd - Accetta messaggi via SMTP (è il servizio in ascolto sulla porta 25)
qmail-inject - Inoltra i messaggi provenienti dal sistema locale
qmail-queue - Vede i messaggi arrivati e li mette in coda
qmail-send - Processa i messaggi in coda
qmail-rspawn - qmail-remote - Gestiscono la consegna dei messaggi con destinazione remota
qmail-lspawn - qmail-local - Gestiscono la consegna dei messaggi locali
qmail-clean - Pulisce le code
STRUTTURA DELLE DIRECTORY
La directory principale in cui sono mantenuti di default tutti i file relativi a qmail è /var/qmail
. E' consigliabile non modificarla, e si consiglia di usare link simbolici per avere a disposizione i file relativi a Qmail anche in altre directory.
Dentro /var/qmail
si trovano queste directory:
alias
- File .qmail validi per gli alias generali di sistema
bin
- I binari dei programmi e script vari
boot
- Gli script di avvio
control
- Tutti i file di configurazione
doc
- Documentazione (eccetto pagine man)
man
- Man pages
queue
- La coda dei messaggi che Qmail sta gestendo
users
- I database file degli utenti di qmail
La directory /var/qmail/queue
contiene i file relativi ai messaggi in coda.
La sua struttura prevede diverse sottodirectory con, scritte su file diversi, ma con stesso nome, le informazioni relative ad un singolo messaggio, a cui viene dato un numero identificativo univoco.
Alcune di queste, indicate con un asterisco (*) contengono 23 (di default) directory numerate che dividere meglio quantità di messaggi potenzialmente grandi.
Sono sconsigliati interventi manuali sui messaggi in coda: va fatto tutto rigorosamente a Qmail stoppato e vanno considerati i diversi file che compongono un singolo messaggio (in questo esempio un messaggio con pid 345 (corrisponde ad un i-node):
mess/345
* - Il messaggio (il corpo)
todo/345
- Le intestazioni complete della email
intd/345
- Le intestazioni che qmail-queue sta costruendo
info/345
* - Il mittente del messaggio, risultato dal preprocessing delle intestazioni
local/345
* - Il destinatario del messaggio, se locale, dopo preprocessing
remote/345
* - Il destinatario del messaggio, se remoto, dopo preprocessing
bounce/345
- Errori di consegna permanenti
lock
- File di lock
pid
- Usato da qmail-queue per ottenere un i-node
Gestione delle code
I tool forniti insieme a Qmail per gestire le code sono:
qmail-qread - Visualizza i messaggi in coda (mittente, destinatario, data e numero messaggio)
qmail-qstat - Visualizza il numero di messaggi in coda
Un comodo tool aggiuntivo, realizzato da terzi in Perl, è qmhandle
CONFIGURAZIONE
[ .. TO BE CONTINUED ... ]
Questo TIPS vuole introdure chi é alle prime esperienze con gli MTA e nello specifico con QMAIL un server di posta leggero, affidabile e performante. Troverete di seguito una delle tante procedure da seguire per una installazione di un server di posta (Qmail)
Senza perdere altro tempo iniziamo subito a lavorare!
Per prima cosa procuriamoci Qmail (che necessita per l'installazione di altri due software UCSPI-TCP e DAEMONTOOLS):
nota: attenzione le versioni potrebbero cambiare
(download di Qmail)
wget ftp://cr.yp.to/software/qmail-1.03.tar.gz
(download di ucspi)
wget ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
(download di daemontools)
wget ftp://cr.yp.to/daemontools/daemontools-0.70.tar.gz
Scompattiamo i software scaricati:
supponiamo di aver scaricato i software nella directory /usr/local/src
per cui andiamo in questa directory e digitiamo
umask 022
tar -xzf qmail-1.03.tar.gz
tar -xzf ucspi-tcp-0.88.tar.gz
tar -xzf daemontools-0.70.tar.gz
adesso entriamo nella directory di Qmail ed eseguiamo i comandi seguenti:
cd qmail-1.03
mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias -s /nonexistent
useradd -g nofiles -d /var/qmail qmaild -s /nonexistent
useradd -g nofiles -d /var/qmail qmaill -s /nonexistent
useradd -g nofiles -d /var/qmail qmailp -s /nonexistent
groupadd qmail
useradd -g qmail -d /var/qmail qmailq -s /nonexistent
useradd -g qmail -d /var/qmail qmailr -s /nonexistent
useradd -g qmail -d /var/qmail qmails -s /nonexistent
a questo punto editiamo il file /etc/passwd e nel caso no siano gia' presenti, inseriamo alla fine del file le seguenti righe (attenzione i numeri tra i due punti potrebbero se presenti anche essere diversi):
alias:*:7790:2108::/var/qmail/alias:/bin/true
qmaild:*:7791:2108::/var/qmail:/bin/true
qmaill:*:7792:2108::/var/qmail:/bin/true
qmailp:*:7793:2108::/var/qmail:/bin/true
qmailq:*:7794:2107::/var/qmail:/bin/true
qmailr:*:7795:2107::/var/qmail:/bin/true
qmails:*:7796:2107::/var/qmail:/bin/true
installiamo Qmail (attenzione bisogna essere super user)
make setup check (se make non esiste provate con gmake)
./config-fast nome.del.host (il nome del server di posta)
adesso installiamo UCSPI
cd /usr/local/src/ucspi-tcp-0.88
make
make setup check
e ora daemontools
cd /usr/local/daemontools-0.70
make
make setup check
Su alcuni sistemi un po' absoleti ho riscontrato un problema di compilazione in
tai64nlocal.c per cui in caso di problemi su questo file, editarlo e cambiare la riga <sys/time.h> con <time.h> e rilanciare la compilazione.
adesso creiamo la directory service
mkdir /service
ed editiamo il file /etc/inittab aggiungendo alla fine la seguente linea (Attenzione a non dare invio deve essere tutta scritta in una sola riga)
SV:123456:respawn:env – PATH=/usr/local/bin:/usr/bin:/usr/bin:/bin svscan /service </dev/null >/dev/console 2>/dev/console
adesso facciamo rileggere al sistema il file /etc/inittab
kill -HUP 1
verifichiamo che svscan sia partito regolarmente:
ps -waux | grep svscan
adesso facciamo un paio di test per controllare che tutto sia a posto.
cd /usr/local/src/daemontools-0.70
./rts > rts.out
cmp rts.out rts.exp
se non viene evidenziato nessun messaggio vuol dire che i test sono andati a buon fine.
Adesso controlliamo i timestamps del sistema
date | ./tai64n | ./tai64nlocal
date | sh -c './multilog t e 2>&1' | ./tai64nlocal
i due comandi dovrebbero produrre lo stesso output con la differenza di solo qualche secondo di tempo.
Creiamo adesso lo script /var/qmail/rc
#!/bin/sh
exec env – PATH=”/var/qmail/bin:$PATH” \
qmail-start “`cat /var/qmail/control/defaultdelivery`”
(attenzione agli apici singoli sono apcici inversi ` non apici normali ' )
diamo i giusti permessi
chmod 755 /var/qmail/rc
configuriamo il file deafultdelivery
echo ./Maildir > /var/qmail/control/defaultdelivery
adesso creiamo lo script qmailctl (fate un copia e incolla)
#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 30 80
# description: the qmail MTA
#
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
LOG=/var/log/qmailctl
echo `date` `tty` $* >>$LOG
if [ -d /service/qmail-pop3d ]; then
POP=yes
else
POP=no
fi
case "$1" in
start)
echo "Starting qmail"
if svok /service/qmail-send ; then
svc -u /service/qmail-send 2>&1 | tee -a $LOG
else
echo qmail-send service not running
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd 2>&1 | tee -a $LOG
else
echo qmail-smtpd service not running
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
if [ $POP = yes ]; then
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d
else
echo qmail-pop3d service not running
fi
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd 2>&1 | tee -a $LOG
echo " qmail-send"
svc -d /service/qmail-send 2>&1 | tee -a $LOG
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
if [ $POP = yes ]; then
echo " qmail-pop3d"
svc -d /service/qmail-pop3d
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
if [ $POP = yes ]; then
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
fi
qmail-qstat
;;
doqueue|alrm|flush)
echo "Sending ALRM signal to qmail-send."
svc -a /service/qmail-send 2>&1 | tee -a $LOG
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send 2>&1 | tee -a $LOG
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send 2>&1 | tee -a $LOG
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd 2>&1 | tee -a $LOG
if [ $POP = yes ]; then
echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d
fi
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send 2>&1 | tee -a $LOG
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd 2>&1 | tee -a $LOG
if [ $POP = yes ]; then
echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d
fi
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd 2>&1 | tee -a $LOG
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send 2>&1 | tee -a $LOG
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd 2>&1 | tee -a $LOG
if [ $POP = yes ]; then
echo "* Restarting qmail-pop3d."
svc -t /service/qmail-pop3d
fi
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp 2>&1 | tee -a $LOG
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
tcprules /etc/tcp.pop3.cdb /etc/tcp.pop3.tmp < /etc/tcp.pop3 2>&1 | tee -a $LOG
if [ $POP = yes ]; then
chmod 644 /etc/tcp.pop3.cdb
echo "Reloaded /etc/tcp.pop3."
fi
;;
help)
cat <<HELP
stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
diamogli i giusti permessi e linkiamolo per eseguirlo da ovunque
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/local/sbin
adesso creiamo i link di partenza e chiusura automatica di qmail (questi link sono per la versione di Linux della Red Hat per altre distro potrebbero cambiare controllare la vostra distro)
ln -s /var/qmail/bin/qmailctl /etc/rcd./init.d
ln -s ../init.d/qmail /etc/rc.d/rc0.d/K30qmail
ln -s ../init.d/qmail /etc/rc.d/rc1.d/K30qmail
ln -s ../init.d/qmail /etc/rc.d/rc2.d/S80qmail
ln -s ../init.d/qmail /etc/rc.d/rc3.d/S80qmail
ln -s ../init.d/qmail /etc/rc.d/rc4.d/S80qmail
ln -s ../init.d/qmail /etc/rc.d/rc5.d/S80qmail
ln -s ../init.d/qmail /etc/rc.d/rc6.d/K30qmail
adesso creiamo i servizi che servono a Qmail per funzionare
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod +t /var/qmail/supervise/qmail-send
chmod +t /var/qmail/supervise/qmail-smtpd
adesso creiamo lo script di partenza /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc
e quello per il log /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog -t /var/log/qmail
adesso creiamo il file /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`head -1 /var/qmail/control/concurrencyincoming`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" ]; then
echo QMAILDUID, NOFILESGID, or MAXSMTPD is unset in
echo $0
exit 1
fi
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
adesso creiamo il file concurrencyincoming
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
ed ora il file /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog \
t /var/log/qmail/smtpd
diamogli i giusti permessi
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
creiamo le directory per il logging
mkdir -p /var/log/qmail/smtpd
chown -R qmaill /var/log/qmail
linkiamo i servizi alla directory /service
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
Attenzione: a questo punto se tutto è stato eseguito correttamente, qmail partirà automaticamente per cui diamo il comando qmailctl stop per fermarlo.
Adesso settiamo l'accesso per la spedizione della posta:
echo '127.:allow,RELAYCLIENT=””' > /etc/tcp.smtp
qmailctl cdb
Creiamo gli alias di sistema per gli utenti root, postmaster e mailer-daemon questi sono utenti che devo esistere su tutti i mail server.
echo \&[email protected] > /var/qmail/alias/.qmail-root
echo \&[email protected] > /var/qmail/alias/.qmail-postmaster
ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
Adesso bisogna disinstallare SendMail (installato di default su molte distro)
stoppiamolo
/etc/rc.d/init.d/sendmail stop
e rimuoviamolo dal sistema
rpm -e - -nodeps sendmail
dato che molti software cercano sendmail installato sul sistema, creiamo dei link in modo da avere la compatibilità con sendmail
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
a questo punto possiamo far partire qmail
qmailctl start
e vediamo se è attivo e funzionante
qmailctl stat
dovremmo vedere un output che ci dice qulale e' il PID e da quando tempo sono UP i servizi di Qmail (che dovrebbero essere 4) qmail-send, qmail-send/log, qmail-smtpd e qmail-smtpd/log oltre a dirci quanti messaggi abbiamo in coda.
Ancora un test..... proviamo ad inviare una e-mail al postmaster del nostro dominio
echo to: postmaster | /var/qmail/bin/qmail-inject
controllate il log di qmail con il comando
tail -f /var/log/qmail/current
dovreste trovare informazioni sulla spedizione del messaggio e una riga che vi dice:
delivery 4: success: 1.2.3.4_accepted_message./...
i numeri possono essere diversi ma ciò vuol dire che l'email è stata inviata correttamente.
Adesso testiamo il server SMTP (quello che si occupa della spedizione dei messaggi)
telnet 127.0.0.1 25
(messaggi)
Trying 127.0.0.1 . .
Connected to 127.0.0.1
Escape character is '^]'.
220 domain ESMTP
helo postmaster
(messaggi)
250 domain
mail from:<[email protected]>
(messaggi)
250 ok
rcpt to:<[email protected]>
(messaggi)
250 ok
data
(messaggi)
354 go ahead
Subject: testiamo
questo è un messaggio di test
.
(messaggi)
250 ok 8123456789 qp 123456
quit
(messaggi)
221 domain
Connection closed by foreign host.
In questo modo abbiamo testato che il server funziona e spedisce ai propri domini e a quelli esterni.
Per aggiungere nuove caselle, creare domini virtuali, vi rimando ad un mio prossimo post su questo stesso sito.
Per informazioni o consulenze contattatemi!
Daemontools è un insieme di programmi di D.J. Bernstein che (tra le altre cose) permettono l'avvio, il monitoring e il logging di arbitrari servizi di sistema ed è tipicamente necessario per gestire i software realizzati da DJB (djbdns, qmail).
Presenta caratteristiche interessanti che lo rendono una alternativa ad altri metodi di avvio di servizi (Directory init.d, file inittab, file rc.local, console tty) ma si basa su una logica e una struttura del file system che fa "standard a se", al di fuori di quelli condivisi in diversi ambienti Unix.
Con daemontools il sistema, infatti, si popola di inedite directory:
/service
contiene dei link simbolici che puntano a directory che definiscono le modalità con cui avviare un servizio. La semplice presenza del link in questa directory fa in modo che il servizio venga avviato (o riavviato, in caso di crash del programma) entro 5 secondi.
/command
contiene link simbolici a comandi di sistema vari (di default quelli che fanno parte della suite daemontools)
/package
contiene i pacchetti software installati.
Secondo DJB, i vantaggi di daemontools sono vari:
- Facilità di installazione e rimozione dei servizi (basta mettere o togliere un link simbolico nella directory)
- Facilità di avvio e gestione dei servizi: una volta inserito il link in /service, il servizo parte entro 5 secondi, se cade, viene riavviato
- Facilità di gestione dei segnali da dare ai servizi. Con il comando svc
si può avviare, stoppare, terminare un servizio senza cercare il suo pid.
- Uniformità dell'ambiente in cui viene avviato un servizio: quando questo viene riavviato è in uno stato pulito, analogo a quello durante il boot
- Portabilità: la struttura in service funziona su ogni sistema Unix.
Gli svantaggi sono che nulla di tutto questo segue gli standard Unix ufficiali.
INSTALLAZIONE
Installare i Daemontools è semplice. Se si usa un pacchetto (tipicamente chiamato "daemontools") la procedura è quella tipica per la propria distribuzione (spesso il pacchetto va cercato fra repository non ufficiali, in quanto la sua logica introduce le anormalità sopra descritte nella coerenza di un sistema Linux).
La procedura manuale è ben descritta sul sito ufficiale:
ter:~# cd /tmp ; wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
--09:25:09-- http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
=> `daemontools-0.76.tar.gz'
[...]
ter:~# mkdir -p /package
ter:~# chmod 1755 /package
ter:~# cd /package
ter:/package# tar -zxvf /tmp/daemontools-0.76.tar.gz
ter:/package# cd admin/daemontools-0.76
ter:/package/admin/daemontools-0.76# package/install
Linking ./src/* into ./compile...
Compiling everything in ./compile...
[...]
Copying commands into ./command...
Creating symlink daemontools -> daemontools-0.76...
Making command links in /command...
Making compatibility links in /usr/local/bin...
Creating /service...
Adding svscanboot to inittab...
init should start svscan now.
Come si può intravedere, viene partire da init stesso il comando svscanboot
, mediante la configurazione SV:123456:respawn:/command/svscanboot
in /etc/inittab
.
Questo mette la directory /command
all'inizio della variabile PATH e lancia svscan /service
, che si occupa di monitorare e avviare i servizi in /service
, e readproctitle service errors
che si occupa di gestire il logging.
Il risultato è la presenza, già al termine dell'installazione e ad ogni riavvio, dei seguenti servizi (che girano come root):
root 1047 1 0 10:46 ? 00:00:00 /bin/sh /command/svscanboot
root 1087 1047 0 10:46 ? 00:00:00 svscan /service
root 1088 1047 0 10:46 ? 00:00:00 readproctitle service errors: ........................................
I puntini indicano che va tutto bene, altrimenti vengono sostituiti da messaggi di errore.
COMANDI
Per ogni servizio da avviare, svcsan lancia il comando supervise nomeservizio
che provvede ad eseguire lo script shell /service/nomeservizio/run
dove va messo di fatto il comando che avvia il servizio desiderato.
Nella directory /service/nomeservizio
viene creata una sottodirectory chiamata supervise
dove sono scritte, in forma binaria, informazioni di stato sul servizio che possono essere interpretate con il comando svstat
.
Per gestire i servizi si usa il comando svc
:
svc -u nomeservizio
avvia o riavvia il servizio /service/nomeservizio.
svc -d nomeservizio
termina in modo pulito (SIGTERM) un servizio.
svc -p nomeservizio
, svc -c nomeservizio
mette in pausa (SIGSTOP) o continua (SIGCONT) un servizio.
svc -k nomeservizio
termina brutalmente (SIGKILL) un servizio.
Altri comandi fra i daemontools:
Il comando multilog
riceve in stdin una sequenza arbitraria di righe, le filtra eventualmente secondo criteri diversi, e lo salva su uno o più file di log, gestendo eventuali rotazioni.
fghack
prova a gestire servizi che si mettono automaticamente in background (supervise li deve far girare in foreground).
envdir
imposta le variabili d'ambiente secondo i file presenti nella directory indicata.
softlimit
esegue un altro programma impostando limiti sull'utilizzo di risorse quali memoria e CPU utilizzata, file aperti ecc.
Vmailmgr (Virtual Mail Manager) è una suite di programmi utilizzabili per gestire molteplici domini virtuali su un unico mail server. E' strettamente correlato a qmail ed è un prerequisito necessario per tool di amministrazione di posta via web come Omail Admin.
Prevede 3 diversi metodi di gestione delle caselle di posta virtuale, si appoggia a database CDB per la gestione delle password, fornisce una serie di comandi per la gestione dei domini virtuali e programmi CGI propri e una librearia php per la gestione via web.
Al momento la versione ufficiale è la 0.96.9 che sembra inattiva ormai da anni (è stata rilasciata nel Settembre 2000), in linea con qmail, di cui condivide una certa ... stabilità.
INSTALLAZIONE
Sul sito ufficiale sono presenti dei pacchetti rpm e i sorgenti.
La compilazione può risultare particolarmente insidiosa con gcc3 (in pratica, non funziona senza adeguata patch).
- Scaricare e scompattare i sorgenti:
wget http://www.vmailmgr.org/current/vmailmgr-0.96.9.tar.gz
tar -zxvf vmailmgr-0.96.9.tar.gz
cd vmailmgr-0.96.9
- Scaricare e applicare una patch apposita per compilarlo con gcc3 (provare prima a compilarlo, se non ci sono errori questo passo non è necessario).
Fonte: Megaz Qmail HowTo (uno dei migliori in circolazione):
wget http://megaz.arbuz.com/download/vmailmgr-0.96.9-gcc32.patch
patch -p1 < vmailmgr-0.96.9-gcc32.patch
- Procedere con una normale compilazione:
./configure
make
make install
Notare che per la preparazione dei docs è necessario avere i linuxdoc-tools e texi2html (su Debian installarli con: apt-get install linuxdoc-tools ; apt-get install texi2html
, su altre distro installare i relativi pacchetti)
CONFIGURAZIONE
Per la configurazione si procede nella creazione di una directory dedicata:
mkdir /etc/vmailmgr
chmod 755 /etc/vmailmgr
cd /etc/vmailmgr
ln -s /etc/vmailmgr /usr/local/etc/vmailmgr
e la definizione dei vari file di configurazione (le impostazioni date vanno bene per un sistema basato su Maildir dove la /home directory contiene una sottodirectory per ogni dominio e un utente di sistema è associato ad un singolo dominio):
echo ./Maildir/ > default-maildir
echo maildir > maildir-arg-str
echo passwd > password-file
echo /var/service/vmailmgrd/socket > socket-file
echo users > user-dir
E inoltre possibile customizzare il file /etc/vmailmgr/vdeliver-predeliver
per gestire disk quota (basate sull'intero dominio o singoli utenti) o autoresponder:
Per diskquota sui singoli utenti, scrivere in /etc/vmailmgr/vdeliver-predeliver
:
#!/bin/sh
/usr/bin/vcheckquota
Rendere tutti i file creati eseguibili:
chmod 755 /etc/vmailmgr/*
INSTALLAZIONE DI UN AUTORESPONDER
Per la gestione di autoresponder compatibile con OMail-admin scrivere in /etc/vmailmgr/vdeliver-predeliver
:
#!/bin/sh
#echo $MAILDIR
#exit 0
W=`echo $MAILDIR |sed 's/[.]//'`
#echo $HOME$W
if test -z $W
then
exit 0
fi
if test -s $HOME$W/autoresponse/message.txt
then
M=`echo $HOME$W/autoresponse/message.txt`
D=`echo $HOME$W/autoresponse`
qmail-autoresponder $M $D
echo AUTOREPLY
fi
Notare che il programma qmail-autoresponder va creato e compilato separatamente, fra i vari disponibili per qmail, si consiglia quello realizzato dagli stessi autori di VmailMgr: http://untroubled.org/qmail-autoresponder/
INTEGRAZIONE VMAILMGR CON QMAIL-POP3D
Per gestire l'autenticazione degli utenti che accedono al servizio pop3 quando viene gestito da qmail-pop3d va modificato lo script supervise di avvio di qmail-pop3d. Editare /service/qmail-pop3d/supervise/run (o cercare il file se non esiste il link simbolico /service/qmail-pop3d che dovrebbe puntare alla directory con i supervise scripts di qmail-pop3d) e assicurarsi che sia inserito checkvpw come comando per la verifica delle credenziali di autenticazione:
#!/bin/sh
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
mail.dominio.it /usr/local/bin/checkvpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
Dove:
mail.dominio.it è il nome completo del proprio server di posta
/usr/local/bin/checkvpw è il path ompleto dove si trova checkvpw (questo è il path di default dove viene messo dopo la compilazione di vmailmgr)
INTEGRAZIONE VMAILMGR CON COURIER-IMAPD
Courier è un server imapd spesso usato con qmail, in quanto supporta il formato maildir introdotto con qmail (e raccomandabile per molti casi).
Courier va configurato per gestire l'autenticazione tramite vmailmrg, per farlo editare il suo file di configurazione (di solito si trova in /etc/courier/imapd
, se installato tramite pacchetto, o /usr/lib/courier-imap/etc/imap
se compilato a mano) e nella riga che contiene la stringa:
AUTHMODULES="authdaemon"
mettere:
AUTHMODULES="authvmailmgr"
.
Notare che in fase di installazione da sorgenti vmailmgr scrive il modulo di autenticazione per courier in /usr/local/lib/courier-imap/libexec/authlib/authvmailmgr
. Se si installa courier tramite pacchetto è probabile che questa directory non venga considerata, creare adeguato link simbolico, per esempio (su Debian con courier installato via apt):
ln -s /usr/lib/courier/libexec/authlib/authvmailmgr /usr/lib/courier/authlib/
CREAZIONE SUPERVISE SCRIPT PER LANCIARE VMAILMGR TRAMITE DAEMONTOOLS
Avendo i daemontools a diswposizione è comodo usarli per ogni servizio possibile. La procedura è la solita:
- Creare le directory che servono (la principale e la log) per i due servizi correlati a vmailmgr (le mettiamo in /var/qmail/supervise per comodotà e coerenza):
mkdir -p /var/qmail/supervise/vmailmgr/log
mkdir -p /var/qmail/supervise/vmailmgr-tcp/log
- Creare il file /var/qmail/supervise/vmailmgr/run
:
#!/bin/sh
umask 0
if [ -s /etc/vmailmgr/socket-file ]; then
socket_file="`head -1 /etc/vmailmgr/socket-file`"
else
socket_file=/tmp/.vmailmgrd
fi
exec unixserver -v -- $socket_file vmailmgrd -D -V 2>&1
- Creare il file /var/qmail/supervise/vmailmgr/log/run
per gestire il logging:
#!/bin/sh
exec multilog t /var/log/vmailmgrd
- Analogamente per /var/qmail/supervise/vmailmgr-tcp/run
:
#!/bin/sh
exec 2>&1
exec tcpserver -D -H -R -v -l localhost -x /etc/tcpcontrol/vmailmgrd.cdb -- 0 322 \
/usr/sbin/vmailmgrd -D -V >&1
- E /var/qmail/supervise/vmailmgr-tcp/log/run
:
#!/bin/sh
exec multilog t /var/log/vmailmgrd-tcp
- Rendere eseguibili gli script:
chmod 755 /var/qmail/supervise/vmailmgr/run
chmod 755 /var/qmail/supervise/vmailmgr/log/run
chmod 755 /var/qmail/supervise/vmailmgr-tcp/run
chmod 755 /var/qmail/supervise/vmailmgr-tcp/log/run
- Per avviare il servizio e fare in modo che sia avviato al reboot basta avere un link in /service:
ln -s /var/qmail/supervise/vmailmgr /service/
ln -s /var/qmail/supervise/vmailmgr-tcp /service/
[.. TO BE COMPLETED ..]