Howto Qmail+checkpassword+Mysql+Spamcontrol+(E)SMTP auth+ucspi+daemontools.
Dott. Emiliano Bruni, info/at/ebruni_dot_it |
Ultima modifica: 2004/01/22 23:30 |
Copyright © 2003 |
Licenza: GNU Free Document License |
Abstract
Semplice guida che porta, passo dopo passo, all'installazione di Qmail+checkpassword basati su MySQL con applicate le patch per lo Spamcontrol, l'accesso SMTP con autenticazione, oltre all'installazione di Ucspi e dei daemontools. Questa procedura, con eventuali lievi adattamente, è stata testata su RedHat7.x,8.x,9.x e Slackware 9.0
Potete scaricare i pacchetti ed applicarvi le relative patch, o saltare direttamente al punto 22 scaricando il sorgente con le patch già installate
Download del pacchetto qmail da http://www.qmail.org/
Download patch mysql x qmail (ver 1.1.9) da http://iain.cx/qmail/mysql/download.html
Download SpamControl con (E)SMTP auth da http://www.fehcom.de/qmail/spamcontrol.html
Download Checkpassword 0.90 http://cr.yp.to/checkpwd/install.html
Download pacth per Checkpassword 2.0.1pre2 su http://iain.cx/qmail/mysql/download.html
Download mysqldump da http://iain.cx/qmail/mysql/download.html
Download daemontools da ftp://cr.yp.to/daemontools/daemontools-0.76.tar.gz)
tar zxvf qmail-1.03.tar.gz
cd qmail-1.03
Installazione patch Spamcontrol
tar zxvf ../spamcontrol_2073.tgz
vi spamcontrol.sh e impostare variabile SOLARIS a 0
./spamcontrol.sh
Installazione patch qmail-mysql-1.1.9.patch. (Questa e' una versione patchata per essere applicata dopo la patch spamcontrol. Il file che patcha la versione originale per renderla utilizzabile si chiama qmail-mysql-1.1.9.emi.patch)
cd ..
patch < ../qmail-mysql-1.1.9.emi.patch
cd qmail-1.03
patch < ../qmail-mysql-1.1.9.patch
Correggere un errore in qmail-getpw dove:
pw = (struct passwd *) malloc(sizeof(struct passwd *));
sostituire con
pw = (struct passwd *) malloc(sizeof(struct passwd));
cd ..
per redhat 9 installare le seguenti patch da
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.qmail_local.patch
patch -p1 < /usr/src/qmail/qmail-1.03.errno.patch
patch -p1 < /usr/src/qmail/qmail-1.03.qmail_local.patch
tar zvxf checkpassword-0.90.tar.gz; cd checkpassword-0.90
patch < ../checkpassword-mysql-2.0.1pre2.patch
per redhat 9 installare la seguenti patch da
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/checkpassword-0.90.errno.patch
patch -p1 < /usr/src/qmail/checkpassword-0.90.errno.patch
Aprire il file conf-qmail e conf-home in qmail-1.03 e inserire la riga /usr/local/qmail
vi Makefile e modificare in questo modo
MYSQL_LIBS=/usr/lib/mysql/libmysqlclient.a -lm -lz -lcrypt #-lsocket -lnsl
MYSQL_INCLUDE=-I/usr/include
LOGGING=#-DO_NOT_LOG_CONNECTS -DO_NOT_LOG
Dopo la compilazione e il testing ricordarsi di ricompilare con differenti
valori di logging.
vi conf-qmail e modificare la riga in /usr/local/qmail
vi Makefile e modificare le seguenti riga in questo modo:
MYSQL_LIBS=/usr/lib/mysql/libmysqlclient.a -lm -lz -lcrypt #-lsocket -lnsl
MYSQL_INCLUDE=-I/usr/include
LOGGING=#-DO_NOT_LOG_SQL -DO_NOT_LOG -DO_NOT_LOG_ERRORS
Dopo la compilazione e il testing ricordarsi di ricompilare con differenti
valori di logging.
Se non volete perdere tempo ad applicare le patch potete scaricare il sorgente qmail con le patch e le configurazioni sopra già applicate da http://www.ebruni.it/docs/qmail_mysql/bin/qmail+mysql+esmtp.tar.gz
Se non volete perdere tempo ad applicare le patch potete scaricare il sorgente di checkpassword con le patch e le configurazioni già applicate da http://www.ebruni.it/docs/qmail_mysql/bin/checkpassword-0.90+mysql.tar.gz
mkdir /usr/local/qmail
groupadd -g 601 nofiles;groupadd -g 602 qmail
Aggiunta degli utenti necessari
useradd -g nofiles -d /usr/local/qmail/alias -s /bin/true alias
useradd -g nofiles -d /usr/local/qmail -s /bin/true qmaild
useradd -g nofiles -d /usr/local/qmail -s /bin/true qmaill
useradd -g nofiles -d /usr/local/qmail -s /bin/true qmailp
useradd -g qmail -d /usr/local/qmail -s /bin/true qmailq
useradd -g qmail -d /usr/local/qmail -s /bin/true qmailr
useradd -g qmail -d /usr/local/qmail -s /bin/true qmails
Compilazione del sorgente
cd /usr/src/qmail/qmail-1.03
make setup check
./config-fast <host.domain>
Configurazione script startup del qmail
cp /usr/local/qmail/boot/home /usr/local/qmail/rc.qmail
vi /usr/local/qmail/rc.qmail e modificare ./Mailbox in ./Maildir/
Compilazione del sorgente
cd /usr/src/qmail/checkpassword-0.90
make setup check
Impostare il checkpassword a 711 con flag suid per il funzionamento con patch di auth
chmod 711 /usr/local/qmail/bin/checkpassword
chmod u+s /usr/local/qmail/bin/checkpassword
Installazione ucspi-tcp-0.88-1.i386.rpm
rpm -ivh ftp://rpmfind.net/linux/contrib/libc6/i386/ucspi-tcp-0.88-1.i386.rpm
(per redhat 9 questo rpm non va bene. prendere il sorgente,
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88-005patch.src.rpm e fare un rebuild
rpmbuild --rebuild ucspi-tcp-0.88-005patch.src.rpm e poi
rpm -ivh /usr/src/redhat/RPMS/i386/ucspi-tcp-0.88-005patch.i386.rpm)
se non si ha il supporto rpm si può scaricare il sorgente da
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
e installarlo con
tar zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check
mkdir /etc/tcp
Creare file smtp e mettere le regole per le connessioni tcp
all'smtp tipo:
cat >/etc/tcp/smtp <<EOF
127.0.0.1:allow,RELAYCLIENT=""
EOF
Compilare le regole in /etc/tcp/smtp con
tcprules /etc/tcp/smtp.cdb /etc/tcp/smtp.tmp < /etc/tcp/smtp
Creare file pop-3 e mettere le regole per le connessioni tcp
al pop3 tipo:
cat >/etc/tcp/pop-3<<EOF
:allow
:deny
EOF
Compilare le regole in /etc/tcp/pop-3 con
tcprules /etc/tcp/pop-3.cdb /etc/tcp/pop-3.tmp < /etc/tcp/pop-3
Creazione db "qmail" su mysql
mysqladmin -p create qmail
Installazione dump del database
mysql -p qmail < /usr/src/qmail/mysqldump
creazione utente "qmail" con permessi sul database "qmail"
GRANT USAGE ON *.* TO "qmail"@"localhost" IDENTIFIED BY
"qmailpass";
GRANT SELECT ,INSERT ,UPDATE , DELETE ON `qmail`.* TO "qmail"@"localhost";
e ricaricare la tabella degli utenti con
mysqladmin -p reload
creare file /usr/local/qmail/control/sqlserver cosi fatto
cat >/usr/local/qmail/control/sqlserver<<EOF
server localhost
login
qmail
password qmailpass
db qmail
EOF
Impostare i permessi al file con
chmod 644 /usr/local/qmail/control/sqlserver
chown qmaild.qmail /usr/local/qmail/control/sqlserver
Creazione e impostazione caselle di posta elettronica
mkdir /var/spool/pop
chown qmaild:qmail /var/spool/pop
chmod 711 /var/spool/pop
mkdir /var/spool/pop/domains
chown qmaild:qmail /var/spool/pop/domains
chmod 711 /var/spool/pop/domains
Installazione daemontools che eseguira e terrà sotto monitoring i processi di qmail
Creazione della directory
mkdir /usr/local/daemontools
cd /usr/local/daemontools
per redhat 9 installare la seguente patch:
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
patch -p1 < /usr/src/qmail/daemontools-0.76.errno.patch
Installazione del pacchetto
tar zxvf /usr/src/qmail/daemontools-0.76.tar.gz
cd admin/daemontools-0.76
./package/install
Creazione delle directory per il supervise dei servizi
mkdir -p /usr/local/qmail/supervise/qmail-send/log
mkdir -p /usr/local/qmail/supervise/qmail-smtpd/log
mkdir -p /usr/local/qmail/supervise/qmail-pop3d/log
mkdir /var/log/qmail
mkdir /var/log/qmail/smtpd
mkdir /var/log/qmail/pop3d
Impostazione permessi per i file di log
chown -R qmaill /var/log/qmail
Creare il file di startup del qmail-send
cat >/usr/local/qmail/supervise/qmail-send/run <<EOF
#!/bin/sh
exec /usr/local/qmail/rc.qmail
EOF
Creare il file di log per questo servizio
cat > /usr/local/qmail/supervise/qmail-send/log/run<<EOF
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
s100000 /var/log/qmail
EOF
Creare il file di start per qmail-smtpd
cat >/usr/local/qmail/supervise/qmail-smtpd/run<<EOF
#!/bin/sh
QMAILDUID=\`id -u qmaild\`
NOFILESGID=\`id -g qmaild\`
MAXSMTPD=\`cat /usr/local/qmail/control/concurrencyincoming\`
exec /usr/local/bin/softlimit -m 4000000
\\
/usr/local/bin/tcpserver -v -l localhost -p -x /etc/tcp/smtp.cdb -c "\$MAXSMTPD"
\\
-u "\$QMAILDUID" -g "\$NOFILESGID" 0 smtp \\
/usr/local/bin/rblsmtpd -r relays.ordb.org \\
sh -c '{ test -z "\$TCPREMOTEHOST" && [ "\$TCPREMOTEIP" != "127.0.0.1" ] ; } \\
&& echo "451 bad reverse DNS
\$TCPREMOTEIP" \\
|| /usr/local/qmail/bin/qmail-smtpd \\
/usr/local/qmail/bin/checkpassword /bin/true' 2>&1
EOF
se non si vuole utilizzare le blacklist usare questo script
cat >/usr/local/qmail/supervise/qmail-smtpd/run<<EOF
#!/bin/sh
QMAILDUID=\`id -u qmaild\`
NOFILESGID=\`id -g qmaild\`
MAXSMTPD=\`cat /usr/local/qmail/control/concurrencyincoming\`
exec /usr/local/bin/softlimit -m 4000000
\\
/usr/local/bin/tcpserver -v -l localhost -p -x /etc/tcp/smtp.cdb -c "\$MAXSMTPD"
\\
-u "\$QMAILDUID" -g "\$NOFILESGID" 0 smtp \\
sh -c '{ test -z "\$TCPREMOTEHOST" && [ "\$TCPREMOTEIP" != "127.0.0.1" ] ; } \\
&& echo "451 bad reverse DNS
\$TCPREMOTEIP" \\
|| /usr/local/qmail/bin/qmail-smtpd \\
/usr/local/qmail/bin/checkpassword /bin/true' 2>&1
EOF
se non si vuole il controllo del reverse DNS usare quest'altro script
cat >/usr/local/qmail/supervise/qmail-smtpd/run<<EOF
#!/bin/sh
QMAILDUID=\`id -u qmaild\`
NOFILESGID=\`id -g qmaild\`
MAXSMTPD=\`cat /usr/local/qmail/control/concurrencyincoming\`
exec /usr/local/bin/softlimit -m 4000000
\\
/usr/local/bin/tcpserver -v -l localhost -p -x /etc/tcp/smtp.cdb -c "\$MAXSMTPD"
\\
-u "\$QMAILDUID" -g "\$NOFILESGID" 0 smtp \\
/usr/local/qmail/bin/qmail-smtpd \\
/usr/local/qmail/bin/checkpassword /bin/true 2>&1
EOF
Creare un file per il log di questo servizio
cat >/usr/local/qmail/supervise/qmail-smtpd/log/run<<EOF
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t
\\
s100000 /var/log/qmail/smtpd
EOF
Creare un file di run per il servizio pop3
cat > /usr/local/qmail/supervise/qmail-pop3d/run<<EOF
#!/bin/sh
exec /usr/local/bin/softlimit -m 4000000
\\
/usr/local/bin/tcpserver -v -x /etc/tcp/pop-3.cdb -R -H -l 0 0 pop-3 \\
/usr/local/qmail/bin/qmail-popup
\\
host.domain /usr/local/qmail/bin/checkpassword \\
/usr/local/qmail/bin/qmail-pop3d Maildir 2>&1
EOF
Creare un file per il log di questo servizio
cat >/usr/local/qmail/supervise/qmail-pop3d/log/run<<EOF
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t
\\
s100000 /var/log/qmail/pop3d
EOF
Rendere gli script sopra eseguibili con il comando
chmod 755 /usr/local/qmail/supervise/qmail-send/run
chmod 755 /usr/local/qmail/supervise/qmail-send/log/run
chmod 755 /usr/local/qmail/supervise/qmail-smtpd/run
chmod 755 /usr/local/qmail/supervise/qmail-smtpd/log/run
chmod 755 /usr/local/qmail/supervise/qmail-pop3d/run
chmod 755 /usr/local/qmail/supervise/qmail-pop3d/log/run
Creare il file concurrencyincoming
echo 20 > /usr/local/qmail/control/concurrencyincoming
chmod 664 /usr/local/qmail/control/concurrencyincoming
aggiunta dei filtri
echo '*@*@*' > /usr/local/qmail/control/badrcptpatterns
echo '*!*' >> /usr/local/qmail/control/badrcptpatterns
echo '*@*@*' > /usr/local/qmail/control/badmailpatterns
echo '*!*' >> /usr/local/qmail/control/badmailpatterns
Link dei file di esecuzione nella directory /services
ln -s /usr/local/qmail/supervise/qmail-pop3d /service
ln -s /usr/local/qmail/supervise/qmail-send /service
ln -s /usr/local/qmail/supervise/qmail-smtpd /service
Scaricare lo script di startup da
http://www.ebruni.it/docs/qmail_mysql/bin/qmaild e
cp qmaild /etc/rc.d/init.d/qmaild
chmod 755 /etc/rc.d/init.d/qmaild
Rimozione sendmail
/etc/rc.d/init.d/sendmail stop
rpm -e --nodeps sendmail
Rimozione pop3
vi /etc/xinetd.d/ipop3 e impostare disable=yes
service xinetd restart
eseguire qmail
/etc/rc.d/init.d/qmaild start
inserire lo script nei runlevel
chkconfig --add qmaild
chkconfig --level 235 qmaild on
simulazione sendmail
ln -s /usr/local/qmail/bin/sendmail /usr/sbin/sendmail
In /etc/login.defs deremmare QMAIL_DIR MailDir e remmare MAILDIR
Se non si vuole far utilizzare il DNS (perche', per
esempio, si sta facendo delle prove offline) per il dominio dell'email
del mittente bisogna modificare nelllo script
/usr/local/qmail/supervise/qmail-smtpd/run
l'inizio:
exec /usr/local/bin/softlimit
...
in
exec /usr/local/bin/envdir ./env /usr/local/bin/softlimit
...
mkdir /usr/local/qmail/supervise/qmail-smtpd/env
echo "" > /usr/local/qmail/supervise/qmail-smtpd/env/NODNSCHECK
Se non si vuole utilizzare il DNS neanche nel tcpserver
sostituire la riga
/usr/local/bin/tcpserver -v -l localhost -p -x /etc/tcp/smtp.cdb -c "\$MAXSMTPD"
\\
con
/usr/local/bin/tcpserver -v -l localhost -P -H -R -x /etc/tcp/smtp.cdb -c "\$MAXSMTPD" \\
E' possibile creare degli script che dinamicamente
impostano le variabili d'ambiente per il qmail. Per esempio e' possibile
impostare la variabile d'ambiente $RELAYCLIENT per permettere il relay a
client basandosi su logiche diverse dal range di indirizzi IP, per esempio
guardando ad un fle di log per vedere se l'utente, collegato con un qualche
indirizzo ip è collegato con un servizio gestito da noi.
Per esempio, creiamo una cartella
mkdir /usr/local/qmail/supervise/qmail-smtpd/envdyn
modifichiamo il file
/usr/local/qmail/supervise/qmail-smtpd/run
in questo modo:
...
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
./envdyn/relay_wifi_user \
/usr/local/qmail/bin/qmail-smtpd \
...
e creiamo il nostro file relay_wifi_user ricordando che, per aggiungere una
variabile d'ambiente basta scrivere del codice tipo $ENV{RELAYCLIENT}
= "" e che, all'uscita del nostro programma (in ogni caso) bisogna
sempre continuare la sequenza lanciando gli altri programmi con
exec @ARGV;