Instalando e configurando o netqmail

Atualizado em 30/01/2006 ás 15:45:23

Bom a algum tempo prometi um tutorial do qmail, e aqui está o mesmo. Pois bem, não irei fazer uma descrição do qmail, pois já existem vários artigos que já fazem isso. Irei simplesmente mostrar como configurá-lo usando o daemontools para controlar os processos de inicialização. Lembrando que esta instalação foi baseada no slackware 10.2.

Será instalado: ucspi-tcp + netqmail + vpopmail + autorespond + ezmlm + daemontools + courier-imap + qmailadmin + clamavis + spamassassin + qmail-scanner.

Vamos primeiramente criar os diretórios onde serão baixados os sources:

mkdir -p /usr/src/qmailsource/patches
cd /usr/src/qmailsource

agora vamos fazer o download dos pacotes necessários:

wget http://www.qmail.org/netqmail-1.05.tar.gz
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
wget http://www.inter7.com/devel/ezmlm-0.53-idx-0.41.tar.gz
wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz
wget http://umn.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.13.tar.gz
wget http://umn.dl.sourceforge.net/sourceforge/qmailadmin/qmailadmin-1.2.9.tar.gz
wget http://umn.dl.sourceforge.net/sourceforge/courier/courier-authlib-0.58.tar.bz2
wget http://umn.dl.sourceforge.net/sourceforge/courier/courier-imap-4.0.6.tar.bz2
wget http://umn.dl.sourceforge.net/sourceforge/qmhandle/qmhandle-1.2.0.tar.gz
wget http://umn.dl.sourceforge.net/sourceforge/tnef/tnef-1.3.4.tar.gz
wget http://umn.dl.sourceforge.net/sourceforge/courier/maildrop-2.0.1.tar.bz2
wget http://umn.dl.sourceforge.net/sourceforge/clamav/clamav-0.88.tar.gz
wget http://umn.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.25.tgz

cd /usr/src/qmailsource/patches

wget http://www.claudioborges.org/patches/readme-but3k4-V1.txt
wget http://www.claudioborges.org/patches/netqmail-1.05-but3k4-V1.patch

Precisamos primeiro descompactar o source do netqmail para instalar os patches do uscpi-tcp:

cd /usr/src/qmailsource
tar xvzf netqmail-1.05.tar.gz
cd netqmail-1.05
./collate.sh

agora podemos continuar com a nossa instalacao :D

Instalando o ucspi-tcp

O ucspi-tcp é um programa que gerencia a inicialização do qmail.

cd /usr/src/qmailsource
tar xvzf ucspi-tcp-0.88.tar.gz
cd  ucspi-tcp-0.88
patch -p1 <../netqmail-1.05/other-patches/ucspi-tcp-0.88.a_record.patch
patch -p1 <../netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
patch -p1 <../netqmail-1.05/other-patches/ucspi-tcp-0.88.nodefaultrbl.patch
make
make setup check

Instalando o qmail

Existem inúmeros patches para o qmail, só que a maioria deles não é portado para o netqmail. Resolvi então juntar todos os patches que acho excenciais em um único patch. Para entender melhor o patch que fiz, sugiro que dê uma lida no readme, mas mesmo assim vai uma breve descrição deles:

- big-concurrency.patch - Aceita o qmail usar um concurrency maior que 240.

- big-todo.103.patch - cria subdiretórios dentro do diretório qmail/queue/todo. Isso ajuda no processamento de grandes quantidades de mensagens.

- ext_todo-20030105.patch - Corrige alguns problemas com a queue do qmail, quando há um alto número de mensagens a serem processadas.

- netqmail-maildir++.patch - Corrige um problema de quota.

- patch-qmail-1.03-rfc2821.diff - Coloca o qmail para trabalhar de acordo com a RFC-2821, que faz com que ele liste todos os MX por ordem de preferência.

- netqmail-1.05-dns.patch - Corrige um problema de dns.

