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: 116.050 ]

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


Instalando Clamav



Clamav é um antivírus gratuito para linux e pode ser baixado do site:
Lá você vai encontrar documentação, a versão atual e ferramentas variadas.

O clamav instala 3 programas principais:
  • clamscan - scanner de vírus;
  • clamd - daemon do clamav, cria um socket ou abre uma porta tcp para servir scanner ao utilitário clamdscan;
  • clamdscan - scanner de vírus que se conecta ao clamd para fazer a busca - muito mais rápido que o clamscan, porém necessita do clamd rodando.

Para instalar o clamav, você deve adicionar o usuário e o grupo clamav antes da instalação, bem como criar a pasta home:

# mkdir /var/clamav
# groupadd clamav
# useradd clamav -g clamav -d /var/clamav -s /bin/false -c 'Clamav - Antivírus free'

# chown clamav.clamav /var/clamav -R


Agora vá até sua pasta de fontes favorita (ex.: /usr/local/src) e digite:

# wget http://unc.dl.sourceforge.net/sourceforge/clamav/clamav-0.75.1.tar.gz
# tar -xvzf clamav-0.75.1.tar.gz
# cd clamav-0.75.1
# ./configure
# make
# make install


O clamav está instalado, porém não irá iniciar sem que seja configurado, edite o arquivo /usr/local/etc/clamav.conf e:
  • comente a linha onde está: Example
  • descomente a linha onde está: ScanMail

Clamav configurado, vamos até /etc/rc.d e criemos o arquivo rc.clamav com o conteúdo:

#!/bin/sh
clamd_start() {
   clamd & 2>/dev/null 1>/dev/null
}
clamd_stop() {
   killall clamd 2>/dev/null 1>/dev/null
   killall clamd 2>/dev/null 1>/dev/null
   rm /tmp/clamd 2>/dev/null
}
clamd_restart() {
   clamd_stop
   clamd_start
}
case "$1" in
'start')
   echo -n "Iniciando Clamav ... "
   clamd_start
   echo OK
   ;;
'stop')
   echo -n "Finalizando Clamav ... "
   clamd_stop
   echo OK
   ;;
'restart')
   echo -n "Reiniciando Clamav ... "
   clamd_restart
   echo OK
   ;;
*)
   echo "Use: $0 start/stop/restart"
esac

Salve, torne executável:

# chmod +x /etc/rc.d/rc.clamav

e adicione na inicialização do sistema:

# echo "/etc/rc.d/rc.clamav restart" >> /etc/rc.d/rc.local

Testando:

# /etc/rc.d/rc.clamav restart

# ps ax | grep clamd
17947	?	S	0:00	clamd


Testando:

# clamdscan /tmp/*

Se você obteve erros, verifique este capítulo desde o inicio para ver se não esqueceu de nada. Caso contrário, atualize o clamav:

# freshclam

Recomendável que você coloque o freshclam para rodar toda manha, por volta das 02:00 para atualizar o antivírus.

IMPORTANTE:
Vamos usar o clamdscan para verificar as mensagens que entrar no qmail-scanner pois ele é mais rápido do que o clamscan uma vez que o clamd já está com tudo carregado na memória. Porém, ao ser invocado pelo qmail-scanner, o clamd tentará ler os arquivos em /var/spool/qmailscan/working em nome do usuário no qual está rodando o clamav, normalmente clamd. Os arquivos não poderão ser lidos, o dono dos arquivos em /var/spool/qmailscan é qscand, que cria os arquivos com permissões 600, o resultado final disso é o qmail-scanner retornando 'qq permanent error', existem duas soluções:
  1. colocar o clamav para rodar como usuário qscand, alterando a linha em clamav.conf de "User clamav" para "User qscand" e reiniciar o clamd.
  2. ou colocá-lo para rodar como root, o que não seria muito seguro.

Bom, instalação do Clamav concluída.

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

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

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

Qmail e chkuser - fila de mensagens limpa

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

Freeradius - servidor radius eficiente e completo

Leitura recomendada

Postfix com autenticação em base LDAP no Slackware

Configurando o Korn

Postfix + AD (Active Directory)

Implantação de um Sistema de Workgroup Open Source

Sylpheed - a GTK+ based, lightweight, and fast e-mail client

  
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