Instalando e configurando um servidor de emails usando qmail

By Cláudio Borges aka but3k4 <cbsfilho[at]gmail.com>
Versao 3.5, Mon Apr 7 10:09:45 2008



Introdução

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, nem quando foi criado e muito menos para que serve, creio que se você chegou a este tutorial deve saber mais ou menos do que se trata. Irei simplesmente mostrar como configurá-lo, juntamente com seus add-ons para que você tenha um servidor de emails completo e robusto (Há quem seja totalmente contrário a esta afirmação). Lembrando que esta instalação foi baseada no slackware 12.0.

Será instalado: ucspi-tcp + qmail + vpopmail + autorespond + ezmlm + daemontools + courier-imap + qmailadmin + sismcan + clamav + spamassassin + spamdyke.

Obs: Antes de prosseguir, verifique se você tem os seguintes pacotes instalados: autoconf, automake, binutils, bzip2, gcc, gcc-g++, gdbm, glibc, gzip, make, openssl, patch, perl, zlib.

1. Baixando os sources

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

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

Fazendo o download dos pacotes necessários:

  
wget http://www.qmail.org/qmail-1.03.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://ufpr.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.25.tar.gz
wget http://ufpr.dl.sourceforge.net/sourceforge/qmailadmin/qmailadmin-1.2.11.tar.gz
wget http://ufpr.dl.sourceforge.net/sourceforge/courier/courier-authlib-0.60.2.tar.bz2
wget http://ufpr.dl.sourceforge.net/sourceforge/courier/courier-imap-4.3.1.tar.bz2
wget http://ufpr.dl.sourceforge.net/sourceforge/qmhandle/qmhandle-1.2.0.tar.gz
wget http://ufpr.dl.sourceforge.net/sourceforge/simscan/simscan-1.4.0.tar.gz
wget http://www.pldaniels.com/ripmime/ripmime-1.4.0.7.tar.gz
wget http://ufpr.dl.sourceforge.net/sourceforge/clamav/clamav-0.92.1.tar.gz
wget http://www.spamdyke.org/releases/spamdyke-3.1.6.tgz
  

E os patches:

  
cd /usr/src/qmailsource/patches

wget http://www.claudioborges.org/patches/readme-qmail-1.03-but3k4-v01-release.txt
wget http://www.claudioborges.org/patches/qmail-1.03-but3k4-v01-release.patch
wget http://www.claudioborges.org/patches/qmail-1.03-chkuser-2.0.8-v01-release.patch
wget http://www.claudioborges.org/patches/ucspi-tcp-0.88.a_record.patch
wget http://www.claudioborges.org/patches/ucspi-tcp-0.88.errno.patch
wget http://www.claudioborges.org/patches/ucspi-tcp-0.88.nodefaultrbl.patch
wget http://www.claudioborges.org/patches/daemontools-0.76.errno.patch
wget http://www.claudioborges.org/patches/simscan-1.4.0.patch
wget http://www.claudioborges.org/patches/clamav-0.92.1.patch
  

Com todos os pacotes baixados, vamos dar continuidade a instalação.

2. 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 <../patches/ucspi-tcp-0.88.a_record.patch
patch -p1 <../patches/ucspi-tcp-0.88.errno.patch
patch -p1 <../patches/ucspi-tcp-0.88.nodefaultrbl.patch
make
make setup check

3. Instalando o qmail

Existem inúmeros patches para o qmail (essa é uma grande vantagem dele) e caso não exista (e você programe em C) e você mesmo pode fazer seus próprios patches (coisa que particularmente faço, quando tenho tempo =P). Meu patch é a união de vários patches que acho necessário e para entender melhor o funcionamento, bem como tudo que foi incluido no mesmo, sugiro que dê uma lida no readme, ele está em inglês. Para os que não querem ler o readme, aqui vai uma breve descrição deles.

3.1. lista de patches

3.1.1. qmail-1.03.errno.patch

Necessário para compilar o qmail em sistemas com glibc atual.

3.1.2. qmail-1.03.qmail_local.patch

Corrige um bug do qmail-local.

3.1.3. qmail-0.0.0.0.patch

Corrige um problema em sistemas linux que reconhecem 0.0.0.0 como ip local.

3.1.4. sendmail-flagf.patch

Adiciona a flag -f ao sendmail que vem junto com o qmail.

3.1.5. qmailqueue-patch

Aceita você chamar uma queue externa via variável de ambiente (necessário para o simscan e/ou qmail-scanner funcionar).

3.1.6. tarpit.patch

Você pode configurar um delay de X segundos quando Y mensagens forem recebidas, uma espécie de anti-spam. É necessário que sejam criados os arquivos /var/qmail/control/tarpitcount e /var/qmail/control/tarpitdelay que são respectivamente a quantidade de mensagens que seu servidor pode receber sem fazer delay e o delay que ele vai dar para cada mensagem que ultrapassar este limite.

3.1.7. qmail-queue-custom-error.patch

Necessário para usar a opção enable-custom-smtp-reject do simscan.

3.1.8. qmail-maildir++.patch

Corrige um problema de quota no qmail-pop3d e qmail-local.

3.1.9. qmail-1.03-pop3d-stat.patch

Muda o número de mensagens retornadas no qmail-pop3d. Ele aplica a RFC 1939.

3.1.10. qmail-1.03-quotas-1.1.patch

Modifica o qmail-local para exibir a mensagem 'quota exceeded' quando a quota for atingida.

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

3.1.12. qmail-date-localtime.patch

Faz com que o qmail use o timezone local do servidor.

3.1.13. qmail-1.03-dns.patch

Corrige um problema de dns.

3.1.14. big-concurrency.patch

Aceita o qmail usar um concurrency maior que 240.

3.1.15. big-todo.103.patch

Cria subdiretórios dentro do diretório qmail/queue/todo. Isso ajuda no processamento de grandes quantidades de mensagens.

3.1.16. ext_todo-20030105.patch

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

3.1.17. qmail-1.03-mfcheck.4.patch

