QMail HOW-TO: installazione, configurazione, tips & tricks di QMail
Da Wizard linux team wiki.
Cos'è QMail
QMail è un MTA (Mail Transport Agent). E' un software modulare che si interafaccia con una miriade di altri software costruiti attorno ad esso che aggiungono funzioni di controllo filtraggio e di automatismo in genere
Requisiti
Creare la directory di installazione
mkdir /var/qmail
Creare gli utenti per il suo funzionamento
- Creazione del gruppo nofiles
groupadd nofiles
- Aggiunta degli utenti di qmail (qmaild,qmaill,qmailp) al gruppo nofiles
useradd -g nofiles -d /var/qmail/alias -s /bin/false alias useradd -g nofiles -d /var/qmail -s /bin/false qmaild useradd -g nofiles -d /var/qmail -s /bin/false qmaill useradd -g nofiles -d /var/qmail -s /bin/false qmailp
- Creazione del gruppo qmail
groupadd qmail
- Aggiunta degli utenti di qmail (qmailq,qmailr,qmails) al gruppo qmail
useradd -g qmail -d /var/qmail -s /bin/false qmailq useradd -g qmail -d /var/qmail -s /bin/false qmailr useradd -g qmail -d /var/qmail -s /bin/false qmails
Processi e utenti di QMail
- qmail-send gira come utente qmails
- qmail-clean gira come utente qmailq
- qmail-rspawn gira come utente qmailr
- qmail-lspawn gira come utente root
I file sotto la directory control
Sotto qmail/control troviamo i seguenti file:
-rw-r--r-- 1 root root 22 Sep 18 02:40 defaultdomain -rw-r--r-- 1 root root 27 Sep 18 02:40 locals -rw-r--r-- 1 root root 27 Sep 18 02:40 me -rw-r--r-- 1 root root 17 Sep 18 02:40 plusdomain -rw-r--r-- 1 root root 27 Sep 18 02:40 rcpthosts -rw------- 1 root root 147 Sep 29 10:08 virtualdomains
- rcpthost: contiene la lista dei domini locali che posso no inviare la posta
- me: contiene il nome host incluso il dominio
- locals: contiene il nome host incluso il dominio
- plusdomaim: contiene il dominio
- defaultdomaim: contiene il dominio
- virtualdomains: contiene la lista dei domini virtuali
Eliminare Sendmail
Bisogna innanzitutto rimuovere ogni pacchetto che occupa la porta 25 (ad esempio altri MTA tipo exim) poi fermare sendmail
# killall -TERM sendmail
oppure
ps aux |grep sendmail kill <PID di send mail>
Dopo, visto che alcuni programmi potrebbero richiedere sendmail, eseguiamo:
# mv /usr/lib/sendmail /usr/lib/sendmail.old
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# mv /usr/sbin/newaliases /usr/sbin/newaliases.old
# ln -s /var/qmail/bin/newaliases /usr/sbin/newaliases
Installare i programmi accessori
ucspi-tcp
- Cos'è: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. (preso dall'HOW-TO Davide Giunchi http://www.darkroot.it/tutorials/qmail-HOWTO.html)
- Download da: http://cr.yp.to/ucspi-tcp.html
- Per scompattarlo:
tar xvzf <nome_pacchetto>
- Passiamo le patch che troviamo nel pacchetto di netqmail:
patch -p1 < ucspi-tcp-0.88.errno.patch patch -p1 < ucspi-tcp-0.88.a_record.patch patch -p1 < ucspi-tcp-0.88.nodefaultrbl.patch
- Installazione:
make make setup check
daemontools
Cos'è:E' un utility per gestire e monitorare i servizi. Non è necessaria ma consigliata
- Download da: ftp://cr.yp.to/daemontools/daemontools-0.76.tar.gz
- Per scompattarlo:
tar xvzf <nome_pacchetto>
- Passiamo le patch che troviamo nel pacchetto di netqmail:
patch -p1 < /usr/src/qmail/daemontools-0.76.errno.patch
- Installazione:
cd daemontools-0.76/admin/daemnotools ./package/install
- Integriamo le utility daemontools su qmail:
# 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 # mkdir -p /var/log/qmail/qmail-send # mkdir -p /var/log/qmail/qmail-smtpd # chown -R qmaill /var/log/qmail
checkpassword
Cos'è:Questa utility serve a QMail per interfacciarsi con gli utenti che vengono creati sotto il sistema Linux
- Download da: http://cr.yp.to/checkpwd.html
- Per scompattarlo:
tar xvzf <nome_pacchetto>
- Passiamo le patch che troviamo nel pacchetto di netqmail:
patch -p1 < /usr/src/qmail/checkpassword-0.90.errno.patch
- Installazione:
make setup check
Compilazione e installazione di QMail
Andare sotto la directory dove è stato scompattato qmail ed eseguire i seguenti comandi:
./collate.sh
make setup check
./config-fast mio.dominio.it
Scelta fra Maildir e Mailbox
- Diffrenza: In Maildir i messaggi sono memorizzati ognuno in un file separato, in Mailbox tutti i file sono messi in un unico file.
- Quale usare: Se non si hanno partilcolari necessità che lo richiedono esplicitamente si consiglia di usare Maildir in quanto se si dovesse rovinare una mail non si perderebbero tutte quelle che sono arrivate fino ad ora cosa che sarebbe possibile con Mailbox.
La struttura di maildir è la seguente
/home/nomeutente/Maildir/ -->new
-->cur
-->tmp
Per default sotto la directory <path_di_qmail>/boot c'è un file home già configurato per utilizzare la metodologia Mailbox.
#!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Mailbox splogger qmail
Bisogna copiare tale file rinominandolo rc nella directory di livello superiore e lasciare tutto com'è per la metodologia Mailbox e cambiarlo come segue per la metodologia Maildir.
#!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/
Creazione automatica delle strutture delle direcory nel caso di utilizzo della metodologia Maildir
Creare sotto /etc/skel la stuttura della directory presentata nel paragrafo Scelta fra Maildir e Mailbox
Creazione degli alias di amministratore di post-master e mailer-daemon
#cd ~alias #echo <tuo.qmail.root> >.qmail-root #echo <tuo.post.master> >.qmail-postmaster #echo <tuo.post.mailer-daemon> >.qmail-mailer-daemon
Sistemiamo il relay
concetto di relay
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.. (preso dall'HOW-TO Davide Giunchi http://www.darkroot.it/tutorials/qmail-HOWTO.html [al 04/01/2008 il dominio www.darkroot.it risulta non attivo])
configurazione
Creare il file sotto /etc tcp.smtp con formato standard indirizzo_ip_dei_client:allow,RELAYCLIENT="" esempio:
192.168.0.:allow,RELAYCLIENT="" :allow
Poi digitiamo i comandi:
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp </etc/tcp.smtp # chmod 644 /etc/tcp.smtp*
Relay sistemato.
Partenza del serivizio
Metodo 1: Creazione di un file sotto /etc/init.d
- pop3 (tutto su un unica riga)
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 &
- smtp (le ultime due righe vanno messe su un unica riga)
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
Metodo 2: Start con xinetd
- pop3
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
}
- smtp
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
}
Metodo 3: Partenza da inetd.conf
- pop3
pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup hostname.domain /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
- smtp
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
Metodo 4: Partenza con daemontools
- Creare la seguente struttura con i file run sotto la directory di lavoro di qmail:
supervise/qmail-pop3d/run supervise/qmail-pop3d/log/run supervise/qmail-send/run supervise/qmail-send/log/run supervise/qmail-smtpd/run supervise/qmail-smtpd/log/run
- Riempire i file run
file run per pop3
#!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" softlimit -m 6000000 tcpserver -v -R -l0 -H -X -x /etc/tcp.pop3.cdb -c 20 0 110 qmail-popup hostname.domain checkpassword qmail-pop3d Maildir 2>&1
file run per send
#!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`"
file run per smtpd
#!/bin/sh QMAILUID=`id -u qmaild` QMAILGID=`id -g qmaild` exec env - PATH="/var/qmail/bin:$PATH" softlimit -m 4000000 \ tcpserver -v -R -l0 -H -X -x /etc/tcp.smtp.cdb -c 90 \ -u $QMAILUID -g $QMAILGID 0 25 qmail-smtpd 2>&1
- Diamogli i permessi di esecuzione
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/ru
- creare una directory service su / e i successivi link simbolici
ln -s <path_di_qmail>/supervise/qmail-pop3d /service ln -s <path_di_qmail>/supervise/qmail-send /service ln -s <path_di_qmail>/supervise/qmail-smtpd /service
- creare infine le directory per il logging e dare i permessi necessari
mkdir /var/log/qmail/smtpd mkdir /var/log/qmail/pop3d mkdir /var/log/qmail/send chown -R qmaill /var/log/qmail
WEBMAIL con uebimiau
- Download:http://www.uebimiau.org/download.php
- Installazione:Basta scompattare il file sotto la directory di apache dove risiede anche il sito
- Configurazione::Consultare il file INSTALL.txt rilasciato con il pacchetto
Tips & Tricks
Altre impostazioni
- Modifica del firewall
Ricordare di modificare il file di iptables sotto /etc/sysconfig come segue
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
Tests
- Mandare una mail ad un utente locale esistente
echo to: <nome_utente_locale_esistente> | /var/qmail/bin/qmail-inject
- Mandare una mail ad un utente locale non esistente
echo to: nome_utente_locale_non_esistente | /var/qmail/bin/qmail-inject
- Mandare una mail di prova
echo "prova" | /var/qmail/bin/qmail-inject esempio@yahoo.it
- Verifica dei servizi con il comando pstree
Se è tutto OK il comando pstree deve visualizzare una situazione simile a quella sotto:
...
├─svscanboot─┬─readproctitle
│ └─svscan─┬─supervise───qmail-send─┬─qmail-clean
│ │ ├─qmail-lspawn
│ │ └─qmail-rspawn
│ ├─3*[supervise───multilog]
│ └─2*[supervise───tcpserver]
...
- Verificare se il server POP3 è attivo:
telnet yourmailserver.com 110
- Verificare se il server SMTP è attivo:
telnet yourmailserver.com 25
- Mandare un messaggio via telnet (le parti in grassetto sono quelle da digitare, le altre sono le risposte del server)
u-1@srv-1 u-1 $ telnet yourmailserver.com 25
Trying 21.40.23.46...
Connected to yourmailserver.com.
Escape character is '^]'.
220 mx.yourmailserver.com ESMTP Sendmail 8.12.9/8.12.9; Thu, 12 Jun 2003 10:06:19 -0700
helo frommail.com
250 main.signalq.com Hello [12.24.14.32], pleased to meet you
mail from: butter22333@frommail.com
250 2.1.0 butter22333@frommail.com... Sender ok
rcpt to: webmaster@yourmailserver.com
250 2.1.5 webmaster@yourmailserver.com... Recipient ok
data
354 Enter mail, end with "." on a line by itself
Subject: test message
this is a test
.
250 2.0.0 h5CH6GVI015806 Message accepted for delivery
quit
221 2.0.0 mx.yourmailserver.com closing connection
Connection closed by foreign host.
- Check di una mail via telnet (le parti in grassetto sono quelle da digitare, le altre sono le risposte del server)
telnet yourmailserver.com 110
Trying 192.168.111.200...
Connected to 192.168.111.200.
Escape character is '^]'.
+OK <9917.1183107138@yourmailserver.com>
user nome_utente
+OK
pass password_utente
+OK
- forzare la queue di qmail
trovare il pid di qmail-send e digitare
kill -s ALRM pid
- cancellare tutte le code
per cancellare le code bisogna utilizzare il pacchetto qmailhandle reperibile su http://www.linuxmagic.com/opensource/qmail/qmail-remove/ con relativo tutorial sull'uso.
- altro programma più efficace è Qmail-Remove reperibile su http://www.linuxmagic.com/opensource/qmail/qmail-remove
Errori
- cpserver: fatal: temporarily unable to figure out IP address for 0.0.0.0: file does not exist
touch /etc/dnsrewrite
- uebimiau fornisce data errata sui sistemi a 64bit
Bisogna modificare il file /var/www/html/webmail/smarty/plugins/shared.make_timestamp.php
da
if(empty($string)) {
$string = "now";
}
$time = strtotime($string);
a
if(empty($string)) {
$string = "now";
} else if(is_numeric($string)) {
return (int)$string;
}
$time = strtotime($string);
Sitografia
QMail: http://qmail.org/
Check password: http://cr.yp.to/checkpwd/install.html
Daemontools:ftp://cr.yp.to/daemontools/
ucspi-tcp:http://cr.yp.to/ucspi-tcp.html
uebimiau: http://www.uebimiau.org/
test del Relay: http://www.checkor.com/
errore data con sistemi a 64bit: http://help.directadmin.com/item.php?id=133