- qmail-1.03-mfcheck.4.patch - Faz com que o qmail verifique se o domínio do destinatário é valido ou não.

- qmail-badrcptto.patch - Faz praticamente a mesma coisa do badmailfrom, só que para o destinatário, ou seja se você quizer que algum usuário não receba email, é só adicionar ele no badrcptto.

- qmail-bounce.patch - Aceita você controlar o tamanho das mensagens bounce.

- qmail-canonical.rcpt.patch - Faz com que o qmail-remote mostre o email do destinatario nos logs. Muito útil para identificação de mensagens enviadas.

- qmail-date-localtime.patch - Faz com que o qmail use o timezone local do servidor.

- qmail-doublebounce-trim.patch - Faz com que o qmail não aceite double bounce.

- qmail-nullenvsender.patch - Como o próprio nome diz, este patch rejeita mensagens que são enviadas para multíplos destinatários por um remete com endereço nulo.

- qmail-smtpd-log-badmailfrom.patch - Esse acho que nem preciso dizer pra que serve né? o_0

- qmail-smtpd-relay-reject.patch - Bloqueia o relay para quem tem caracteres inválidos "!, % e @" no lugar do username.

- qmail-tap.diff - Esse é muito bom, deixa obsoleto o meu tutorial de conta pega tudo :~. A função dele é muito boa, através de um arquivo "/var/qmail/taps", você faz com que toda mensagem enviada e recebida para uma determinada conta ou domínio, seja enviada para uma conta específica.

- tarpit.patch - Este aqui adiciona um tempo de espera entre cada mensagem, uma especie de anti-spam.

Adicionando os usuários e grupos.

groupadd 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
groupadd 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

cd /usr/src/qmailsource
cd netqmail-1.05/netqmail-1.05
patch -p0 < ../../patches/netqmail-1.05-but3k4-V1.patch

mkdir /var/qmail /etc/qmail
ln -s /etc/qmail /var/qmail/control

make setup check

./config-fast maquina.dominio

cd ~alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 ~alias/.qmail*
mv /usr/lib/sendmail /usr/lib/sendmail.OLD
mv /usr/sbin/sendmail /usr/sbin/sendmail.OLD
ln -sf /var/qmail/bin/sendmail /usr/lib/sendmail
ln -sf /var/qmail/bin/sendmail /usr/sbin/sendmail

Instalando o vpopmail

O vpopmail é o responsável pelos usuários, já que com ele, não é necessário ter os usuários cadastrados no sistema. Caso for usar com suporte a MySQL, não se esqueça de instalá-lo em seu sistema :D

Adicionando o usuário e grupo sob o qual o vpopmail ira rodar:

groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 -d /var/vpopmail -s /bin/false vpopmail

cd /usr/src/qmailsource
tar xvzf vpopmail-5.4.13.tar.gz
mkdir -p /var/vpopmail/etc

cd vpopmail-5.4.13

Com suporte a MySQL use:

./configure --enable-roaming-users \
	--enable-relay-clear-minutes=30 \
	--enable-auth-module=mysql \
	--disable-many-domains 

Sem suporte a MySQL use:

./configure --enable-roaming-users \
	--enable-relay-clear-minutes=30

Agora que escolheu se vai usar MySQL ou não, podemos continuar a instalação:

make
make install-strip

echo '127.:allow,RELAYCLIENT=""' >> /var/vpopmail/etc/tcp.smtp
tcprules /var/vpopmail/etc/tcp.smtp.cdb /var/vpopmail/etc/tcp.smtp.tmp < /var/vpopmail/etc/tcp.smtp

Vamos adicionar uma entrada no crontab para limpar o open-relay após 30 minutos, ou seja após esse tempo o usuário terá que fazer um pop novamente para poder usar o smtp.

crontab -l > /tmp/crontab.vpopmail
echo "30 * * * * /var/vpopmail/bin/clearopensmtp >/dev/null 2>&1 " >> /tmp/crontab.vpopmail
crontab /tmp/crontab.vpopmail -u root
rm /tmp/crontab.vpopmail

