Gateway de email com Qmail - proteção antivírus e antispam

SPAM e vírus são os maiores problemas para quem usa o email como ferramenta de trabalho e comunicação diária. Usando qmail você pode construir um servidor que filtra todo o lixo digital e entrega somente mensagens legítimas, e o mais importante: pode vender o serviço para outras empresas.

[ Hits: 115.248 ]

Por: Patrick Brandao em 28/09/2004 | Blog: http://www.patrick.eti.br


Objetivo e ambiente



Suponhamos que temos o seguinte (e simples) ambiente no domínio empresa.esa.br:


Dois DNS's (um master e um slave), um servidor HTTP (webmail, página da empresa, etc) e um servidor de e-mail (pode ser da M$ Exc., Postfix, Exim, etc).

E queremos:


Um servidor para filtrar o lixo eletrônico.

Recomendação mínima para o servidor Gateway de e-mail:

Hardware

  • Memória: 256Mb (livre)
  • HD: 2GB (livre)
  • Placa de rede: 1
  • Processamento: 800Mhz

Software

  • Linux: Slackware 10.0 (instalação Full - árvore de pendências considerando o Slackware 10 FULL - outras distribuições podem ter mais ou nenhuma);
  • Netqmail 1.05;
  • ucspi-tcp;
  • daemontools;
  • Qmail-scanner 1.23;
  • Módulos PERL: Time::HiRes, DB_File, Sys::Syslog;
  • tnef;
  • Maildro;p
  • McAfee;
  • Clamav;
  • SpamAssassin;
  • Módulos PERL: ExtUtils::MakeMaker, File::Spec, Pod::Usage, HTML::Parser, Sys::Syslog, DB_File, Net::DNS, Mail::Audit, Mail::Internet, Net::SMTP, Digest::SHA1, Net::Ident.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Objetivo e ambiente
   3. Instalação do netqmail
   4. Configuração do qmail para roteamento de mensagens e DNS
   5. Instalando Clamav
   6. Instalando McAfee
   7. Instalando SpamAssassin
   8. Instalando Qmail-Scanner
Outros artigos deste autor

NoCatAuth - Construindo um firewall/gateway autenticado

Ziproxy - Proxy de compactação e redução de imagens

Acelerador de conexões dial-up para provedores de acesso

Freeradius - servidor radius eficiente e completo

Anti-SPAM ASK - Válidando remetentes por confirmação de mensagens

Leitura recomendada

Bloqueando SPAM no Kmail com o SpamAssassin

Aliases e autenticação para aliases no Postfix

Zimbra no Debian 5

Instalando o servidor de mensagens Postfix no Slackware 10.1

MTA Selor: Servidor de E-mails - Novo Projeto GPL

  
Comentários
[1] Comentário enviado por tucs em 28/09/2004 - 08:33h

Realmente, você está de PARABENS, é dificil ver artigos tão bons assim.
Espero que você possa continuar contribuindo para o SL e para o VOL.

Abraços
Eduardo Assis

[2] Comentário enviado por gustavo_marcon em 28/09/2004 - 18:29h

Olá. parabéns, ótimo artigo e realmente excelente solução para empresas. Sei que foge um pouco do seu artigo, mas saberia me dizer o q tenho q configurar no /etc/procmailrc pra usar junto ao spamassassin?

Muito obrigado!!

[3] Comentário enviado por patrickbrandao em 28/09/2004 - 21:42h

Gustavo,

eu ja use spamassassin via procmail num servidor que tinha:
qmail + vpopmail + procmail + spamassassin.

Veja como fiz:

a pasta do dominio era /home/vpopmail/domains/dominio.com/
dentro dela, como em todas as pastas de dominio do qmail, ha um arquivo chamado .qmail-default, o conteudo dele é:

| preline /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox

bom, para usar o procmail + spamassassin, coloquei assim:

| preline procmail -p -m /etc/procmail/saprocmail

o conteudo do script procmail saprocmail era:
#--------------------- inicio
:0fw
* < 100000
| spamc

:0w
* ^X-Spam-Status: Yes
/dev/null

:0w
| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox

#---------------------- fim


o script acima, passa todas as mensagens menores que 100k no spamc, voce pode usar o comando spamassassin se nao tiver o spamd na memoria. se mensagem for marcada como spam, ela vai para /dev/null (buraco negro) e ja era, caso ela passe, o vdelivermail cuida dela.