Faz com que o qmail verifique se o domínio do remetente é valido ou não. Você pode definir a variável de ambiente MFCHECK ou criar o arquivo /var/qmail/control/mfcheck com um valor booleano (0 desativa e 1 ativa).

3.1.18. qmail-doublebounce-trim.patch

Faz com que o qmail não aceite double bounce.

3.1.19. qmail-bounce.patch

Aceita você controlar o tamanho das mensagens bounce. Você pode criar um arquivo /var/qmail/control/bouncemaxbytes e colocar o valor em bytes.

3.1.20. qmail-tap.diff

Esse é muito bom, deixa obsoleto o meu tutorial de conta pega tudo :~. Através do 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. Ex: echo "secretaria@dominio:diretoria@dominio" > /var/qmail/taps. Isto faz com que TODO email enviado e recebido pela secretaria@dominio, o diretoria@dominio receberá uma cópia da mensagem.

3.1.21. qmail-canonical.rcpt.patch

Faz com que o qmail-remote mostre o email do destinatário nos logs. Muito útil para identificação de mensagens enviadas.

3.1.22. qmail-1.03-fastremote-3.patch

Este patch como o próprio nome diz, modifica o qmail-remote para enviar mensagens de um modo mais rápido.

3.1.23. qmail-accept-5xx.patch

Altera o qmail-remote para trabalhar de acordo com a RFC 821.

3.1.24. qregex-20060423.patch

Adiciona a possibilidade de usar expressões regulares nos arquivos badmailfrom, badmailfromnorelay, badrcptto, badrcpttonorelay e badhelo.

3.1.25. qmail-1.03-maxrcpt-2.patch

Aceita voce limitar a quantidade de destinatários que são especificados em cada mensagem. Para limitar a quantidade de destinatários, crie o arquivo /var/qmail/control/maxrcpt com a quantidade de destinatários que você quer limitar, ex: echo 20 > /var/qmail/control/maxrcpt irá limitar em 20 destinatários, quando chegar no 21 destinatário ele vai dar erro.

Fiz uma alteracão nele para que quando um email esta definido no arquivo /var/qmail/control/maxrcptusers este limite nao terá validade sobre o mesmo.

3.1.26. qmail-1.03-heloreq.patch

Ativa a opção se exigir ou não helo. Para habilitar esta checagem, use a variável de ambiente HELOREQ ou crie o arquivo /var/qmail/control/heloreq com um valor booleado (0 desativado e 1 ativado).

3.1.27. qmail-spf-rc5.patch

Adiciona suporte a spf. Não explicarei como funciona o spf, consulte o google que você encontrará inúmeros artigos falando a respeito. Para ativá-lo, você precisa usar a variável de ambiente SPFBEHAVIOR ou colocar um valor booleano (de 0 a 6) no arquivo /var/qmail/control/spfbehavior. O melhor valor recomendável é 3.

3.1.28. netqmail-1.05-tls-20070408.patch

Adiciona suporte a tls/ssl ao qmail, encriptando e autenticando conexões smtp entre o MTA e o MUA. Ele também implementa as RFC 3207 e 2487.

3.1.29. qmail-smtpd-auth-058_tgz.bin

Adiciona suporte a smtp autenticado ao qmail.

3.1.30. qmail-1.03-authreq.patch

Este patch quando habilitado exige que domínios locais usem autenticação para fazer relay. É definido pela variável de ambiente AUTHREQ ou via arquivo /var/qmail/control/authreq (valor booleano 0 ou 1).

3.2. Adicionando usuários e grupos

Para que o qmail funcione perfeitamente, é preciso criar alguns usuários e grupos, pois cada processo dele roda sob um determinado usuário.


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

3.3. Criando os diretorios


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

3.4. Aplicando o patch e compilando o qmail

Esta é a melhor parte =P.


cd /usr/src/qmailsource
tar xvzf qmail-1.03.tar.gz
cd qmail-1.03

patch -p0 <../patches/qmail-1.03-but3k4-v01-release.patch

make setup check

./config-fast maquina.dominio
  

Obs: Não esqueça de trocar o maquina.dominio pelo hostname completo do seu servidor. Ex: ./config-fast mail.ung.br

3.5. Criando o certificado tls

Ainda dentro do diretório do source do qmail, iremos criar o certificado tls que será usado no smtp autenticado (falaremos sobre isso na sessão vpopmail). Na criação do certificado ele irá fazer algumas perguntas, segue abaixo um exemplo:

  
root@mail:/usr/src/qmailsource/qmail-1.03# make cert
Generating a 1024 bit RSA private key
........++++++
........++++++
writing new private key to '/var/qmail/control/servercert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Sao Paulo
Locality Name (eg, city) []:Guarulhos
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universidade Guarulhos
Organizational Unit Name (eg, section) []:UnG
Common Name (eg, YOUR name) []:mail.ung.br
Email Address []:suporte@ung.br
root@mail:/usr/src/qmailsource/qmail-1.03# 
  

Com base no exemplo anterior, você irá criar o seu certificado, caso tenha dúvida, segue abaixo uma breve descrição de cada campo:

Agora criando o certificado.


make cert
make tmprsadh

O comando make tmprsadh irá criar os arquivos RSA e DH, usados também no smtp autenticado.

3.6. Criando os alias

O alias são como se fossem contas de email, só que apontam para um endereço, ou seja existem virtualmente. Para que caso seu servidor envie mensagens de erro ou alguém queira entrar em contato é necessário criar alguns alias.


cd ~alias

echo 'administrador@dominio' > .qmail-abuse
ln -s .qmail-abuse .qmail-mailer-daemon
ln -s .qmail-abuse .qmail-postmaster
ln -s .qmail-abuse .qmail-root

chmod 0644 ~alias/.qmail*

Obs: Não esquecer de trocar administrador@dominio por um email válido.

3.7. Fazendo o link para o sendmail

Para o perfeito funcionamento do seu sistema, precisamos criar um link para o sendmail.


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

4. Instalando o vpopmail