Caso tenha optado por usar o vpopmail com suporte a mysql, precisamos criar o banco do vpopmail no mysql, starte o mysql depois digite:

echo "create database vpopmail" | mysql -uroot -p
echo "grant all privileges on vpopmail.* to 'vpopmail'@'localhost' \
identified by 'vpoppw'" | mysql -uroot -p

echo "flush privileges" | mysql -uroot -p

mv /var/vpopmail/etc/vpopmail.mysql /var/vpopmail/etc/vpopmail.mysql.orig

echo "# host|port|user|password|database
localhost|0|vpopmail|vpoppw|vpopmail" >> /var/vpopmail/etc/vpopmail.mysql

Instalando o autorespond

Como o próprio nome diz, ele é um programa que serve para enviar uma resposta automática, definida pelo usuário.

cd /usr/src/qmailsource
tar xvzf autorespond-2.0.5.tar.gz
cd autorespond-2.0.5
make
make install

Instalando o ezmlm

ezmlm é um gerenciador de lista de discursões.

cd /usr/src/qmailsource
tar xvzf ezmlm-0.53-idx-0.41.tar.gz
cd ezmlm-0.53-idx-0.41
make 
make setup

Instalando o daemontools

O daemontools é uma coleção de scripts que serve para gerenciar serviços em sistemas *UNIX. Ná nossa instalação ele será usado para controlar o qmail + vpopmail e o courier-imap.

cd /usr/src/qmailsource
tar xvzf daemontools-0.76.tar.gz
cd admin
mv daemontools-0.76 /usr/local/
chmod 1755 /usr/local/daemontools-0.76
cd /usr/local/daemontools-0.76
patch -p1 < /usr/src/qmailsource/netqmail-1.05/other-patches/daemontools-0.76.errno.patch
sh package/install

Instalando o Courier-imap

courier-imap é um excelente servidor pop/imap. Foi feito para ser usado com o qmail e tem total compatibilidade com o vpopmail. Primeiramente vamos instalar o courier-authlib pois a nova versão do courier-imap necessita dele para ser instalado:

cd /usr/src/qmailsource
tar xvjf courier-authlib-0.58.tar.bz2

cd courier-authlib-0.58
./configure \
	--prefix=/usr/local/courier-authlib \
	--enable-unicode \
	--with-trashquota \
	--without-authpam \
	--without-authldap \
	--without-authpwd \
	--without-authmysql \
	--without-authpgsql \
	--without-authshadow \
	--without-authuserdb \
	--without-authcustom \
	--without-authcram \
	--without-authdaemon \
	--with-authvchkpw \
	--with-mailuser=vpopmail \
	--with-mailgroup=vchkpw \
	--disable-root-check \
	--enable-workarounds-for-imap-client-bugs

make
make install-strip
make install-configure

Agora instalamos o courier-imap.

cd /usr/src/qmailsource
tar xvjf courier-imap-4.0.6.tar.bz2

cd courier-imap-4.0.6

COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig \
CPPFLAGS=-I/usr/local/courier-authlib/include \
./configure \
	--prefix=/usr/local/courier-imap \
	--disable-root-check

make
make install-strip
make install-configure

Agora com o courier-imap instalado, vamos fazer algumas alterações. Para isso faça o seguinte:

cat /usr/local/courier-imap/etc/imapd.dist | sed -e \
'/TCPDOPTS=/s/-nodnslookup -noidentlookup/-nodnslookup -noidentlookup \
-user=vpopmail -group=vchkpw/g' -e '/IMAPDSTART=/s/NO/YES/g' >> /usr/local/courier-imap/etc/imapd

Crie o arquivo /etc/rc.d/rc.courier-imap com o seguinte conteúdo:

#!/bin/sh
#
# Start/Stop/Restart the Courier-imap
# By Cláudio Borges <cbsfilho[at].gmail.com>