existem muitos macetes para tratar mensagens com o procmail, essa é apenas uma palinha,

espero ter ajudado.

Patrick Brandão
http://www.patrick.eti.br/
contato@patrick.eti.br

[4] Comentário enviado por cioban em 02/11/2004 - 01:43h

Ola Patrick, parabéns pelo seu artigo muido bom.

Estou com o seguinte problema, eu já tenho o qmail+vpopmail+courier-imap+qmail-scanner+spamassassin funcionando quase legal, o qmailscaner passa as mensagens pelo spamasassin que remarca o assunto, o que eu quero fazer é integrar o qmail com o procmail para que todas as mensagens que forem spam , fossem direcionadas para uma pasta "SPAM" dentro do Maildir de cada usuário, por favor me ajude.

[5] Comentário enviado por patrickbrandao em 02/11/2004 - 22:36h

Grande Sérgio,

me perguntaram isso outro dia no meu e-mail...
vou considerar que o vpopmail esta instalado em /vpopmaildir

altera o arquivo .qmail-default ou .qmail-<usuario> dentro da pasta do dominio da seguinte maneira:

#----------------------- inicio .qmail-?????
| preline procmail -p -m /etc/procmail/tospamdir
#----------------------- fim .qmail-?????

no arquivo /etc/procmail/tospamdir coloque o conteudo:

#----------------------- inicio /etc/procmail/tospamdir
# script procmail por Patrick Brandao -- contato@patrick.eti.br

# 1 - setar variaveis
# ----------------------------------------------------------------
#VERBOSE=ON
#LOGFILE=/tmp/procmail.log
GETINFO=`a=\`/vpopmaildir/bin/vuserinfo -d $EXT@$HOST\`; b=$?; echo "$a:$b"`
VIRTUALHOME=`echo "$GETINFO" | cut -f1 -d:`
EXITV=`echo "$GETINFO" | cut -f2 -d:`
SPAMDIR="$VIRTUALHOME/Maildir/.SPAM/"

# caso o usuario nao exista (spammer tentando adivinhar), lixo, isso
# ajuda a diminuir a queue do qmail, mas burla a rfc (retire se quiser)
:0w
* ? test "$EXITV" = "255"
/dev/null

# 2 - caso a mensagem seja classificada como spam
# ----------------------------------------------------------------
:0w
* ^Subject:.*SPAM
$SPAMDIR

:0w
* ^X-Spam-Status: Yes
$SPAMDIR

# 3 - caso contrario, entrega normal
# ----------------------------------------------------------------
:0w
|/vpopmaildir/bin/vdelivermail '' bounce-no-mailbox

#----------------------- fim /etc/procmail/tospamdir

bom, vale lembra: a pasta que estiver dentro da variavel $SPAMDIR tem que existir, senao a mensagem já era! Para que o procmail entregue em maildir, o caminho tem que terminar com / (barra)

A pasta de spam só pode ser vista pelo protocolo IMAP pois o POP3 nao suporta pastas, assim, se voce usa squirrelmail como webmail, isso vai ser legal. voce pode criar efeitos independentes, leia:

# man procmailex
# man procmail

e no mais, boa sorte!

Patrick Brandão
http://www.patrick.eti.br/
contato@patrick.eti.br

[6] Comentário enviado por cioban em 09/11/2004 - 08:05h

Patrick,

Funcionou muito bem esse esquema do procmail, só não funcionaou a questão de se o endereço não existir manda para /dev/null , mas tá bom demais, muito obrigado.

O que eu quero agora é bloquear as mensagens que chegam sem assunto, mas o servidor teria que enviar uma mensagem avisando que bloqueou, será que o qmail-scanner ou o procmail bloqueia isso??

Sérgio Cioban Filho

[7] Comentário enviado por patrickbrandao em 09/11/2004 - 08:57h

Vc vai ter que usar expressoes regulares para detectar o final da linha apos a string "Subject: ", passe para um script que vai mandar a mensagem de aviso, adicione ao inicio do script procmail:

#--------------------------- inicio script procmail
MYMAIL="$EXT@$HOST"
:0w
* ^Subject: $
/vpopmail/scripts/aviso.sh $MYMAIL
#------------------------- fim
Obs: nao estou muito certo acerca da regex "* ^Subject: $"

em /vpopmail/scripts/aviso.sh voce coloca:

#-------------------------- inicio /vpopmail/scripts/aviso.sh
#!/bin/sh
PARA="$1"
SPAMNOSUBJECT="/var/tmp/NOSUBJECT/mail.XXXXXX"
cat > $SPAMNOSUBJECT
FROM=`grep ^From: $SPAMNOSUBJECT | cut -f2 -d:`

printf "From: postmaster@dominio.com.br
To: $PARA
Subject: E-mail sem assunto enviado para voce por $FROM

Um e-mail sem assunto foi enviado para voce e ficou retido no servidor
Arquivo salvo: $SPAMNOSUBJECT
" | /var/qmail/bin/qmail-inject

exit 0

#-------------------------- fim

o script acima pode ser baixado em
http://www.patrick.eti.br/downloads/aviso.sh">http://www.patrick.eti.br/downloads/aviso.sh

me mande uma resposta dizendo se conseguiu ou nao.

Patrick Brandão
http://www.patrick.eti.br/
contato@patrick.eti.br

[8] Comentário enviado por lacierdias em 24/12/2004 - 10:02h

nem vou te parabenizar pelo artigo pq isso não seria suficiente para expressar o qnto ele me ajudou...Abraço

[9] Comentário enviado por seruas em 21/02/2005 - 17:54h

Oi Patrick

