Como montar um servidor de e-mail utilizando o qmail, um robusto e seguro servidor de e-mail. Contém instruções e passo-a-passos para instalar um sistema completo de e-mail, com filtros, anti-virus, servidor IMAP e POP3, contas gerenciáveis via MySQL, entre outros.
Uma Introdução
O qmail é um poderoso servidor de e-mail, leve e muito rápido, que foi desenvolvido com o intuito de ser totalmente seguro. Desde sua última versão estável (1.03), o qmail nunca teve nenhum bug comprometedor conhecido. Isso nos faz pensar que ele é muito bom para o uso em produção, inclusive porque além de ele ser muito estável, é flexível o bastante para aguentar um tráfego de e-mails muito grande.
O site do qmail é:
Vamos aprender aqui como montar um servidor de e-mail usando o qmail junto com o vpopmail. O qmail vai trabalhar com o manuseio dos e-mails, enquanto o vpopmail irá cuidar das contas dos usuários, senhas, informações, quotas, entre outros. Neste tutorial irei explicar também como utilizar o vpopmail para armazenar as informações de contas em um servidor de banco de dados, que no nosso caso será o MySQL.
Instalando e configurando o QMail
Neste tutorial, instalaremos o qmail a partir do seu código-fonte. Existem pacotes já prontos em RPM, DEB, etc, mas para um completo entendimento e compatibilidade entre todos os sistemas, usaremos mesmo o código-fonte. A versão que estamos usando é a 1.03, e pode ser obtida no endereço:
http://www.qmail.org/qmail-1.03.tar.gz
Patches
Precisaremos também aplicar alguns patches para o QMail antes de instalá-lo no sistema. Você pode instalar o QMail puro, mas eu recomendo estes patches para um aumento de desempenho e recursos. A seguir temos os patchs recomendados junto com suas descrições:
- big-concurrency (http://www.qmail.org/big-concurrency.patch): Este patch faz com que o qmail possa processar mais de 255 mensagens de uma vez no queue. Assim se a máquina for boa e com grande volume de mensagens simultâneas, o servidor poderá processá-las mais rapidamente.
- qmailqueue (http://www.qmail.org/qmailqueue-patch): Com este patch, o qmail antes de processar qualquer mensagem em seu queue, verifica a variável de ambiente QMAILQUEUE em busca do programa de queue. Com isso pode-se encaminhar as mensagens para um script (qmail-scanner por exemplo) que filtrará estas mensagens. Isso pode ser usado para repassar a mensagem para filtros de extensões, palavras e anti-virus.
- tarpit (http://www.palomine.net/qmail/tarpit.patch): O Tarpit é uma técnica anti-spam que adiciona um pequeno tempo de espera (sleep) quando o envio de e-mails passa de um certo limite. Por exemplo, se um spammer resolver mandar 1000 mensagens em uma conexão só, o qmail com este patch verificará esta ação e a cada mensagem que o spammer mandar, você pode configurar quanto tempo ele terá que esperar. Então se configurado pra 50 mensagens, quando o spammer for mandar a mensagem 51, esperara por exemplo, 5 minutos. E depois pra mensagem 52, mais 5 minutos, e por aí vai. Tudo isso configurável.
Existem outros patches interessantes, que você pode querer usar em seu servidor de e-mail. Abaixo estão as descrições de alguns que na minha opinião são interessantes. Como estou descrevendo-os apenas para o leitor conhecer mais recursos, não os cobrirei neste tutorial. Cobrirei apenas o três patches anteriores.
- mfcheck (http://www.qmail.org/qmail-1.03-mfcheck.3.patch): Com este patch, o servidor verifica no DNS se o domínio do destinatário existe.
Agora vamos primeiro descompactar o qmail e instalar estes patches. Usaremos neste tutorial diretórios exemplo. Adapte como quiser.
mkdir /root/build cd /root/build tar zpvfx /root/download/qmail-1.03.tar.gz patch -p0 < /root/download/big-concurrency.patch patch -p0 < /root/download/qmailqueue.patch cd qmail-1.03 patch -p0 < /root/download/tarpit.patch
Pronto. Agora o qmail já está descompactado e aplicamos os três patches como queríamos. Se você quiser aplicar algum outro patch, esta é a hora. Se não quiser, seguimos em frente.
Compilando e instalando o qmail
Hora de se preparar para compilar o qmail e instalá-lo. Por padrão, o qmail é instalado no diretório “/var/qmail”. Você pode especificar em que diretório ele será instalado editando o arquivo “conf-qmail” dentro do diretório em que você descompactou o código-fonte do qmail. E em falar nisso, temos aqui alguns arquivos para configurar antes de compilar o programa. Aqui vai uma descrição deles:
- conf-users e conf-groups: Aqui estão os arquivos que indicam que usuários serão usados para rodar o qmail. É bom deixar o padrão mesmo, criaremos estes usuários e grupos logo a seguir.
- conf-qmail: Como dito anteriormente, o diretório onde o qmail irá ser instalado e estará funcional. Recomendo deixar este valor como “/var/qmail” mesmo, a não ser que você queira instalar em outro lugar (outra partição de disco por exemplo). Este tutorial irá usar o valor “/var/qmail”, se por acaso você mudou esta configuração, substitua o “/var/qmail” pelo diretório que você configurou durante os passos deste tutorial. Uma outra boa idéia é mudar este valor para algo como /var/qmail-algumacoisa para indetificar esta instalação, e depois fazer um link simbólico como /var/qmail para manter a compatibilidade. Assim você pode compilar vários qmails diferentes, e apenas mudar o link simbólico para alterar a instalação do qmail que você fez.
- conf-spawn: Quantas mensagens poderão ser processadas de uma vez pelo qmail. Com o patch que aplicamos, o “big-concurrency”, pode-se colocar o valor maior que 255. O próprio patch modificou este valor para 1000, e até que é um número bom. Mas como não queremos ter que recompilar o kernel para suportar mais de 509 “file descriptors”, colocaremos 500. Se seu servidor não tiver tantas mensagens assim, pode diminuir (deixar 240). Se tiver mensagem até demais (e o computador for bom também), pode aumentar.
- conf-split: Quantos subdiretórios o diretório de queue do qmail terá. 23 é um bom número, mas se quiser pode aumentar um pouquinho.
Depois de ajustados os arquivos ao seu gosto, é hora de criar os usuários do qmail. Como criar estes usuários está descrito no arquivo “INSTALL.ids”, mas colocarei aqui também para fins didáticos:
mkdir /var/qmail groupadd nofiles useradd -g nofiles -d /var/qmail/alias alias useradd -g nofiles -d /var/qmail qmaild useradd -g nofiles -d /var/qmail qmaill useradd -g nofiles -d /var/qmail qmailp groupadd qmail useradd -g qmail -d /var/qmail qmailq useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails
Agora crie um link simbólico para refletir as configurações do qmail no diretório /etc/qmail (fica mais bonito). Para fazer isso execute o comando:
mkdir /etc/qmail ln -s /etc/qmail /var/qmail/control
Feito isso, agora iremos compilar o qmail:
make setup check
Lembre-se de que para compilar os programas no Linux, você deve ter os pacotes de desenvolvimento de sua distribuição. Então você terá que ter eles instalados no sistema, ou a compilação nunca será feita. Em algumas distribuições mais novas (como por exemplo, o Red Hat 9.0), durante a compilação ocorre um erro com o “errno” indefinido, se isso estiver ocorrendo com você, pegue os patches para os programas usados neste tutorial no seguinte endereço:
ftp://moni.csi.hu/pub/glibc-2.3.1/
E aplique os patches como os anteriores antes de compilar. Os arquivos que você precisará são os que tem “programa.errno.patch” como nome de arquivo.
Depois de compilado e instalado no diretório /var/qmail, é hora de configurar. O qmail contém um script que faz uma configuração rápida. Certifique-se que sua máquina tenha um nome válido no DNS, e digite:
./config
Caso você não tenha um DNS ainda, você pode ir configurando o qmail para ser usado. Tenha em mãos o hostname e domínio de sua máquina e digite:
./config-fast nomedamaquina.dominio
Substitua o nomedamaquina e dominio pelo hostname da sua máquina. Lembre-se que se isso não for válido no DNS, você precisará ter acesso ao DNS e configurar este hostname para que o qmail funcione corretamente.
Instalando programas adicionais
Agora é hora de instalar alguns programas adicionais que trabalharão junto ao qmail. Estes são: ucspi e daemontools.
- ucspi-tcp (http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz): O ucspi-tcp é um programa feito pelo criador do qmail que substitui o inetd. Ele é usado para servir de ponte entre o cliente e o servidor.
- daemontools (http://cr.yp.to/daemontools/daemontools-0.76.tar.gz): O daemontools é um pacote com uma série de scripts para lidar com servidores (daemons). Ele é usado para o controle dos programas do qmail.
Vamos instalar os dois programas:
cd /root/build tar zpvfx /root/download/ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 make make setup check mkdir /package chmod 1755 /package cd /package tar zpvfx /root/download/daemontools-0.76.tar.gz cd admin/daemontools-0.76 package/install
Pronto. Os dois programas foram instalados com êxito.
Configurando a inicialização do qmail
Agora vamos ter que criar uma série de scripts e procedimentos para a inicialização do 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`"
Depois digite os comandos:
chmod 755 /var/qmail/rc mkdir /var/log/qmail
Agora precisaremos configurar qual o tipo de caixa de mensagem teremos no nosso servidor. Usaremos o Maildir, que é o formato preferido para se trabalhar com o qmail. O Maildir faz com que as mensagens sejam colocadas separadamente em diretórios, diferentemente do mbox, que é o formato padrão do UNIX. No mbox todas as mensagens ficam em um arquivo só, e quando este arquivo está muito grande, pode-se perder um pouco de desempenho. Para configurar o tipo de caixa de mensagem, é só colocar o tipo no arquivo “/var/qmail/control/defaultdelivery”. Com o comando abaixo, iremos configurar com Maildir:
echo "./Maildir/" > /var/qmail/control/defaultdelivery
Crie então o arquivo /var/qmail/bin/qmailctl 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 /service/qmail-send/log else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log else echo "qmail-smtpd supervise not running" fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-send" svc -d /service/qmail-send /service/qmail-send/log if [ -f /var/lock/subsys/qmail ]; then rm /var/lock/subsys/qmail fi ;; stat) svstat /service/qmail-send svstat /service/qmail-send/log svstat /service/qmail-smtpd svstat /service/qmail-smtpd/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 ;; cont) echo "Continuing qmail-send" svc -c /service/qmail-send echo "Continuing qmail-smtpd" svc -c /service/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/log ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <
Este script é o script de controle de inicialização do qmail. Com ele você poderá iniciar o qmail, parar, reiniciar, entre outros. Depois de criado esse arquivo com o conteúdo acima, utilize os comandos:
chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/sbin
Quando quiser colocar o qmail para ser rodado na inicialização do Linux, faça os ajustes necessários em sua distribuição para rodar o comando “/usr/sbin/qmailctl start”.
Agora iremos criar os scripts “supervise” do qmail:
mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log
Preencha agora os conteúdos dos arquivos:
- /var/qmail/supervise/qmail-send/run
#!/bin/sh exec /var/qmail/rc
- /var/qmail/supervise/qmail-send/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
- /var/qmail/supervise/qmail-smtpd/run
#!/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 50000000 \ /usr/local/bin/tcpserver -H -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
- /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
Execute os comandos:
echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd echo '127.:allow,RELAYCLIENT=""' >> /etc/tcp.smtp ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
Logo após feito isso, o qmail será iniciado pelo sistema e já estará funcionando.
Configurações adicionais para o qmail
Relay
Como configurações adicionais, veremos primeiro quem poderá usar seu servidor de e-mails para mandar e-mails pra fora. Isso se chama “relay”, e é muito importante, pois impede que os spammers usem seu servidor de e-mail para mandar spams para e-mails por aí afora. Edite o arquivo /etc/tcp.smtp, nele temos a seguinte linha:
127.:allow,RELAYCLIENT=""
Essa linha diz que o IP 127.x.x.x pode utilizar o relay no seu servidor SMTP. Adicione aqui os IPs e/ou faixas de IPs que poderão utilizar o seu servidor SMTP para enviar e-mails. Como por exemplo:
192.168.1.:allow,RELAYCLIENT="" 200.165.123.223:allow,RELAYCLIENT=""
E por aí vai. Depois salve o arquivo e utilize o seguinte comando para recarregar essa configuração:
qmailctl cdb
Tarpit
Quando fomos compilar o qmail, utilizamos o patch “tarpit”, que serve para injetar uma quantidade de segundos entre certas mensagens (veja a descrição do patch para uma melhor explicação). Agora é a hora de configurar esses valores. Existem dois arquivos aos quais teremos que criar para essa configuração:
- /var/qmail/control/tarpitcount: Quantidade de mensagens aceitas. Depois que o numero de mensagens exceder o valor configurado neste arquivo, o qmail irá esperar X segundos entre cada mensagem adicional. O X segundos está configurado no outro arquivo.
- /var/qmail/control/tarpitdelay: Quantidade de segundos que o qmail irá esperar entre as mensagens.
Então vamos usar como exemplo no nosso servidor 30 mensagens de limite, e 1 minutos entre cada mensagem adicional:
echo 30 > /var/qmail/control/tarpitcount echo 60 > /var/qmail/control/tarpitdelay
Mude os valores conforme suas necessidades e gostos.
Outros arquivos de configuração do qmail
Vá no diretório /var/qmail/control (ou /etc/qmail) e verifique os arquivos deste diretório. Eles contém os arquivos de configuração criados pelo comando ./config (ou ./config-fast) que foi executado durante a instalação do qmail. Modifique estes arquivos se você precisar, colocando o hostname completo (isso é feito se o ./config deu certo).
Instalando o vpopmail
Agora para cuidar das contas, iremos usar o vpopmail. O vpopmail pode ser encontrado na URL:
http://www.inter7.com/vpopmail/vpopmail-5.2.1.tar.gz
Baixe este arquivo e o descompacte:
cd /root/build tar zpvfx /root/download/vpopmail-5.2.1.tar.gz
Configurando e compilando
Antes de compilar, temos que saber o que configurar. Primeiro crie os usuários do vpopmail no sistema:
groupadd vchkpw useradd vpopmail -g vchkpw -d /mailhome
Repare que o /mailhome irá ser o diretório HOME do usuário vpopmail. Neste diretório estarão armazenados todos os e-mails dos usuários, então substitua esse diretório por um diretório que esteja numa partição grande. É sempre bom você criar uma partição (ou quem sabe colocar outro HD) grande para os e-mails e montar em um diretório. E foi isso que foi usado neste tutorial, uma partição montada no diretório /mailhome.
No nosso tutorial iremos usar o servidor MySQL para armazenar os dados das contas. A configuração inicial do MySQL não é explicada neste tutorial. Primeiro crie um banco de dados para o vpopmail no seu servidor MySQL. Certifique-se que o servidor esteja rodando e execute o comando:
mysqladmin -u root -p create vpopmail
Depois logue-se como root no seu servidor MySQL e crie um usuário vpopmail com as permissões necessárias para o banco de dados vpopmail:
mysql -u root -p mysql mysql> GRANT ALL PRIVILEGES ON vpopmail.* TO vpopmail@localhost -> IDENTIFIED BY 'senhasecreta' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
Substitua “senhasecreta” pela senha do usuário vpopmail que você desejar. Veja também se você tem instalado os pacotes de desenvolvimento do MySQL, pois eles serão necessários na hora de compilar o vpopmail. Agora edite o arquivo vmysql.h e altere as seguintes linhas:
/* Edit to match your set up */ #define MYSQL_UPDATE_SERVER "localhost" #define MYSQL_UPDATE_USER "root" #define MYSQL_UPDATE_PASSWD "secret" #define MYSQL_READ_SERVER "localhost" #define MYSQL_READ_USER "root" #define MYSQL_READ_PASSWD "secret" /* End of setup section*/
Substitua o “root” e o “secret” para o usuário “vpopmail” e a senha que você escolheu. Depois disso o vpopmail já estará pronto para utilizar o MySQL como banco de informações sobre as contas de e-mail.
O vpopmail inclui várias configurações na hora da compilação. Todas estas configurações são passadas ao código-fonte do programa através do script ./configure. Vou incluir aqui as descrições de algumas opções interessantes, você poderá escolher quais opções escolher, ou pode seguir o comando exato que utilizei neste tutorial (que é bom também).
- –enable-learn-passwords: Se a senha do usuário estiver vazia, da próxima vez que o usuário logar no sistema e autenticar, a senha será configurada automaticamente com o que ele tentou autenticar.
- –enable-auth-logging: Faz um log das tentativas de autenticação no servidor de banco de dados MySQL.
- –enable-mysql-logging: Faz um log detalhado das tentativas de autenticação no servidor MySQL.
- –enable-clear-passwd: Além das senhas criptografadas, coloca-se também elas em texto puro. É útil para quando o usuário esquece a senha e o administrador do sistema precisa dela. Mas não recomendado.
- –enable-default-domain: O domínio padrão do servidor.
- –enable-mysql: Utilizar o MySQL ou não. Neste tutorial o utilizamos.
- –enable-many-domains: Se sim, o vpopmail é otimizado para suportar vários dominios. Se não, é otimizado para poucos domínios com muitos e-mails.
- –enable-qmail-ext: Suporte às extensões de e-mail do qmail (recomendado).
- –enable-defaultquota: Qual o limite de espaço que cada usuário pode ter por padrão. Sem essa opção, fica sem limite. Você pode configurar isso para cada usuário separadamente depois, mas se quiser estabelecer um padrão, utilize o valor “XS” ou “XC” onde o X é substituido pela quantidade de bytes e numero de mensagens respectivamente. Por exemplo, o parâmetro “–enable-defaultquota=30000000S,2000C” significa que o limite padrão dos usuários será 30MB ou 2000 mensagens. Leia o README.quotas dentro do diretório do código-fonte do vpopmail para mais informações.
Então neste tutorial usaremos o comando:
./configure --enable-learn-passwords=y --enable-auth-logging=y \ --enable-clear-passwd=n --enable-valias=y \ --enable-mysql-logging=y --enable-mysql=y \ --enable-qmail-ext=y --enable-defaultquota=30000000S,2000C
Caso o configurador não ache as bibliotecas do MySQL, instale o pacote de desenvolvimento do MySQL (como dito acima) e aponte com o parâmetro “–enable-libdir”. Por exemplo: “–enable-libdir=/usr/include/mysql”.
Agora é hora de compilar e instalar o vpopmail através dos comandos:
make make install-strip
Pronto! O vpopmail já está configurado e funcionando no diretório /mailhome (ou o que você escolheu). Agora é hora de criarmoso o seu primeiro domínio. Fazemos isso com o comando:
/mailhome/bin/vadddomain dominio.com.br
Digite a senha do postmaster, repita e o domínio está criado. Agora é só ir adicionando usuários neste domínio:
/mailhome/bin/vadduser [email protected] (Senha) /mailhome/bin/vadduser [email protected] (Senha) /mailhome/bin/vadduser [email protected] (Senha)
E por aí vai.
Instalando o Courier-IMAP
Por enquanto nós configuramos o servidor de e-mail (SMTP) e suas contas. Já dá pra mandar e-mail e tudo mais. Mas e pra pegar os e-mails no servidor? Precisaremos de um servidor POP e/ou IMAP. Neste tutorial usaremos o Courier-IMAP, que é um servidor POP e IMAP especialmente feito para servidores qmail com o tipo de caixa de mensagem “Maildir”. Caso você não tenha usado o formato “Maildir” na caixa de mensagem, utilize outro servidor como o próprio qmail-pop3d.
O Courier-IMAP pode ser obtido na seguinte URL:
http://prdownloads.sourceforge.net/courier/courier-imap-2.1.1.tar.bz2
Baixe este arquivo para o diretório /tmp. Você terá que virar um usuário comum, pois o Courier-IMAP não permite que você compile o programa com o root. Depois descompacte o programa e compile:
cd /tmp tar jpvfx courier-imap-2.1.1.tar.bz2 cd courier-imap-2.1.1 su root -c "cp /mailhome/lib/libvpopmail.a /usr/lib ; chmod 644 /usr/lib/libvpopmail.a" (Senha) ./configure --prefix=/usr --sysconfdir=/etc/courier-imap make su root -c "make install-strip; make install-configure"
Agora você terá que decidir quais os serviços que você rodará com o Courier-IMAP. Estão disponíveis: IMAP, POP3, IMAP sob SSL e POP3 sob SSL. No caso deste tutorial, usaremos o IMAP e o POP3. Primeiro logue-se como root e copie o arquivo de inicialização para o diretório /etc/init.d:
cd /tmp/courier-imap-2.1.1 cp courier-imap.sysvinit /etc/init.d chmod 755 /etc/init.d/courier-imap
Depois coloque este script na inicialização do Linux, de acordo com sua distribuição. O comando para iniciar é:
/etc/init.d/courier-imap start
Mas primeiro devemos configurar primeiro. Vá no diretório “/etc/courier-imap”, e edite os arquivos “imapd” e “pop3d”, mudando no final de cada arquivo:
IMAPDSTART=YES (e) POP3DSTART=YES
Agora você já pode iniciar o courier-imap com o comando anterior, que os servidores de IMAP e POP3 estarão funcionando.
Instalando programas adicionais
Certo, temos os serviços básicos para um servidor de e-mail rodar: um servidor SMTP, POP3, um banco de dados com as contas dos usuários. Temos agora que instalar novos programas e acoplá-los à nossa instalação para melhorar o nosso servidor de e-mail. Isso inclui um gerenciador de listas de discussão, filtro de e-mails, anti-virus, e por último uma interface de administração de contas do vpopmail.
Gerenciador de listas de discussão: ezmlm-idx
O ezmlm-idx é uma versão extendida do ezmlm, que por sua vez é um gerenciador de listas de discussão criado pelo próprio criador do qmail para funcionar em conjunto com o qmail. O ezmlm é um gerenciador muito bom, e muito usado. Outras alternativas ao ezmlm incluem o majordomo, mas no nosso tutorial usaremos o ezmlm-idx. O site oficial do ezmlm-idx é:
Você pode obter a versão 0.40 do ezmlm-idx e a versão 0.53 do ezmlm (você vai precisar dos dois), nas seguintes URLs:
http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-idx-0.40.tar.gz
http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-0.53.tar.gz
Baixe e depois descompacte estes dois arquivos:
cd /root/build tar zpvfx /root/download/ezmlm-0.53.tar.gz tar zpvfx /root/download/ezmlm-idx-0.40.tar.gz cd ezmlm-0.53
Agora você vai precisar editar 3 arquivos, que são:
- conf-bin: Diretório onde vão ficar os binários do ezmlm. Utilize o /usr/bin
- conf-man: Diretório onde vão ficar as páginas de manual do ezmlm. Utilize o /usr/man
- conf-qmail: Caso você tenha instalado o qmail em algum lugar quie não seja o /var/qmail, modifique este arquivo, colocando nele o diretório onde você instalou o qmail. No nosso caso vai ficar como /var/qmail mesmo.
Depois de editado os arquivos, vamos aplicar o patch do ezmlm-idx antes de compilar e instalar. Para fazer isso execute os seguintes comandos:
cp -R /root/build/ezmlm-idx-0.40/* /root/build/ezmlm-0.53 (Sobrescreva todos os arquivos se precisar) patch < idx.patch echo `which crontab` > conf-cron (Isso vai colocar o executavel do crontab no arquivo conf-cron)
E antes de compilar, vamos habilitar o suporte ao MySQL já que na instalação deste tutorial estamos usando o MySQL como banco de dados para a gerencia de contas. Edite o arquivo “sub_mysql/conf-sqlcc” e o “sub_mysql/conf-sqlld”. O conf-sqlcc aponta para o diretório onde estão os cabeçalhos de desenvolvimento do MySQL (mais uma vez, você precisará ter instalado o pacote de desenvolvimento do MySQL), que geralmente fica em /usr/include/mysql (ou /usr/include). Já o “conf-sqlld” aponta para o diretório onde estão as bibliotecas, que geralmente ficam em /usr/lib/mysql (ou /usr/lib). Tente essas opções caso uma ou outra não funcione.
Depois compile o módulo do MySQL:
make mysql
Pronto, vamos agora compilar o programa, as páginas de manual, o suporte à língua Portuguesa do Brasil:
make clean make make man make pt_BR
E assim o programa estará totalmente compilado. Como passo final, iremos configurar o servidor MySQL para o ezmlm-idx utilizar. Teremos primeiro que criar o nosso banco de dados, o usuário ezmlm e dar as permissões:
mysqladmin -u root -p create ezmlm mysql -u root -p mysql mysql> GRANT ALL PRIVILEGES ON ezmlm.* TO ezmlm@localhost -> IDENTIFIED BY 'senhasecreta' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
Depois na linha de comando digite:
./ezmlm-mktab -d list | mysql -uezmlm -psenhasecreta -f ezmlm
Alguns erros podem ocorrer, dizendo que as tabelas não existem. Isto é normal, e este comando irá criar essas tabelas para você, e deixar o servidor MySQL pronto para o uso do ezmlm-idx. Depois disso é só instalar o ezmlm-idx no sistema através do comando:
make setup
E assim o ezmlm-idx estará totalmente instalado no seu sistema! :)
Anti-Virus
Um bom servidor de e-mails sempre tem que ter um anti-virus. Nossa instalação irá suportar uma variedade de anti-virus para sistemas Linux disponíveis no mercado, tanto comerciais como livres. O Anti-virus será usado em conjunto com o qmail-scanner (Ver próxima seção). Como neste tutorial estamos usando uma solução livre, usaremos o ClamAV, que tem sua URL oficial sendo:
Baixe a versão mais nova. Neste tutorial, usaremos o seguinte arquivo:
http://unc.dl.sourceforge.net/sourceforge/clamav/clamav-0.60.tar.gz
Baixe este arquivo, descompacte e instale:
cd /root/build tar zpvfx /root/download/clamav-0.60.tar.gz cd clamav-0.60 groupadd clamav useradd clamav -g clamav -s /dev/null ./configure --prefix=/usr --sysconfdir=/etc make make install ldconfig
Agora edite o arquivo /etc/clamav.conf e vamos configurar. A seguir vai um arquivo de configuração exemplo, com as opções comentadas no próprio arquivo:
# Exemplo de configuração do ClamAV # # Arquivo de log para o clamd, muito útil para se avaliar depois o que o # clamav está fazendo. LogFile /var/log/clamav.log # Tamanho máximo do arquivo de log. Se voce estiver preocupado com seu # espaço em disco, uns 5MB está bom. Especifique o valor 0 para deixar # sem limite de tamanho máximo. LogFileMaxSize 5M # Loga a hora para cada mensagem do log LogTime # Log mais detalhado LogVerbose # O arquivo PID contendo o identificador do processo para o servidor clamd. PidFile /var/run/clamav/clamd.pid # Diretório onde estão os arquivos .db (banco de dados de virus, entre outros) DataDirectory /usr/share/clamav # Diretório onde vai ficar o socket local de conexão com o clamd LocalSocket /var/lib/clamav/clamd # Profundidade máxima de diretórios para ser scanneado (segurança) MaxDirectoryRecursion 15 # Suporte adicional para scannear e-mails ScanMail # Scannear arquivos compactados ScanArchive # Tamanho máximo limite para scannear arquivos compactados. ArchiveMaxFileSize 30M # Limite máximo de recursividade de arquivos compactados dentro de # arquivos compactados ArchiveMaxRecursion 5 # Número máximo de arquivos scanneados dentro de um arquivo compactado ArchiveMaxFiles 1000 # Habilitar o suporte ao Clamuko (Scanneamento em tempo real) ClamukoScanOnLine # Set access mask for Clamuko. ClamukoScanOnOpen ClamukoScanOnClose ClamukoScanOnExec # Qual o diretório que será scanneado os arquivos. Como estamos usando # num servidor de e-mail, coloque aonde os seus e-mails ficam. No nosso # caso fica em /mailhome ClamukoIncludePath /mailhome # Limite do tamanho do arquivo para ser scanneado com o Clamuko ClamukoMaxFileSize 5M # Habilitar suporte a arquivos compactados no Clamuko ClamukoScanArchive
Depois execute os comandos:
mkdir /var/run/clamav chown clamav.clamav /var/run/clamav -R freshclam (O freshclam atualiza a base de dados do ClamAV)
Agora pra ficar mais eficiente, vamos incluir o freshclam no crontab, para que o programa seja rodado todo dia, verificando por novos bancos de dados com novos virus. Para incluir no crontab, adicione a seguinte linha ao arquivo /etc/crontab:
0 1 * * * root /usr/bin/freshclam
Agora todo dia à 1 da manhã ele vai chegar se existem atualizações no banco de dados de Virus. Caso exista, ele baixa as atualizações automaticamente para você.
Em seguida crie o script /etc/init.d/clamav (ou o equivalente em sua distribuição) com o seguinte conteúdo:
#!/bin/sh # description: clamav antivirus case "$1" in start) echo -n "Iniciando o ClamAV... " /usr/sbin/clamd echo "feito." ;; stop) echo -n "Parando o ClamAV... " kill -TERM `cat /var/run/clamav/clamd.pid` echo "feito." ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0
Em seguinda coloque-o na inicialização do sistema (como o script do qmail). Não esqueça de tornar o script executável com o comando:
chmod 755 /etc/init.d/clamav
Agora execute o clamav para ver se está tudo OK:
/etc/init.d/clamav start
Filtro de e-mails: qmail-scanner
O qmail-scanner é um programa que atua como intermediador dos e-mails do servidor qmail. Com ele você pode especificar que mensagens podem passar ou não, a depender de certos critérios. Estes critérios podem ser por exemplo: barramento de extensões, scannear em programas externos (anti-virus por exemplo), assunto da mensagem, entre outros. Apesar de seu servidor de e-mail perder um pouco de desempenho por ter que scannear todas as mensagens, vale muito à pena ter essa medida de segurança adicional. A URl oficial do programa é:
http://qmail-scanner.sourceforge.net/
Baixe a versão mais nova. Neste tutorial, usaremos o arquivo:
http://unc.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.20rc3.tgz
O qmail-scanner vai fazer uso de um patch do qmail que aplicamos antes. É o qmailqueue-patch. Com ele, podemos especificar para o qmail redirecionar todo o fluxo de entrada de mensagens para o qmail-scanner ao invés do qmail-queue, assim o qmail-scanner pode fazer o filtro dos e-mails e repassar para o verdadeiro qmail-queue, que faz a entrega dos e-mails nas caixas locais.
O qmail-scanner vai precisar de alguns outros programinhas e códigos para satisfazer suas dependências. Estes são:
- Perl 5.005_03+ e módulos: Time::HiRes, DB_File, Sys::Syslog: http://www.cpan.org\
- Maildrop 1.3.8+: http://download.sourceforge.net/courier/maildrop-1.6.0.tar.bz2
- TNEF Unpacker: http://unc.dl.sourceforge.net/sourceforge/tnef/tnef-1.2.1.tar.gz
Instale os módulos do Perl com o CPAN (O perl vem em praticamente todas as distribuições):
perl -MCPAN -e shell (Configure o CPAN de acordo com as instruções) install Time::HiRes install DB_File install Date::Parse
Para quem não sabe, o CPAN é um repositório de códigos em perl. Com ele você pode instalar “módulo” Perl com a facilidade de um comando. Em termos de facilidade, é bem parecido com o famoso apt :) Os comandos acima instalam os 3 módulos do Perl requeridos pelo qmail-scanner. Além disso, ele instala também outros módulos associados à esses três e que não estejam no seu sistema.
Agora vamos instalar o Maildrop:
cd /root/build tar jpvfx /root/download/maildrop-1.6.0.tar.bz2 cd maildrop-1.6.0 ./configure --prefix=/usr make make install-strip make install-man
Pronto! Maildrop instalado, agora é a vez do TNEF:
cd /root/build tar zpvfx /root/download/tnef-1.2.1.tar.gz cd tnef-1.2.1 ./configure --prefix=/usr make make install
Pronto! TNEF instalado. Agora vamos voltar ao qmail-scanner… Mas antes! O qmail-scanner rodará como root pelo perl, ou seja, ele precisará do perl com suid. Você precisará ter uma instalação do Perl-suid para o qmail-scanner funcionar. Procure pelo pacote do perl-suid em sua distribuição. (Por exemplo, no Debian você pode digitar apt-get install perl-suid).
cd /root/build tar zpvfx /root/download/qmail-scanner-1.20rc3.tgz cd qmail-scanner-1.20rc3 groupadd qscand useradd qscand -g qscand -s /dev/null ./configure --install
O ./condigure irá vasculhar seu sistema pelos programas que ele precisa e por anti-virus disponíveis. Se você fez tudo certo, o resultado que aparecerá na tela será parecido com esse:
Building Qmail-Scanner 1.20rc3... This script will search your system for the virus scanners it knows about, and will ensure that all external programs qmail-scanner-queue.pl uses are explicitly pathed for performance reasons. It will then generate qmail-scanner-queue.pl - it is up to you to install it correctly. Continue? ([Y]/N) Y /usr/bin/uudecode works as expected on system... Found tnef on your system! That means we'll be able to decode stupid M$ attachments :-) The following binaries and scanners were found on your system: mimeunpacker=/usr/bin/reformime uudecode=/usr/bin/uudecode unzip=/usr/bin/unzip tnef=/usr/bin/tnef Content/Virus Scanners installed on your System clamuko=/usr/bin/clamdscan (which means clamscan won't be used as clamdscan is better) Qmail-Scanner details. log-details=0 fix-mime=1 debug=1 notify=sender,admin redundant-scanning=no virus-admin=root@hayama local-domains='hayama' silent-viruses='klez','bugbear','hybris','yaha','braid','nimda','tanatos','sobig','winevar','palyh','fizzer' scanners="clamuko_scanner" If that looks correct, I will now generate qmail-scanner-queue.pl for your system... Continue? ([Y]/N) Y Testing suid nature of /usr/bin/suidperl... Looks OK... Hit RETURN to create initial directory structure under /var/spool/qmailscan, and install qmail-scanner-queue.pl under /var/qmail/bin: (ENTER) perlscanner: generate new DB file from /var/spool/qmailscan/quarantine-attachments.txt perlscanner: total of 9 entries. Finished installation of initial directory structure for Qmail-Scanner under /var/spool/qmailscan and qmail-scanner-queue.pl under /var/qmail/bin. Finished. Please read README(.html) and then go over the script (/var/qmail/bin/qmail-scanner-queue.pl) to check paths/etc. "/var/qmail/bin/qmail-scanner-queue.pl -r" should return some well-known virus definitions to show that the internal perlscanner component is working. That's it! (...)
Pronto! O qmail-scanner foi instalado no sistema, e seus arquivos de banco de dados e configuração estão disponíveis no diretório /var/spool/qmailscan. Agora aproveite para editar o arquivo “/var/spool/qmailscan/quarantine-attachments.txt” e configure o filtro de arquivos anexados. Por exemplo, adicione as seguintes linhas no final do arquivo (Nota: os espaços nas linhas não são espaços, são TABs):
.exe 0 Executable binary .com 0 Non relocable MSDOS executable binary .vbs 0 Visual Basic Script .vba 0 Visual Basic Application .shs 0 Shell automation code .scr 0 Screen Saver .bat 0 COMMAND.COM batch file .btm 0 JP Software fast batch file .reg 0 Windows Registry file .msi 0 Executable binary .msc 0 Executable binary .chm 0 Compiled HTML help file .inf 0 Windows INF file .cpl 0 Control Panel library .wsf 0 Windows Scripting File .vbe 0 VisualBasic Encoded .js 0 JavaScript .jse 0 JavaScript Encoded .css 0 Cascading Style Sheets .wsh 0 Windows Scripting Host .sct 0 Scriptlet File .hta 0 HTML Application .lnk 0 Windows Explorer links .cmd 0 cmd.exe NT batch .pif 0 Windows Program Information Files .ade 0 Access Project Extension .mdb 0 Access Application .adp 0 Access Project .mde 0 Access MDE Database .bas 0 Visual Basic Class Module .msp 0 Windows Installer Patch .mst 0 Visual Test Source File .pcd 0 Photo CD Image .crt 0 Security Certificate .hlp 0 Windows Help File .url 0 Internet Shortcut (Uniform Resource Locator) .ins 0 Internet Communication Settings .isp 0 Internet Communication Settings .vb 0 Script Script File .wsc 0 Windows Script Componen .shb 0 Shell Scrap object .mp3 0 MPEG Layer 3 Sound .mp2 0 MPEG Layer 2 Sound
Todas as extensões aí listadas serão bloqueadas. Dá pra perceber como funciona, né? Toda vez que você modificar este arquivo, digite o comando:
/var/qmail/bin/qmail-scanner-queue.pl -g
Agora só falta uma última modificação: falar ao qmail para usar o qmail-scanner nos seus e-mails. Para isso usaremos o recurso do patch qmailqueue, aplicado na instalação do qmail. Para quem não lembra, este patch faz com que o qmail procure pela variável de ambiente QMAILQUEUE, e use o programa contido nessa variável para mandar os e-mails recebidos. Para configurar essa variável de ambiente, temos que editar o arquivo CDB do qmail, que no nosso caso ficou como sendo o /etc/tcp.smtp. Dei um exemplo na seção do qmail, então o mesmo exemplo será usado aqui abaixo, com as modificações para o qmail-scanner:
127.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" 192.168.1.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" 200.165.123.223:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
Assim todo e-mail será passado pro qmail-scanner. Digite o seguinte para recarregar este arquivo:
qmailctl cdb
Conclusão
E aqui acaba o tutorial de como montar um servidor de e-mail completo usando software livre. Espero que tenha sido proveitoso para você leitor. Quaisquer dúvidas por favor me contacte pelo meu e-mail. Com o pessoal me mandando e-mail, eu consigo melhorar drasticamente este tutorial a medida do tempo! Mande suas dúvidas, sugestões e críticas, para que eu torne este tutorial cada vez melhor.
Referências:
- Life With QMail: http://www.lifewithqmail.org
- Página do QMail: http://www.qmail.org
- Documentações de cada programa :)
Bom proveito!