O vpopmail é quem vai gerenciar os domínios virtuais, ou seja, toda a parte de caixas postais, alias e quotas é feita por ele, sem a necesidade de ter usuários cadastrados no sistema (sistema que falo, no /etc/passwd).

Existem dois métodos para se obter relay, o smtp autenticado ou relay after pop. Iremos usar a primeira opção. Para que você entenda melhor, segue abaixo uma pequena explicação sobre os dois métodos:

4.1. smtp autenticado

para enviar emails o usuário precisa configurar seu login e senha nas opções de smtp do seu cliente de emails, assim o relay (que é a permissão para enviar emails para qualquer domínio) estará disponivel. Este método é bem mais prático, além de ser bem mais seguro pois utiliza tls para fazer a encriptação dos dados.

4.2. relay after pop

para enviar emails, o usuário precisa fazer uma conexão pop antes, assim seu ip fica liberado para efetuar relay por X minutos. Digamos que o relay fica liberado por 30 minutos, após este tempo se precisar enviar emails novamente o usuário precisa efetuar uma nova autenticação pop.

4.3. Adicionando o usuário e grupo

O vpopmail também precisa de um usuário específico, sendo assim vamos criá-lo.


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

4.4. Mudando a permissão do certificado ssl

Quando criamos o certificado ssl, o dono/grupo sob o qual ele é criado é o do usuário qmaill, como nosso smtpd vai rodar sob o usuário vpopmail, precisamos mudar para este usuário, caso contrário o seu smtpd não irá funcionar.


find /var/qmail/control/ -type f -uid `id -u qmaild` -exec chown vpopmail:vchkpw {} \;

4.5. Criando o diretório e descompactando o source

Muitos não sabem mais o homedir do vpopmail é verificado pelo usuário, ou seja, na hora de compilar ele verifica qual o homedir que foi definido para seu usuário.


mkdir -p /var/vpopmail/etc

cd /usr/src/qmailsource
tar xvzf vpopmail-5.4.25.tar.gz

cd vpopmail-5.4.25

4.6. Configurando o vpopmail

Esta parte deixei a critério de quem for usar, eu particularmente prefiro usar com MySQL, pois fica mais fácil de gerenciar.

Obs: Nem preciso dizer que se você for usar MySQL precisa tê-lo instalado certo?

4.6.1. Com suporte a MySQL

Com suporte a MySQL use:


./configure --enable-auth-module=mysql --disable-many-domains 

4.6.2. Sem suporte a MySQL

Sem suporte a MySQL use:


./configure

4.7. Compilando o vpopmail

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


make
make install-strip

4.8. Criando o arquivo tcp.smtp

Para o perfeito funcionamento do seu servidor, você precisa criar o arquivo onde é definido o relay, este arquivo é o /var/vpopmail/etc/tcp.smtp.


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

Caso tenha optado por usar o vpopmail com suporte a MySQL, precisamos criar o banco do vpopmail, então inicie o seu MySQL e 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" > /var/vpopmail/etc/vpopmail.mysql
echo "localhost|0|vpopmail|vpoppw|vpopmail" >> /var/vpopmail/etc/vpopmail.mysql

4.9. Aplicando o patch do chkuser

Com o vpopmail instalado, precisamos instalar o patch do chkuser. Este patch tem inúmeras funcionalidades, dentre elas, verificar se o usuário/alias/lista existe ou não.

Obs: Este patch depende do vpopmail que depende do qmail, ou seja, primeiro instalamos o qmail, depois o vpopmail para por último aplicar este patch no qmail e recompilá-lo. Por este motivo que ele é um patch separado.


cd /usr/src/qmailsource

cd qmail-1.03
patch -p0 <../patches/qmail-1.03-chkuser-2.0.8-v01-release.patch

make clean
make setup check

5. Instalando o autorespond

Como o próprio nome diz, ele é o programa que serve para enviar uma resposta automática definida pelo usuário, muito conhecido como vacation ou mensagem de férias.


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

cd autorespond-2.0.5

make
make install

6. Instalando o ezmlm

ezmlm (Easy Mail List Manage) é um gerenciador de lista de distribuição de emails. Com ele você pode incluir, exluir e alterar opções da lista, pode dizer que somente determinadas pessoas podem enviar emails para ela e etc...


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

cd ezmlm-0.53-idx-0.41

make 
make setup

7. Instalando o daemontools

O daemontools é o pacote de programas que serve para gerenciar serviços em sistemas *UNIX. Ná nossa instalação ele será usado para controlar o qmail + vpopmail + clamav + spamassassin.


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/patches/daemontools-0.76.errno.patch

sh package/install

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

8.1. courier-authlib

Primeiramente vamos instalar o courier-authlib pois a nova versão do courier-imap separou o pacote de autentição.


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

Configurado:


cd courier-authlib-0.60.2
./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

Compilando:


make
make install-strip
make install-configure

8.2. courier-imap

Agora instalando o courier-imap.


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

cd courier-imap-4.3.1

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

8.3. Alterando o arquivo de configuração

Com o courier-imap instalado, vamos fazer algumas alterações:


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

O comando acima simplesmente cria o arquivo imapd com base no imapd.dist, alterando a linha TCPDOPTS e adicionando suporte ao vpopmail e também alterando a opção IMAPDSTART para yes.

8.4. Criando o arquivo de inicialização do courier-imap

Em versões anteriores do courier-imap, era bem simples iniciá-lo com o daemontools (não quer dizer que agora não seja possível, é que nem parei para tentar ver isso). Portanto 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

/etc/rc.d/rc.courier-imap start

9. Instalando o qmailadmin

Qmailadmin é uma interface web para a administração do vpopmail/autorespond/ezmlm, com ele você pode adicionar e remover usuários, mudar senhas, criar aliases, listas e etc.

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


cd /usr/src/qmailsource

tar xvzf qmailadmin-1.2.11.tar.gz
cd qmailadmin-1.2.11

./configure --enable-htmldir=/var/www/htdocs \
	--enable-cgibindir=/var/www/cgi-bin \
	--enable-modify-quota \
	--enable-domain-autofill

make
make install-strip