courier_imap_start() {
	/usr/local/courier-authlib/sbin/authdaemond start
	/usr/local/courier-imap/libexec/imapd.rc start
}

courier_imap_stop() {
	/usr/local/courier-authlib/sbin/authdaemond stop
	/usr/local/courier-imap/libexec/imapd.rc stop
}

courier_imap_reload() {
	/usr/local/courier-authlib/sbin/authdaemond restart
	/usr/local/courier-imap/libexec/imapd.rc restart
}

case "$1" in
start)
	echo -n "Starting Courier-IMAP server:"
	courier_imap_start
	echo  ""
	;;
stop)
        echo -n "Stopping Courier-IMAP server:"
	courier_imap_stop
	echo ""
	;;
restart)
	$0 stop
	sleep 1
	$0 start
        ;;
reload)
        echo -n "Reloading Courier-IMAP server:"
	courier_imap_reload
	echo ""
	;;
*)
	echo "Usage $0 start|stop|reload|restart"
esac
exit 0

E para finalizar a instalação do courier-imap:

chmod 755 /etc/rc.d/rc.courier-imap
echo "# Inicializacao do Courier-imap
#
/etc/rc.d/rc.courier-imap start" >> /etc/rc.d/rc.local

Instalando o qmailadmin

Qmailadmin é uma interface web para a administração dos usuários do seu domínio, ou seja através dele você pode adicionar e remover usuários, mudar senhas, criar aliases (apelidos). etc.

Obs: É necessário ter um servidor web para poder usar o qmailadmin. Favor instalar o apache. :)

cd /usr/src/qmailsource

tar xvzf qmailadmin-1.2.9.tar.gz
cd qmailadmin-1.2.9
./configure --enable-htmldir=/var/www/htdocs \
        --enable-cgibindir=/var/www/cgi-bin \
        --enable-modify-quota \
        --enable-domain-autofill
make
make install-strip

Instalando o qmHandle

O qmHandle é usando para gerenciar a fila de mensagens (queue) do qmail, tanto mensagens locais como mensagens remotas, server também para apagar mensagens com determinado subject e etc.

cd /usr/src/qmailsource
tar -zxvf qmhandle-1.2.0.tar.gz
cp qmHandle /var/qmail/bin/
ln -s /var/qmail/bin/qmHandle /usr/local/bin

Agora iremos criar o qmailctl, o site Life With Qmail disponibiliza este script, só que o nosso qmailctl, está alterado para iniciar o vpopmail. Então crie o arquivo qmailctl dentro do diretório /var/qmail/bin com o seguinte conteúdo:

#!/bin/sh

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

case "$1" in
  start)
    echo "Starting qmail"
    if svok /service/qmail-send ; then
      svc -u /service/qmail-send
    else
      echo qmail-send supervise not running
    fi
    if svok /service/qmail-smtpd ; then
      svc -u /service/qmail-smtpd
    else
      echo qmail-smtpd supervise not running
    fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    if svok /service/qmail-pop3d ; then
      svc -u /service/qmail-pop3d
    else
      echo qmail-pop3d supervise not running
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -d /service/qmail-smtpd
    echo "  qmail-send"
    svc -d /service/qmail-send
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
    echo "  qmail-pop3d"
    svc -d /service/qmail-pop3d
    ;;
  stat)
    svstat /service/qmail-send
    svstat /service/qmail-send/log
    svstat /service/qmail-smtpd
    svstat /service/qmail-smtpd/log
    svstat /service/qmail-pop3d
    svstat /service/qmail-pop3d/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /service/qmail-send
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /service/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /service/qmail-smtpd
    echo "Pausing qmail-pop3d"
    svc -p /service/qmail-pop3d
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /service/qmail-smtpd
    echo "Continuing qmail-pop3d"
    svc -c /service/qmail-pop3d
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /service/qmail-smtpd
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /service/qmail-send
    echo "* Restarting qmail-smtpd."
    svc -u /service/qmail-smtpd
    echo "* Restarting qmail-pop3d."
    svc -t /service/qmail-pop3d
    ;;
  cdb)
    tcprules /var/vpopmail/etc/tcp.smtp.cdb /var/vpopmail/etc/tcp.smtp.tmp < /var/vpopmail/etc/tcp.smtp
    chmod 644 /var/vpopmail/etc/tcp.smtp.cdb
    echo "Reloaded /var/vpopmail/etc/tcp.smtp."
    ;;
  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 -- schedules queued messages for immediate 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

