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.957 ]

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


Introdução



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

Aviso


Este tutorial pode ser distribuído, impresso e copiado de todas as formas possíveis desde que se mantenha o nome, a página web e o e-mail do autor no cabeçalho em local visível, abaixo do título e com a letra maior ou igual a usada no texto.




Nos dias em que vivemos, o uso de correio eletrônico é indispensável para qualquer negocio: Informática, contabilidade, construção civil entre outros (inclusive criação de galinha).

Com a crescente distribuição de vírus e SPAM (algo em torno de 65% de todo trafego SMTP da web) o uso de correio eletrônico está se tornando uma dor de cabeça para muitas empresas e usuários. Imagina quanto uma empresa perde por ano, considerando que ela tem quinhentos funcionários perdendo quinze minutos diários do tempo no expediente limpando a caixa dos e-mails indesejáveis. E se o PC for infectado? Quando tempo aquele funcionário vai ficar parado esperando o pessoal do suporte consertar?

Como somos "o pessoal do suporte", temos que achar uma solução, neste artigo, ela se chama "Gateway de e-mail com qmail".

A solução consiste em um servidor de e-mail que ficará na linha de frente para receber todas as mensagens, filtrá-las, garantindo a eliminação do vírus e do SPAM e repassá-las para o servidor de e-mail oficial, que pode ser qualquer um, Postfix, Exchange, exim, próprio qmail, etc.

Esta solução foi testada, provada e aprovada em ambiente de laboratório e de produção. Cada acontecimento observado por mim foi escrito aqui. Se algo passou invisível aos meus olhos, por favor, me reporte pela perfeição dessa solução.

Boa leitura!

    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

Qmail e chkuser - fila de mensagens limpa

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

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

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

Leitura recomendada

RoundCubeMail - Praticidade e bom gosto

Postfix fazendo relay SMTP do Gmail/Google Apps

Postfix + AD (Active Directory)

SlackwareBOX MTA

QMAIL, um poderoso MTA (FreeBSD)

  
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