10. Instalando o qmHandle

O qmHandle é usando para gerenciar a fila de mensagens (queue) do qmail, tanto mensagens locais como mensagens remotas, sua principal finalidade é apagar mensagens com determinado subject.


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

11. Instalando o ripmime

O Microsoft Outlook e mais alguns softwares da Microsoft, utilizam um tipo de codificação próprio em suas mensagens. O ripmime (similiar ao tnef) é o programa que decodifica essas mensagens, para que a mesma possa ser verificada por um antivírus.


cd /usr/src/qmailsource/

tar xvzf ripmime-1.4.0.7.tar.gz
cd ripmime-1.4.0.7

make
make install

12. Instalando o Clamav Antivírus

O Clamav é um antivírus mantido sobre a licença GPL, e foi feito para rodar em sistemas *UNIX (existe versão para Microsoft).

12.1. Criando o usuário

Vamos cria o usuário e grupo simscan, pois o clamav, spamassassin e simscan irão rodar sob este usuário.


groupadd simscan
useradd simscan -g simscan -s /bin/false -d /var/qmail/simscan

12.2. Descompactando, configurando e compilando o clamav


cd /usr/src/qmailsource/

tar xvzf clamav-0.92.1.tar.gz
cd clamav-0.92.1

./configure --prefix=/usr/local \
	--sysconfdir=/etc \
	--with-user=simscan \
	--with-group=simscan

make

patch -p0 <../patches/clamav-0.92.1.patch

make check
make install
ldconfig

O patch aplicado acima, contém toda a configuração do clamd.conf e freshclam.conf, por este motivo não irei detalhar esta configuração. Caso tenha alguma dúvida, abra o patch com um editor de textos e verifique o que o mesmo define de configuração.

12.3. Adicionando o freshclam no contrab

O Freshclam é o responsável por atualizar a base de dados do clamav. Vamos adicionar uma entrada no crontab para rodá-lo todos os dias as 2 da manhã.


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

13. Instalando o Spamassassin

O spamassassin é um programa usado para barrar spams (coisa que hoje em dia virou um praga difícil de combater). Como dependências, o spamassassin precisa de alguns módulos perl, já que o mesmo também é feito em perl.

Existem 2 meios de instalá-lo: ou você baixa o source do site 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. Caso seja a primeira vez que você estiver usando-o, ele (Cpan) vai fazer algumas perguntas, então basta respondê-las e no final ele irá instalar o módulo desejado.

Obs: Para instalar o módulo Net::DNS e Mail::SPF, na hora que ele pede executar os testes, digite n. Ex:

Net::DNS:


Do you want to enable these tests? [y] n

E Mail::SPF:


Do you want to run external tests?
These tests *will* *fail* if you do not have network connectivity. [y] n

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

Começaremos pelas dependências:


cpan -i Bundle::CPAN

cpan -fi HTTP::Date DB_File Digest::SHA1 Digest::HMAC Time::HiRes HTML::Tagset \
Digest::SHA1 Digest::HMAC Time::HiRes HTML::Tagset HTML::Parser Net::DNS Mail::SPF \
IP::Country Sub::Uplevel Test::Exception Test::Warn Net::SSLeay IO::Socket::INET6 \
IO::Socket::SSL Mail::DomainKeys Mail::DKIM LWP::UserAgent Archive::Tar Net::Ident Encode::Detect 

Com as dependências instaladas, falta o spamassassin:


cpan -i Mail::SpamAssassin

13.1. Configurando o spamassassin

Para que o spamassassin funcione corretamente, precisamos configurar o local.cf que é o seu arquivo de configuração. Edite o arquivo /etc/mail/spamassassin/local.cf e altere ou acrescente as linhas:


rewrite_header				Subject [SPAM]
report_safe				1
required_score				5.0
skip_rbl_checks				1
use_bayes				1
use_bayes_rules				1
bayes_auto_expire			1
bayes_auto_learn			1
bayes_expiry_max_db_size		3000000
bayes_auto_learn_threshold_nonspam	0.1
bayes_auto_learn_threshold_spam		4.0
use_auto_whitelist			0
allow_user_rules			0
ok_locales				all
  
score SPF_FAIL				3.0
score SPF_HELO_FAIL			3.0
score BAYES_80				2.0
score BAYES_95				2.0
score BAYES_99				2.0
score HTML_IMAGE_ONLY_32		1.5

14. Instalando o simscan

O simscan é um scanner de email desenvolvido pela inter7 que foi feito especialmente para rodar com o qmail como uma alternativa ao qmail-scanner, além de ser mais leve, mais rápido, ele possui bem mais funcionalidades.

Antes de instalá-lo vamos ver as opções que serão usadas.

14.1. Opções usadas no simscan

14.1.1. --enable-per-domain

Aceita você habilitar checagem por domínio e/ou usuário, ou seja, aceita criar configurações separadas para emails ou domínios, exemplo de um simcontrol para um email em particular:


diretoria@dominio:clam=yes,spam=no,attach=.scr
:clam=yes,spam=yes,spam_hits=9.0,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif:.bat:.com:.mp3

Assim, primeiro ele verifica que tipo de checagens o usuário diretoria@dominio vai ter e quais bloqueios o mesmo terá. A segunda linha é para todos os outros usuários e/ou domínios existentes no servidor. Você pode fazer quantas entradas personalizadas quizer.

14.1.2. --enable-clamav

Habilita o uso do clamav como antivirus.

14.1.3. --enable-clamdscan

Define qual o path do clamdscan.

14.1.4. --enable-ripmime

Habilita o uso do ripmime.

14.1.5. --enable-attach

Habilita a verificação de anexos.

14.1.6. --enable-spam

Habilita a verificação de spam.

14.1.7. --enable-spam-hits

Habilita qual o nível máximo de hits que os spams podem alcançar, qualquer valor acima do definido nesta opção será bloqueado.

14.1.8. --enable-received

Adiciona ao cabeçalho do email qual a versão de todos os scanners que checaram a mensagem.

14.1.9. --enable-quarantinedir

Habilita qual o diretório onde os emails que forem barrados como spam e/ou virus ficarão guardados.

14.1.10. --enable-custom-smtp-reject

Com esta opção habilitada, caso a mensagen contenha vírus ou ultrapasse o valor definido em --enable-spam-hits, o simscan retorna uma mensagem de erro para o remente com estas informações.

14.2. Compilando o simscan

Para que o simscan funciona corretamente com o clamav, precisamos de um patch, isso por que o clamav alterou seu arquivo de base de dados de daily.cvd para main.cvd.


cd /usr/src/qmailsource
tar xvzf simscan-1.4.0.tar.gz
cd simscan-1.4.0

patch -p0 <../patches/simscan-1.4.0.patch

./configure --enable-per-domain=y \
	--enable-clamav=y \
	--enable-clamdscan=/usr/local/bin/clamdscan \
	--enable-clamavdb-path=/usr/local/share/clamav \
	--enable-ripmime=y \
	--enable-attach=y \
	--enable-spam=y \
	--enable-spam-hits=10 \
	--enable-received=y \
	--enable-quarantinedir=/var/qmail/quarantine \
	--enable-custom-smtp-reject

make
make install-strip

14.3. Criando o diretório de quarentena

Não podemos esquecer de criar o diretório onde os emails que forem barrados como vírus/spam serão arquivos.


mkdir -p /var/qmail/quarantine
chown -R simscan /var/qmail/quarantine

14.4. Criando o arquivo simcontrol

O Arquivo de configuração do simscan é o /var/qmail/control/simcontrol, nele é definido se você irá usar clamav, spamassassin bem como a quantidade de hits para bloquear spams e quais extensões de arquivos que serão bloqueados.


echo ':clam=yes,spam=yes,spam_hits=9.0,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif:.bat:.com' >> /var/qmail/control/simcontrol

Agora gerando os .cdb:


/var/qmail/bin/simscanmk
/var/qmail/bin/simscanmk -g

14.5. Alterando o crontab

Precisamos adicionar no crontab, para que todo dia às 00:00 horas, ele apague os emails existentes na quarentena mais antigos que 4 dias.


crontab -l >> /tmp/crontab.tmp
echo '0 0     * * *   /usr/bin/find /var/qmail/quarantine/ -mtime +4 -exec rm {} \; > /dev/null 2>&1' >> /tmp/crontab.tmp
crontab /tmp/crontab.tmp -u root
rm /tmp/crontab.tmp

15. Instalando o spamdyke

O spamdyke é uma pacotes de filtros para o qmail, dentre eles o greylist que é uma técnica anti-spam muito usada ultimamente, que barra muitos spammers. Não vou entrar em muitos detalhes sobre esta opção (caso queira saber mais, favor procurar no nosso amigo google), apenas vou falar das opções que iremos utilizar.

15.1. Opções usadas no spamdyke

15.1.1. log-level

Define qual o nível de log. Opções válidas são 0 = nenhum log; 1 = somente erros; 2 = erros e infos; 3 = erros, info e mensagens de debug; 4 = log máximo com todas as informações.

15.1.2. log-target

Qual tipo de log que iremos usar. 0 = stderr, usando pelo multilog e 1 = syslog.

15.1.3. idle-timeout-secs

Define quantos segundos ele aguarda até desconectar.

15.1.4. local-domains-file

Define qual o arquivo que contém os dominios locais, ex: /var/qmail/control/rcpthosts.

15.1.5. graylist-dir

Define qual o diretório usado pelo graylist. Ex: /var/qmail/graylist.

15.1.6. graylist-min-secs

Define quanto segundos ele vai aguardar antes de aceitar a mensagem.

15.1.7. graylist-max-secs

Define quanto tempo iremos receber mensagens de um remetente antes de cair no graylist-min-secs novamente.

15.1.8. greeting-delay-secs

Define quantos segundos o smtp aguarda antes de aceitar a comunicação com o servidor, ou seja, enviar o banner de conexão para quem está conectando.

15.1.9. check-dnsrbl

Esta opção você define quais rbls seu spamdyke irá verificar antes de aceitar a conexão do remetente.

15.1.10. ip-whitelist-file

Neste arquivo você define quais ips estão livres de todos os filtros definidos no spamdyke.

15.1.11. tls-certificate-file

Define qual o certificado tls da conexão encriptada.

15.1.12. smtp-auth-command-encryption

Aqui você define qual o comando usando pelo smtpd para verificar a autenticação da conexão, ou seja, usado para verificar se o usuário se autenticou ou não.

15.2. Compilando o spamdyke

Já vimos as opções que iremos usar no spamdyke, agora iremos compilá-lo.


cd /usr/src/qmailsource/

tar xvzf spamdyke-3.1.6.tgz
cd spamdyke-3.1.6

cd spamdyke

./configure --enable-tls

make

cp spamdyke /var/qmail/bin/

15.3. Criando o arquivo /var/qmail/control/spamdyke.conf

Depois de ter o spamdyke instalado, precisamos criar seu arquivo de configuração. Crie o arquivo /var/qmail/control/spamdyke.conf com o conteúdo:


log-level=2
log-target=0
idle-timeout-secs=60
local-domains-file=/var/qmail/control/rcpthosts
graylist-dir=/var/qmail/graylist
graylist-min-secs=300
graylist-max-secs=21600
greeting-delay-secs=2
check-dnsrbl=sbl.spamhaus.org
check-dnsrbl=xbl.spamhaus.org
check-dnsrbl=cbl.abuseat.org
ip-whitelist-file=/var/qmail/control/spamdyke-whitelist.conf
tls-certificate-file=/var/qmail/control/servercert.pem
smtp-auth-command-encryption="/var/vpopmail/bin/vchkpw true"

Não esqueça de duas coisas:

Criar o arquivo spamdyke-whitelist.conf, pois se você não criá-lo, o spamdyke vai dar erro. Adicione o ip de loopback e o range de sua rede interna. Ex:


echo '127.0.0.1' > /var/qmail/control/spamdyke-whitelist.conf
echo '10.0.0.0/16' > /var/qmail/control/spamdyke-whitelist.conf

Também é necessário criar o diretório de graylist e dentro dele, cada domínio que você adicionar, precisa ser criado. Ex:


mkdir -p /var/qmail/graylist/ung.br
chown -R vpopmail:vchkpw /var/qmail/graylist

No comando acima criei o diretorio /var/qmail/graylist e dentro dele criei o diretório do meu domínio principal, no caso ung.br. Também mudei a permissão para o usuário sob o qual meu qmail-smtpd irá rodar.

16. Criando os scripts de inicialização

Como já fizemos toda a instalação, precisamos criar os scripts de inicialização.

16.1. qmailctl

O qmailctl é um script usando para gerenciar o qmail (start/stop/restart e listar as mensagens na queue), o site Life With Qmail disponibiliza este script, só que o nosso qmailctl, está alterado para iniciar o vpopmail, clamav e spamassassin.

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
    if svok /service/clamav ; then
      svc -u /service/clamav
    else
      echo clamav supervise not running
    fi
    if svok /service/spamassassin ; then
      svc -u /service/spamassassin
    else
      echo spamassassin 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
    echo "  clamav"
    svc -d /service/clamav
    echo "  spamassassin"
    svc -d /service/spamassassin
    ;;
    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
    svstat /service/clamav
    svstat /service/clamav/log
    svstat /service/spamassassin
    svstat /service/spamassassin/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
    echo "Pausing clamav"
    svc -p /service/clamav
    echo "Pausing spamassassin"
    svc -p /service/spamassassin
    ;;
  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
    echo "Continuing clamav"
    svc -c /service/clamav
    echo "Continuing spamassassin"
    svc -c /service/spamassassin
    ;;
  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
    echo "* Restarting clamav."
    svc -t /service/clamav
    echo "* Restarting spamassassin."
    svc -t /service/spamassassin
    ;;
  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

Com o qmailctl criado, vamos alterar a permissão e fazer o link para o /usr/local/bin:


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

16.2. Criando os diretórios

Também é necessário criar alguns diretórios usados pelos scripts de inicialização, bem como os diretórios de log.


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

16.3. Definido o tipo de delivery

Precisamos definir qual o tipo de delivery que o qmail irá usar, como seu padrão é o melhor de todos (Me desculpem os usuários de outros MTAs, mas foi o DJB que criou este padrão), iremos usar o Maildir. Não entrarei em detalhes como funciona o Maildir, direi apenas que ele separa as mensagens individualmente.


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

16.4. /var/qmail/rc

Este arquivo starta o qmail com o delivery que definimos anteriormente. Portanto 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`"

Definindo a permissão de execução:


chmod 755 /var/qmail/rc

16.5. /var/qmail/supervise/qmail-send/run

Este arquivo é responsável por iniciar o qmail-send, que é o programa que envia as mensagens para os outros programas que farão a entrega local ou remota. Vamos criar o arquivo /var/qmail/supervise/qmail-send/run com o conteúdo:


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

16.6. /var/qmail/supervise/qmail-send/log/run

Este é o arquivo responsável por gerar os logs das mensagens enviadas. Crie o /var/qmail/supervise/qmail-send/log/run com o conteúdo:


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

16.7. /var/qmail/supervise/qmail-smtpd/run

Este é o arquivo que controla todo o qmail-smtpd. O qmail-smtpd é o daemon responsável por receber todas as requisições que chegam ao seu MTA. Vamos criar o arquivo /var/qmail/supervise/qmail-smtpd/run com o conteúdo:


#!/bin/sh
#
VPOPMAILUID=`id -u vpopmail`
VPOPMAILGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

QMAILQUEUE="/var/qmail/bin/simscan"
NOP0CHECK=1
 
export QMAILQUEUE NOP0CHECK

if [ -z "$VPOPMAILUID" -o -z "$VPOPMAILGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
	echo VPOPMAILUID, VPOPMAILGID, 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 15000000 \
	/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /var/vpopmail/etc/tcp.smtp.cdb -c "$MAXSMTPD" \
	-u "$VPOPMAILUID" -g "$VPOPMAILGID" 0 smtp /var/qmail/bin/spamdyke -f /var/qmail/control/spamdyke.conf \
	/var/qmail/bin/qmail-smtpd /var/vpopmail/bin/vchkpw true 2>&1

16.8. /var/qmail/supervise/qmail-smtpd/log/run

Este é o arquivo responsável por gerar os logs das conexões e mensagens recebidas (não confundir mensagens recebidas via MTA com mensagens baixadas via pop). 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 s15000000 n10 /var/log/qmail/smtpd \
	t s15000000 n10 '-*' '+* simscan:*' /var/log/qmail/simscan 2>&1

O arquivo criado acima, gera log em dois diretórios: No /var/log/qmail/smtpd ficam os logs das conexões smtp e no /var/log/qmail/simscan ficam somente os logs de TUDO que passa pelo simscan, assim fica mais fácil de ver o que o simscan está fazendo.

16.9. /var/qmail/supervise/qmail-pop3d/run

Este arquivo é responsável por iniciar o daemon qmail-pop3d, que é por onde os usuários irão baixar suas mensagens via pop. Crie o arquivo /var/qmail/supervise/qmail-pop3d/run com o conteúdo:


#!/bin/sh
#
DOMAIN=`cat /etc/qmail/defaultdomain`
MAXPOP3D=`cat /var/qmail/control/concurrencyincoming`

exec /usr/local/bin/softlimit -m 15000000 \
	/usr/local/bin/tcpserver -v -c "$MAXPOP3D" -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
	"$DOMAIN" /var/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

16.10. /var/qmail/supervise/qmail-pop3d/log/run

Este é o arquivo responsável por gerar os logs das conexões pop. Crie o /var/qmail/supervise/qmail-pop3d/log/run com o conteúdo:


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

16.11. /var/qmail/supervise/clamav/run

Arquivo responsável por iniciar o clamav. Crie o arquivo /var/qmail/supervise/clamav/run com o conteúdo:


#!/bin/sh
#
if [ $(pidof clamd) ]; then
	echo "Error: clamd already running!"
	exit 1
fi
  
if [ -e /tmp/clamd ]; then
	rm /tmp/clamd
fi

exec /usr/local/bin/setuidgid simscan /usr/local/sbin/clamd

16.12. /var/qmail/supervise/clamav/log/run

Este é o arquivo responsável por gerar os logs do clamav. Crie o /var/qmail/supervise/clamav/log/run com o conteúdo:


#!/bin/sh
#
exec /usr/local/bin/setuidgid simscan /usr/local/bin/multilog t s15000000 n10 /var/log/clamav

16.13. /var/qmail/supervise/spamassassin/run

Este arquivo é responsável por iniciar o spamassassin. Crie o arquivo /var/qmail/supervise/spamassassin/run com o conteúdo:


#!/bin/sh
#
exec /usr/bin/spamd -c -v -x -u simscan -s stderr -r -d --pidfile=/var/run/spamd.pid 2>&1

16.14. /var/qmail/supervise/spamassassin/log/run

Este é o arquivo responsável por gerar os logs do spamassassin. Crie o /var/qmail/supervise/spamassassin/log/run com o conteúdo:


#!/bin/sh
#
exec /usr/local/bin/setuidgid simscan /usr/local/bin/multilog t s15000000 n10 /var/log/spamassassin

E para finalizar, iremos criar os arquivos de controle do qmail (na lista de patches falei sobre a grande maioria deles), mudar as permissões do mesmo, fazer os links para o daemon-tools e atualizar a base de dados do clamav.


echo 1 > /var/qmail/control/authreq
echo '[!%#:*^(){}]' > /var/qmail/control/badmailfrom
echo '[!%#:*^(){}]' > /var/qmail/control/badrcptto
echo 2097152 > /var/qmail/control/bouncemaxbytes
echo 60 > /var/qmail/control/concurrencylocal
echo 60 > /var/qmail/control/concurrencyincoming
echo 60 > /var/qmail/control/concurrencyremote
echo 10485760 > /var/qmail/control/databytes
echo 1 > /var/qmail/control/heloreq
echo 3 > /var/qmail/control/spfbehavior
echo 60 > /var/qmail/control/tarpitcount
echo 60 > /var/qmail/control/tarpitdelay

chmod 0644 /var/qmail/control/authreq
chmod 0644 /var/qmail/control/badmailfrom
chmod 0644 /var/qmail/control/badrcptto
chmod 0644 /var/qmail/control/bouncemaxbytes
chmod 0644 /var/qmail/control/concurrencylocal
chmod 0644 /var/qmail/control/concurrencyincoming
chmod 0644 /var/qmail/control/concurrencyremote
chmod 0644 /var/qmail/control/databytes
chmod 0644 /var/qmail/control/heloreq
chmod 0644 /var/qmail/control/spfbehavior
chmod 0644 /var/qmail/control/tarpitcount
chmod 0644 /var/qmail/control/tarpitdelay

chmod 0755 /var/qmail/supervise/{qmail-send,qmail-smtpd,qmail-pop3d}/run
chmod 0755 /var/qmail/supervise/{qmail-send,qmail-smtpd,qmail-pop3d}/log/run
chmod 0755 /var/qmail/supervise/{clamav,spamassassin}/run
chmod 0755 /var/qmail/supervise/{clamav,spamassassin}/log/run

chown -R qmaill /var/log/qmail
chown simscan:simscan /var/log/{clamav,spamassassin}

/usr/local/bin/freshclam

ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /var/qmail/supervise/qmail-pop3d /service
ln -s /var/qmail/supervise/clamav /var/qmail/supervise/spamassassin /service

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

Exemplo:


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

17. Testes

Com tudo instalado, vamos ser se está funcionando. Os comandos que iremos digitar estão em vermelho.

17.1. Testando conexão smtp

Para testar conexões smtp, digite:


root@mail:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.ung.br ESMTP
helo teste.int
250 mail.ung.br
mail from: claudio@onerd.com.br
250 ok
rcpt to: postmaster@ung.br
250 ok
data
354 go ahead
Subject: testando o smtp

Testando o smtp
.
250 ok 1207431535 qp 1506
quit
221 mail.ung.br
Connection closed by foreign host.

17.2. Testando conexão smtp autenticada

Para executar os testes de autenticação, precisa-se criar o usuário e senha encriptados. Vamos fazer isso com o módulo perl Base64:


root@mail:~# perl -MMIME::Base64 -e 'printf ("\nusuario: %s\nsenha: %s",encode_base64("postmaster\@ung.br"),encode_base64("lerolero"));'

usuario: cG9zdG1hc3RlckB1bmcuYnI=

senha: bGVyb2xlcm8=

Com o usuário e senha encriptado, faremos os testes:


root@mail:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.ung.br ESMTP
ehlo teste.int
250-mail.ung.br
250-STARTTLS
250-PIPELINING
250-8BITMIME
250-SIZE 10485760
250 AUTH LOGIN PLAIN CRAM-MD5
auth login
334 VXNlcm5hbWU6
cG9zdG1hc3RlckB1bmcuYnI=
334 UGFzc3dvcmQ6
bGVyb2xlcm8=
235 ok, go ahead (#2.0.0)
quit
221 mail.ung.br
Connection closed by foreign host.

17.3. Testando conexão smtp autenticada com tls

Para os testes de tls digite:


root@mail:~# openssl s_client -crlf -starttls smtp -connect localhost:25
CONNECTED(00000003)
depth=0 /C=BR/ST=Sao Paulo/L=Guarulhos/O=Universidade Guarulhos/OU=UnG/CN=mail.ung.br/emailAddress=suporte@ung.br
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=BR/ST=Sao Paulo/L=Guarulhos/O=Universidade Guarulhos/OU=UnG/CN=mail.ung.br/emailAddress=suporte@ung.br
verify return:1
---
Certificate chain
 0 s:/C=BR/ST=Sao Paulo/L=Guarulhos/O=Universidade Guarulhos/OU=UnG/CN=mail.ung.br/emailAddress=suporte@ung.br
   i:/C=BR/ST=Sao Paulo/L=Guarulhos/O=Universidade Guarulhos/OU=UnG/CN=mail.ung.br/emailAddress=suporte@ung.br
---
Server certificate
-----BEGIN CERTIFICATE-----
MIID2jCCA0OgAwIBAgIJANHbUXrRtvv9MA0GCSqGSIb3DQEBBQUAMIGlMQswCQYD
VQQGEwJCUjESMBAGA1UECBMJU2FvIFBhdWxvMRIwEAYDVQQHEwlHdWFydWxob3Mx
HzAdBgNVBAoTFlVuaXZlcnNpZGFkZSBHdWFydWxob3MxDDAKBgNVBAsTA1VuRzEa
MBgGA1UEAxMRbWFpbC5vbmVyZC5jb20uYnIxIzAhBgkqhkiG9w0BCQEWFHN1cG9y
dGVAb25lcmQuY29tLmJyMB4XDTA4MDQwNTE5MDEwMVoXDTA5MDQwNjE5MDEwMVow
gaUxCzAJBgNVBAYTAkJSMRIwEAYDVQQIEwlTYW8gUGF1bG8xEjAQBgNVBAcTCUd1
YXJ1bGhvczEfMB0GA1UEChMWVW5pdmVyc2lkYWRlIEd1YXJ1bGhvczEMMAoGA1UE
CxMDVW5HMRowGAYDVQQDExFtYWlsLm9uZXJkLmNvbS5icjEjMCEGCSqGSIb3DQEJ
ARYUc3Vwb3J0ZUBvbmVyZC5jb20uYnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBALE34Y6LhDJujdiXsCd9hKDHUol4PL4h/h3nAX3eZ6IwPn6yM5QCnakpmg0G
kmFwJ8ZKPUP4ezkVi4ttGWX8cr1y158bDZOaSW9hDmwoxpUxRrIXFT0Z3hamEV2/
PGNYZnI3bKzjeXkLHNCiy9CWZrl/1P7KjWDO6p1X77kgTUzJAgMBAAGjggEOMIIB
CjAdBgNVHQ4EFgQUWeTLU8QMass+NQwXsjabF5/UBTIwgdoGA1UdIwSB0jCBz4AU
WeTLU8QMass+NQwXsjabF5/UBTKhgaukgagwgaUxCzAJBgNVBAYTAkJSMRIwEAYD
VQQIEwlTYW8gUGF1bG8xEjAQBgNVBAcTCUd1YXJ1bGhvczEfMB0GA1UEChMWVW5p
dmVyc2lkYWRlIEd1YXJ1bGhvczEMMAoGA1UECxMDVW5HMRowGAYDVQQDExFtYWls
Lm9uZXJkLmNvbS5icjEjMCEGCSqGSIb3DQEJARYUc3Vwb3J0ZUBvbmVyZC5jb20u
YnKCCQDR21F60bb7/TAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAJ0E
ywu+/11IcRLBxgHQNsdNsN54JWWbyFNBqTHkVO99cdwZki/tC89Aj1JBF+qC9Pdv
keCHwY7N7StjzFTgqFdTKhjd/9R50j6jYhr2MqPtQLHRWhdixvBZDTaQKHO7xd3a
rHEfTxiokrg+7VQzaUVpKUxG5wkRQggnIM4GHLst
-----END CERTIFICATE-----
subject=/C=BR/ST=Sao Paulo/L=Guarulhos/O=Universidade Guarulhos/OU=UnG/CN=mail.ung.br/emailAddress=suporte@ung.br
issuer=/C=BR/ST=Sao Paulo/L=Guarulhos/O=Universidade Guarulhos/OU=UnG/CN=mail.ung.br/emailAddress=suporte@ung.br
---
No client certificate CA names sent
---
SSL handshake has read 1318 bytes and written 351 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 9083885EA85461125C7AB4ED2B70B9A255B09342D63A14DF03F7CCB9BD64F0D0
    Session-ID-ctx: 
    Master-Key: B58C6C22C6647DC139ADA0B591956E5EA09B798C79B3A962EFD5563318ABCB916567FEC2F7BE8C7AF3F6F52134811DF8
    Key-Arg   : None
    Start Time: 1207431806
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
250 AUTH LOGIN PLAIN CRAM-MD5
quit
221 mail.ung.br
closed

17.4. Testando conexão pop

Para fazer os testes de pop, digite:


root@mail:~# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK <5606.1207431565@ung.br>
user postmaster@ung.br
+OK 
pass lerolero
+OK 
list
+OK 
1 415
.
top 1
+OK 
Return-Path: <claudio@onerd.com.br>
Delivered-To: postmaster@ung.br
Received: (qmail 9691 invoked by uid 89); 5 Apr 2008 18:38:55 -0300
Received: by simscan 1.4.0 ppid: 32448, pid: 1506, t: 8.6866s
         scanners: attach: 1.4.0 clamav: 0.92.1/m:45/d:45
Received: from localhost (HELO teste.int) (127.0.0.1)
  by mail.ung.br with SMTP; 5 Apr 2008 18:38:46 -0300
Subject: testando o smtp

Testando o smtp

.
quit
+OK 
Connection closed by foreign host.

17.5. Testando conexão imap

Para fazer os testes de conexão imap, digite:


root@mail:~# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc.  See COPYING for distribution
information.
0 login postmaster@ung.br lerolero
0 OK LOGIN Ok.
0 logout
* BYE Courier-IMAP server shutting down
0 OK LOGOUT completed
Connection closed by foreign host.

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 além de ter uma interface bem simples e amigável. Para utilizá-lo, 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 utilizar usuario@dominio para conexões de entrada e na sessão de smtp, configurar que o servidor precisa de usuário e senha para enviar emails, colocando o mesmo usuário definido para conexões de entrada e deixando marcada a opção TLS if available.

Até a próxima.

Cláudio Borges

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