Dando permissão de execução e fazendo o link para o qmailctl:

chmod 755 /var/qmail/bin/qmailctl
ln -sf /var/qmail/bin/qmailctl /usr/local/bin

Vamor agora criar os scripts para inicializar o qmail:

crie o arquivo /var/qmail/rc com o seguinte conteúdo:

#!/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`"

Dando permissão de execução:

chmod 755 /var/qmail/rc

Definindo qual o tipo de caixa de mensagem que iremos usar:

echo "./Maildir" > /var/qmail/control/defaultdelivery

Criando os diretórios necessários:

mkdir -p /var/qmail/supervise/{qmail-send,qmail-smtpd,qmail-pop3d}/log
mkdir -p /var/log/qmail/{smtpd,pop3d}

Crie o arquivo /var/qmail/supervise/qmail-send/run com o conteúdo:

#!/bin/sh
#
exec /var/qmail/rc

Agora crie o arquivo /var/qmail/supervise/qmail-send/log/run com o conteúdo:

#!/bin/sh
#
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s5000000 /var/log/qmail

crie o arquivo /var/qmail/supervise/qmail-smtpd/run com o conteúdo:

#!/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 5000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /var/vpopmail/etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -r bl.spamcop.net \
        -r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1

crie o arquivo /var/qmail/supervise/qmail-smtpd/log/run com o conteúdo:

#!/bin/sh
#
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s5000000 /var/log/qmail/smtpd

crie o arquivo /var/qmail/supervise/qmail-pop3d/run com o conteúdo:

#!/bin/sh
DOMAIN=`cat /etc/qmail/defaultdomain`
   exec /usr/local/bin/softlimit -m 5000000 \
     /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
       $DOMAIN /var/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

Crie o arquivo /var/qmail/supervise/qmail-pop3d/log/run com o conteúdo:

#!/bin/sh
#
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s5000000 /var/log/qmail/pop3d

e para finalizar:

echo 60 > /var/qmail/control/concurrencylocal
echo 60 > /var/qmail/control/concurrencyincoming
echo 60 > /var/qmail/control/concurrencyremote
echo 60 > /var/qmail/control/tarpitcount
echo 60 > /var/qmail/control/tarpitdelay
chmod 644 /var/qmail/control/concurrencylocal
chmod 644 /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyremote
chmod 755 /var/qmail/supervise/{qmail-send,qmail-smtpd,qmail-pop3d}/run
chmod 755 /var/qmail/supervise/{qmail-send,qmail-smtpd,qmail-pop3d}/log/run
chown qmaill /var/log/qmail /var/log/qmail/smtpd /var/log/qmail/pop3d
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /var/qmail/supervise/qmail-pop3d /service

Agora com o qmail instalado, vamos instalar os programas adicionais.

Instalando o tnef

O Microsoft Outlook e mais alguns softwares da Microsoft, utilizam um tipo de codificação próprio em suas mensagens. O tnef é o programa que decodifica essas mensagens, para poderem ser verificadas por um antivírus.

mkdir -p /usr/src/qmailsource
cd /usr/src/qmailsource
wget http://umn.dl.sourceforge.net/sourceforge/tnef/tnef-1.3.4.tar.gz
tar xvzf tnef-1.3.4.tar.gz
cd tnef-1.3.4
./configure
make
make install

Instalando o Maildrop

Maildrop é um filtro de email, que é usando em conjunto com o qmailscanner para filtrar mensagens.

cd /usr/src/qmailsource/
wget http://umn.dl.sourceforge.net/sourceforge/courier/maildrop-2.0.1.tar.bz2
tar xvjf maildrop-2.0.1.tar.bz2
cd maildrop-2.0.1
./configure --enable-maildrop-uid=root --enable-maildrop-gid=vchkpw 
make
make install-strip
make install-man

Instalando o Clamavis Antivírus

O Clamavis é um antivírus mantido sobre a licença GPL, e foi feito para rodar em sistemas *UNIX. O maior propósito deste software é a integração com servidores de email (scanear anexos), em nosso caso o qmail :)

Obs: Vamos cria o usuario e grupo qscand, pois o clamav, spamassassin e qmailscanner irão rodar sob este usuário.

groupadd qscand
useradd qscand -g qscand -m -s /bin/false

Agora instalado o clamavis:

cd /usr/src/qmailsource/
wget http://umn.dl.sourceforge.net/sourceforge/clamav/clamav-0.88.tar.gz
tar xvzf clamav-0.88.tar.gz
cd clamav-0.88
./configure --prefix=/usr \
	--sysconfdir=/etc \
	--with-user=qscand \
	--with-group=qscand
make
make check
make install

Com o clamavis instalado edite o arquivo /etc/clamd.conf modifique as seguintes linhas:

Example - Comente esta linha
LogFile - Descomente esta linha e mude o valor para /var/log/clamav/clamd.log
LogFileMaxSize - Descomente esta linha e mude o valor para 0
LogTime - Descomente esta linha
LogClean - Descomente esta linha
MaxThreads - Descomente esta linha
User - descomente esta linha e mude o user para qscand

No arquivo /etc/fresclam.conf descomente a seguinte linha:

Example - Comente esta linha
UpdateLogFile - Descomente esta linha e mude o valor para /var/log/clamav/freshclam.log
DatabaseOwner - Descomente esta linha e mude o user para qscand

Crie o arquivo /etc/rc.d/rc.clamav com o seguinte conteúdo:

#!/bin/sh
#
# /etc/rc.d/rc.clamav
#
# Start/stop/restart the clamav Antivirus server.
#
# To make clamav start automatically at boot, make this
# file executable:  chmod 755 /etc/rc.d/rc.clamav
# by Cláudio Borges <cbsfilho[at].gmail.com>

clamav_start() {
  if [ -x /usr/sbin/clamd ]; then
	if [ -e /tmp/clamd ]; then
		rm /tmp/clamd
	fi
	echo "Starting Clamav..."
	/usr/sbin/clamd
  fi
}

clamav_stop() {
  killall clamd
}

clamav_restart() {
  clamav_stop
  sleep 2
  clamav_start
}

case "$1" in
'start')
  clamav_start
  ;;
'stop')
  clamav_stop
  ;;
'restart')
  clamav_restart
  ;;
*)
  # Default is "start", for backwards compatibility with previous
  # Slackware versions.  This may change to a 'usage' error someday.
  clamav_start
esac

Mudando a permissão e colocando-o para ser iniciado no boot:

chmod +x /etc/rc.d/rc.clamav
echo "/etc/rc.d/rc.clamav start" >> /etc/rc.d/rc.local

Criando o diretório de log e mudando algumas permissões:

mkdir /var/log/clamav
chown -R qscand:qscand /var/log/clamav /usr/share/clamav

Iniciando o clamav:

/etc/rc.d/rc.clamav start

Vamos adicionar uma entrada no crontab para rodar o freshclam que faz a atualização da database de vírus do clamavis, todos os dias as 2 da manhã.

crontab -l > /tmp/crontab.clamav
echo "0 2 * * * /usr/bin/freshclam --quiet -l /var/log/clamav/freshclam.log" >> /tmp/crontab.clamav
crontab /tmp/crontab.clamav -u root
rm /tmp/crontab.clamav

Instalando o Spamassassin

