QMail HOW-TO: installazione, configurazione, tips & tricks di QMail

Da Wizard linux team wiki.

Jump to: navigation, search

Contents

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

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

  • 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.

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

Personal tools
wizard linux team