Montando um servidor de E-Mail com o qmail
Hugo Cisneiros, hugo_arroba_devin_ponto_com_ponto_br Uma IntroduçãoO 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. 1. Instalando e configurando o QMailNeste 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 1.1. PatchesPrecisaremos 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:
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.
Agora vamos primeiro descompactar o qmail e instalar estes patches. Usaremos neste tutorial diretórios exemplo. Adapte como quiser.
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. 1.2. Compilando e instalando o qmailHora 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:
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:
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:
Feito isso, agora iremos compilar o qmail:
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:
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:
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. 1.3. Instalando programas adicionaisAgora é hora de instalar alguns programas adicionais que trabalharão junto ao qmail. Estes são: ucspi e daemontools.
Vamos instalar os dois programas:
Pronto. Os dois programas foram instalados com êxito. 1.4. Configurando a inicialização do qmailAgora 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:
Depois digite os comandos:
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:
Crie então o arquivo /var/qmail/bin/qmailctl com o seguinte conteúdo:
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:
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:
Preencha agora os conteúdos dos arquivos: /var/qmail/supervise/qmail-send/run
/var/qmail/supervise/qmail-send/log/run
/var/qmail/supervise/qmail-smtpd/run
/var/qmail/supervise/qmail-smtpd/log/run
Execute os comandos:
Logo após feito isso, o qmail será iniciado pelo sistema e já estará funcionando. 1.5. Configurações adicionais para o qmail1.5.1. RelayComo 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:
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:
E por aí vai. Depois salve o arquivo e utilize o seguinte comando para recarregar essa configuração:
1.5.2. TarpitQuando 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:
Então vamos usar como exemplo no nosso servidor 30 mensagens de limite, e 1 minutos entre cada mensagem adicional:
Mude os valores conforme suas necessidades e gostos. 1.5.3. Outros arquivos de configuração do qmailVá 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). 2. Instalando o vpopmailAgora 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:
2.1. Configurando e compilandoAntes de compilar, temos que saber o que configurar. Primeiro crie os usuários do vpopmail no sistema:
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:
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:
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:
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).
Então neste tutorial usaremos o comando:
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:
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:
Digite a senha do postmaster, repita e o domínio está criado. Agora é só ir adicionando usuários neste domínio:
E por aí vai. 3. Instalando o Courier-IMAPPor 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:
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:
Depois coloque este script na inicialização do Linux, de acordo com sua distribuição. O comando para iniciar é:
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:
Agora você já pode iniciar o courier-imap com o comando anterior, que os servidores de IMAP e POP3 estarão funcionando. 4. Instalando programas adicionaisCerto, 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. 4.1. Gerenciador de listas de discussão: ezmlm-idxO 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 Baixe e depois descompacte estes dois arquivos:
Agora você vai precisar editar 3 arquivos, que são:
Depois de editado os arquivos, vamos aplicar o patch do ezmlm-idx antes de compilar e instalar. Para fazer isso execute os seguintes comandos:
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:
Pronto, vamos agora compilar o programa, as páginas de manual, o suporte à língua Portuguesa do Brasil:
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:
Depois na linha de comando digite:
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:
E assim o ezmlm-idx estará totalmente instalado no seu sistema! :) 4.2. Anti-VirusUm 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:
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:
Depois execute os comandos:
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:
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:
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:
Agora execute o clamav para ver se está tudo OK:
4.3. Filtro de e-mails: qmail-scannerO 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:
Instale os módulos do Perl com o CPAN (O perl vem em praticamente todas as distribuições):
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:
Pronto! Maildrop instalado, agora é a vez do TNEF:
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).
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:
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):
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:
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:
Assim todo e-mail será passado pro qmail-scanner. Digite o seguinte para recarregar este arquivo:
5. ConclusãoE 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:
Bom proveito! |