O spamassassin é um programa usado para barrar spams, que hoje em dia virou um praga. Como dependências, o spamassassin precisa de alguns módulos perl. Existem 2 meios de instalá-los: ou você baixa do site do cpan e compila manualmente, ou você usa o módulo cpan. Em nossa instalação iremos usar o módulo Cpan, pois além de ser mais prático, se algum dos módulos tiver dependência ele irá suprí-la automaticamente. Se for a primeira vez que você estiver usando o Cpan, ele vai fazer algumas perguntas, então é só respondê-las e no final ele irá instalar o módulo desejado.

Obs: Para instalar o módulo Net::DNS, na hora que pedir:

Do you want to enable these tests? [y]

Pressione "n", pois na maioria das vezes dá erro, nas demais opções somente pressione <enter>.

perl -MCPAN -e 'install DB_File'
perl -MCPAN -e 'install Digest::SHA1'
perl -MCPAN -e 'install Digest::HMAC'
perl -MCPAN -e 'install Net::DNS'
perl -MCPAN -e 'install Time::HiRes'
perl -MCPAN -e 'install HTML::Tagset'
perl -MCPAN -e 'install HTML::Parser'

Agora vamos instalar o spamassassin:

perl -MCPAN -e 'install Mail::SpamAssassin'

O SpamAssassin traz dentro do diretório spamd, dentro do seu source, um script de inicialização para o slackware, mas, para este script poder funcionar corretamente, foi necessário fazer algumas alterações. Crie o arquivo /etc/rc.d/rc.spamassassin com o seguinte conteúdo:

#!/bin/sh

# Spamd init script for Slackware 10.0
# August, 2th 2003
# Martin Ostlund, nomicon
# Altered by: Claudio Borges <cbsfilho[at].gmail.com>
# Sun Oct 2 12:23:15 BRT 2005

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/usr/bin/spamd
NAME=spamd
SNAME=rc.spamassassin
DESC="SpamAssassin Mail Filter Daemon"
PIDFILE="/var/tmp/$NAME.pid"
PNAME="spamd"
DOPTIONS="-x -u qscand -d --pidfile=$PIDFILE"

KILL="/bin/kill"
KILLALL="/bin/killall"
# Defaults - don't touch, edit /etc/mail/spamassassin/local.cf
ENABLED=0
OPTIONS=""

set -e

case "$1" in
  start)
	echo -n "Starting $DESC: "
	$PNAME $OPTIONS $DOPTIONS 
	echo "$NAME."
	;;
  stop)
	echo -n "Stopping $DESC: "
        $KILL `cat $PIDFILE`
	/bin/rm $PIDFILE
	echo "$NAME."
	;;
  restart|force-reload)
	echo -n "Restarting $DESC: "
	$0 stop
	sleep 1
	$0 start
	echo "$NAME."
	;;
  *)
	ME=/etc/rc.d/$SNAME
	echo "Usage: $ME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0

Mudando a permissão e colocando o spamassassin para iniciar no boot:

chmod +x /etc/rc.d/rc.spamassassin
echo "/etc/rc.d/rc.spamassassin start" >> /etc/rc.d/rc.local

Edite o arquivo /etc/mail/spamassassin/local.cf e descomente as linhas:

required_hits 5.0
rewrite_header Subject *****SPAM*****
report_safe 1
use_bayes 1
bayes_auto_learn 1

Iniciando o spamassassin:

/etc/rc.d/rc.spamassassin start

Instalando o Qmail-Scanner

O Qmail-Scanner é um scanner de email que foi feito especialmente para rodar com o qmail. Como foi dito no início deste artigo, ele necessita que o qmail tenha sido compilado com o patch "qmailqueue.patch".

Por default o qmailscanner necessita do suidperl para ser instalado. O suidperl por razões de segurança, não vem instalado no slackware. mas não se desespere, há uma maneira de rodar o qmailscanner sem ele. :)

Primeiro vamos instalar o wrapper, que irá substituir o suidperl. Ele cria o arquivo /var/qmail/bin/qmail-scanner-queue, que irá chamar o qmail-scanner-queue.pl, no lugar do suid padrão.

cd /usr/src/qmailsource
wget http://umn.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.25.tgz
tar xvzf qmail-scanner-1.25.tgz
cd /usr/src/qmailsource/qmail-scanner-1.25/contrib

make
make install

Agora instalamos o qmailscanner:

Obs: Substitua dominio.com.br, pelo seu domínio. Repare também que estamos usando o fast_spamassassin com a opção ="*****SPAM*****", isso é por que o fast_spamassassin não altera o subject da mensagem marcada como spam.

cd /usr/src/qmailsource/qmail-scanner-1.25/
./configure --debug yes \
	--admin postmaster \
	--domain dominio.com.br \
	--scanners clamdscan,fast_spamassassin="*****SPAM*****" \
	--notify psender,nmlvadm \
	--unzip yes \
	--lang pt_BR \
	--skip-setuid-test \
	--no-QQ-check

mkdir -p /var/spool/qmailscan/{quarantine/{tmp,cur,new},working/{tmp,cur,new},archive/{tmp,cur,new},tmp}
cp quarantine-attachments.txt /var/spool/qmailscan/
cp qmail-scanner-queue.pl /var/qmail/bin/qmail-scanner-queue.pl
chmod 0755  /var/qmail/bin/qmail-scanner-queue.pl
chown -R qscand /var/spool/qmailscan/
setuidgid qscand /var/qmail/bin/qmail-scanner-queue -z
setuidgid qscand /var/qmail/bin/qmail-scanner-queue -g

Edite o arquivo /var/qmail/bin/qmail-scanner-queue.pl e remova o -T da primeira linha do arquivo.

Agora vamos adicionar uma entrada no crontab, para que todo dia às 00:00 horas, ele inicialize a database, e limpe os arquivos antigos que estão dentro do /var/spool/qmailscan/tmp/.

crontab -l >> /tmp/crontab.qmailscanner
echo "0 0 * * * /var/qmail/bin/qmail-scanner-queue -z" >> /tmp/crontab.qmailscanner
crontab /tmp/crontab.qmailscanner -u root
rm /tmp/crontab.qmailscanner

Agora vamos fazer o qmail chamar o qmail-scanner toda vez que ele enviar e receber alguma mensagem. Para isso, altere o arquivo /var/qmail/supervise/qmail-smtpd/run, e logo abaixo da linha "#!/bin/sh", acrescente:

QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue" 
export QMAILQUEUE

Obs: mude o softlimit para 50000000

Veja como ficou o arquivo /var/qmail/supervise/qmail-smtpd/run com as alterações:

#!/bin/sh

QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue"
export QMAILQUEUE
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 50000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /var/vpopmail/etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -r bl.spamcop.net \
        -r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1

Pronto, agora você tem um servidor de emails completo, com proteção contra vírus e anti-spam. Só falta adicionar o domínio, para isso entre no diretório /var/vpopmail/bin e digite:

./vadddomain dominio.com.br

o resultado será:

root@slack:/var/vpopmail/bin# ./vadddomain linuxti.pro.br
Please enter password for postmaster: 
enter password again: 

Agora que seu domínio está criado, basta apenas adicionar os usuários. Caso queira usar o qmailadmin para cadastrá-los, pois com ele é muito mais fácil e cômodo, pois tem uma interface simples e amigável. então digite no seu browser:

http://ip_do_servidor/cgi-bin/qmailadmin

Vai aparecer a tela inicial do qmailadmin, ae é só preencher os dados e adicionar os usuários.

Para configurar a conta nos clientes de email outlook, evolution, thunderbird, etc. Você tem que colocar o nome do usuario@dominio.com.br, pois a autenticação é feita assim.

Até a próxima.

Cláudio Borges

cbsfilho[at].gmail.com
www.claudioborges.org