Usei seu procedimento passo a passo mas nao consigo fazer telnet a porta 25 tentei dar um Netstat -na mas nada scutando na porta 25 e tambem tenho um erro que eh: readproctitle service errors: ... `If [ -z "$QMAILDUID" -o -z "$NOFIL , nao acredito que seja isso o qmail esta funcionando bem , se puder me ajudar agradeco, ou entao como faco configuracao parecida no senmail?? tou usando RedHat Enterprise Edition AS versao 4 tudo atualizado. Obrigado
Sergio

[10] Comentário enviado por patrickbrandao em 22/02/2005 - 00:25h

Sergio,

isso é um erro no arquivo /var/qmail/supervise/qmail-smtpd/run

Edite e procure onde ta errado... no site lifewithqmail.org tem uma parte ensinando a sintaxe deste script.
(reinicie o qmail depois de arrumar)
Patrick Brandao

[11] Comentário enviado por lanvargas em 31/03/2005 - 17:09h

Olá Patrick,

fiquei muito entusiasmado com o seu artigo, porém acho que não resolve o meu problema, tenho um servidor de domínios, portanto vários domínios hospedados, e uma quantidade enorme de contas de e-mail, que se alteram constantemente dada a natureza do serviço prestado. Venho tendo grandes problemas com o meu serviço graças a ação de spammers e também a falha na aplicação do meu servidor que é um apliancce do Gruponet, empresa de Limeira-SP. Como eles não resolvem o meu problema, começei a pesquisar na internet uma solução para isso. Será que você poderia me indicar uma ?

Forte abraço e sucesso,

Luiz Vargas.

[12] Comentário enviado por patrickbrandao em 31/03/2005 - 17:39h

Luiz,

essa solucao nao envolve contas, e sim o dominios apenas. No diagrama que desenhei mostra isso:

antes:
web-----------servidor_email

depois:
web-----------gateway_smtp-----------servidor_email

o que o gateway_smtp faz e' receber os e-mails em nome do dominio, limpar e repassar para o servidor_email, ele trata apenas os e-mails do domino e nao a conta, ou seja, se voce programar o rcpthost para aceitar e-mails do dominio exemplo.com, ele vai receber
nomedaconta@exemplo.com e enviar para o servidor_email, nao se importando o que possa ser "nomedaconta", que vem antes do @
Assim, nao importa qual software vc usa em servidor_email. Se voce quer hoje adicionar uma conta nova, o gateway_smtp nao se importa se ela existe ou nao, ele vai retirar virus e spam e entregar para o servidor_email. A solucao que usei nesse artigo traz algo novo para o mercado, o FILTRO SMTP TRANSPARENTE. A conexao com destino ao servidor real pode ser redirecionada com iptables para o gateway de e-mail, que limpara o e-mail (independente de quem seja o destinatario) e entregara' para o servidor oficial (postfix, exchange, etc...), se a conta existe ou nao, se tem quota ou nao, isso quem vai tratar e o servidor oficial.

Patrick Brandao

[13] Comentário enviado por mayconsan em 07/05/2005 - 14:17h

Meu procmail ta gerando o seguinte log:
procmail: Non-zero exitcode (1) from " test "$EXITV" = "255""
procmail: No match on " test "$EXITV" = "255""
procmail: No match on "^Subject:.*SPAM"
procmail: No match on "^X-Spam-Status: Yes"
procmail: Executing "vpopmail/bin/vdelivermail,,bounce-no-mailbox"
procmail: Program failure (100) of "vpopmail/bin/vdelivermail"
procmail: Assigning "LASTFOLDER=/vpopmail/bin/vdelivermail bounce-no-mailbox"
From suporte@meudominio.com.br Sat May 07 17:14:01 2005
Subject: Re: teste
Folder: **Bounced**

Ele não envia a mensagem pra lugar nenhum se ela nào for Spam.
Oque poderia estar acontecendo?

Valeu..

[14] Comentário enviado por angelocwn em 17/05/2005 - 21:18h

Boa noite! Prezado, por favor caso saiba como resolvo o problema que vou relatar mande e-mail para angelocwn@veloxmail.com.br, obrigado!

Segue problema: Estou com um servidor rodando RedHat Fedora, Qmail, Qmail-Scaner e quando qualquer usuário tenta responder confirmação de leitura de um e-mail não aparece nenhum erro de envio, porém a confirmação fica barrada como spam. E um outro problema é que preciso fazer com que toda mensagem enviada por um determinado usuário vá também uma cópia para seu superior.

[15] Comentário enviado por menezesr em 03/04/2006 - 19:08h

O caso do e-mail ir uma copia para o superior, você pode usar a tabela de aliases para resolver da seguinte forma:
nome_do_email: usuario1, usuario2

espero ter ajduado.

[16] Comentário enviado por zanja em 27/04/2006 - 15:43h

Olá, trabalho em um provedor e estou com o seguinte problema.
Em um de nossos dominios recebemos uma quantidade muito grande de Spam que são filtrados atoa, gostaria de saber como configurar no rcpthosts os e-mails válidos do dominio <login@dominio.com.br> e não apenas o dominio.

Obrigada!

[17] Comentário enviado por patrickbrandao em 27/04/2006 - 16:45h

Olá Zanja,

apos instalar o qmail e o vpopmail, descompacte novamente os fontes do netqmail, baixe o patch chkuser (google it!), aplique-o aos fontes do qmail, se seu diretorio do vpopmail for diferente de /home/vpopmail, edite o patch e altere o caminho (2 ocorrencias). Recompile o qmail e mude o uid e gid do processo qmail-smtpd para vpopmail e vchkpw respectivamente.

A partir desse momento, o qmail nao aceitará mensagens enviadas para caixas inexistentes (nem mesmo via smtp, a mensagem será rejeitada logo no inicio da conexao e nao entrará na fila)

att,
Patrick

[18] Comentário enviado por zanja em 02/05/2006 - 18:44h

Oie Patrick,

Já tenho este Patch aplicado, pois utilizo um big patch do netqmail.
Essa máquina funcina com um gateway, o usuários não são local nela, no rcphosts adicionamos apenas o dominio completo, e não as contas, existe algum outro lugar pra configurar isto?

Obrigada pela atenção!! ;-)

Zanja

[19] Comentário enviado por zekaos em 27/09/2006 - 17:06h

Ola Patrick,

Estou precisando de uma solução como esta. Segui os passos descritos aqui e fiz alguns testes, porem nao obtive resultados. Eu fiz a instalação em uma maquina com fc5, e Nat dos pacotes para ela ( vindos da Internet e passando pelo firewall ), o servidor de e-mail é um Lotus Notes. Os pacotes instaldos foram as ultimas versões. Sabe o que poderia estar errado?

Obrigado!

[20] Comentário enviado por ubiratamuniz em 05/10/2006 - 09:10h

Prezado Patrick,

Agradeço imensamente pela tremenda boa vontade em fazer esse artigo. Esta solução é exatamente o que eu procurava :-)

Porém, apanhei de alguns detalhes, os quais descobri se tratarem de errinhos de digitação.

Exemplo: no arquivo run do supervise/qmail-smtpd, o primeiro "if" está como "If" (com "I" maiúsculo).

Outro: no /var/qmail/rc, o comando "exec env" está separado do "qmail-start" quando deveria estar na mesma linha. Faltou alguma sinalização ali (acho que é a barra invertida, certo?) para indicar no final da linha que a mesma continua na linha a seguir. Demorei uns dois dias para descobrir esse detalhe... :-)

Só encontrei essas duas falhas, mas que são importantíssimas para a turma que usa "control C e control V" para agilizar as instalações baseadas no seu tutorial. Corrigindo essas duas falhas, tudo funciona 100%.

(já resolvi a dúvida, comi mosca mesmo, desculpe... :-) )

No mais, agradeço novamente e desejo muito sucesso,

Grande abraço,

Ubiratã

[21] Comentário enviado por infortecpfz em 17/07/2007 - 12:00h

Olá Patrick ! como vai ?

E instalei todos os módulos em Perl, e executei o comando

perl Makefile.PL ( E deu tudo certo !!! )

E depois eu to q eu executei o comando make, ele retorna o erro abaixo:

root@mtaserver:/usr/local/spamassassin/Mail-SpamAssassin-3.2.1# make
make: *** No targets specified and no makefile found. Stop.

Poderia me ajudar por favor ? Obrigado !

Fernando H. Santórsula
GNU/Linux Slackware

[22] Comentário enviado por uelitonl em 26/03/2008 - 10:28h

Amigos, apesar de saber que este artigo ainda seja de 2004, e que existem coisas muito mais novas agora, eu resolvi implementá-lo e funcionou perfeitamente bem. Tenho duas dúvidas que agradeceria muito se pudessem me explicar. Para onde os emails considerados SPAM estão sendo enviados? Como analiso tudo o que foi enviado para quarentena? Abraço a todos e obrigado.

[23] Comentário enviado por hthumbo em 24/04/2008 - 04:20h

Oi Brandão,

Na parte final do artigo você disse "Não esqueça de configurar o qmail para abrir relay para sua rede,".
Pretendo saber como configurar o Qmail para abrir relay da minha rede?



A segunda dúvida é a seguinte:

Supondo que a minha rede funciona da seguinte maneira:
- ISP cria MX record
- Na rede local tenho uma firewall (Isa Server) com 2 placas de rede, uma com ip publico e outra com ip privado que constitue o gateway da minha rede interna.
Na firewall está publicado o servidor de email
- Na rede tenho um domain server com o exchange instalado, DNS Server interno, WINS, DHCP

Pretendo saber como implementar o gateway para o cenário que tenho, visto que o meu DNS é interno?

[24] Comentário enviado por lucos66 em 25/08/2008 - 15:10h

olá amigo, tenho uma questao na qual estou quebrando a cabeca a mais de uma semana, será que voce poderia me dar uma sugestao ?
meu cenario é o seguinte : tenho um RHL3 com meu servidor de emails e nele tenho o SPAMC desviando os emails para um outro
servidor RHEL5, no qual esta instalado o spamassassin completo. o que ocorre é que nao sei como configurar o desvio corretamente
como pegar o retorno do spamassassin e checar para ver se naquele email tinha ou nao spam......
na verdade o que eu preciso fazer é o seguinte. primeiro de tudo, fazer uma copia do email em disco, para que se o spamd o perder
nao haja problemas... segundo, desviar este email que chegou para o spamassassin no outro servidor e ao retornar, se for spam
jogar em um folder chamado SPAM, se nao, encaminhar ao usuario...
veja meu procmailrc como está :
SHELL=/bin/bash
LOGABSTRACT=all
MAILDIR=/var/mail
LOGFILE=/dump/maillog
VERBOSE=on
SPAMDIR="/var/mail/SPAM"

#spamassassin inicio
:0fw: spamassassin.lock
| /usr/bin/spamc -d 10.0.1.101

:0:
* ^X-Spam-Level : \*\*\*\*\*\*\*\*\*\*
$SPAMDIR

:0:
* ^X-Spam-Status: Yes
$SPAMDIR

:0:
* ^Subject:.*SPAM
$SPAMDIR

#spamassassin fim


mas isto nao tem funcionado... todo email que mando ele considera como NAO SPAM.....
obrigado..

[25] Comentário enviado por infortecpfz em 17/09/2009 - 14:08h

Parabéns pelo Artigo!

Me esclareça uma dúvida por favor! Eu preciso configurar um grupo de e-mail para meu domínio,
semelhante aos grupos do Yahoo! e Google Grupos, para quando eu enviar um e-mail para
@meudominio.com.br todos que tiveram conta cadastrada neste domínio receba a mesma
mensagem, poderia me auxiliar no mesmo por favor? Muito obrigado :wq



Fernando Santorsula


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts