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.
Configuração do qmail para roteamento de mensagens e DNS
Bom, se você chegou até aqui é porque tudo está certo, o qmail que instalamos até agora não nos serve ainda. Ele pode ser usado como SMTP de clientes de e-mail, mas não está apto a responder pelas mensagens de nenhum domínio.
Se você apontar o MX do DNS para ele, a mensagem não será entregue. O qmail só aceitará receber mensagens de domínios que estejam na lista rcpthosts (/var/qmail/control/rcpthosts), o seguinte erro será retornado para o servidor que tentar passar a mensagem:
553 sorry, that domain isn't in my list of allowed rcpthosts
Esta mensagem pode ser personalizada se você editar o arquivo qmail-smtpd.c nos fontes do qmail antes de executar "make" e "make setup check" e procurar por rcpthosts. Pode ser:
553 erro, este domínio não está na minha lista de domínios permitidos (rcpthosts) ou seu ip não está na minha lista de relay (tcp.smtp)
Se é assim, adicione o arquivo empresa.esa.br em /var/qmail/control/rcpthosts:
Agora sim ele vai receber mensagens de empresa.esa.br, porém não vai repassa-las para o servidor oficial. O qmail pode ser programado para fazer roteamento de mensagens smtp pelo arquivo /var/qmail/control/smtproutes (não existe por padrão), neste arquivo, cada linha é um registro, e cada registro tem o formato:
nomedodominio:servidordeemail
ou
:servidordeemail
Assim, se colocarmos:
:mail.empresa.esa.br
Toda mensagem que entrar no nosso gateway de e-mail, vai para o queue, e do queue para o host mail.empresa.esa.br, outra opção seria:
empresa.esa.br:mail.empresa.esa.br
Neste caso, tem o mesmo efeito do registro anterior, mas só se aplica ao domínio empresa.esa.br, se a empresa tiver uma filial com um servidor de e-mail diferente, poderia ser:
Com esta técnica, você pode vender serviço de scanner de e-mail para outras empresas, bastando que elas apontem o MX para seu gateway, e você aponte seu gateway para o servidor oficial do cliente por meio de smtproutes.
Observação: O arquivo smtproutes não terá efeito se o domínio registrado nele também estiver no arquivo /var/qmail/control/locals, portanto, retire o domínio roteado de locals ou execute:
# rm /var/qmail/control/locals
Considere neste artigo, a seguinte configuração DNS:
// named.conf
// ---------------------------------
zone "empresa.esa.br" IN {
type master;
file "/var/named/empresa.esa.br";
allow-update { none; };
}
empresa.esa.br (/var/named/empresa.esa.br):
$TTL 1H
@ IN SOA ns1.empresa.esa.br. webmaster.empresa.esa.br. (
2004090801 ; serial
3h ; refresh
1h ; retry
1w ; expiry
1h ) ; minimum
IN NS ns1.empresa.esa.br.
IN NS ns2.empresa.esa.br.
IN MX 10 mail.empresa.esa.br.
ns1 IN A 192.168.10.2
ns2 IN A 192.168.10.4
mail IN A 192.168.10.2
www IN A 192.168.10.4
Bom, vamos adicionar um novo servidor com ip 192.168.10.6 com nome mailgateway e coloca-lo com mais prioridade que o servidor de e-mail atual (mail.empresa.esa.br). O arquivo de dns fica assim:
$TTL 1H
@ IN SOA ns1.empresa.esa.br. webmaster.empresa.esa.br. (
2004090801 ; serial
3h ; refresh
1h ; retry
1w ; expiry
1h ) ; minimum
IN NS ns1.empresa.esa.br.
IN NS ns2.empresa.esa.br.
IN MX 10 mailgateway.empresa.esa.br.
IN MX 20 mail.empresa.esa.br.
ns1 IN A 192.168.10.2
ns2 IN A 192.168.10.4
mail IN A 192.168.10.2
www IN A 192.168.10.4
mailgateway IN A 192.168.10.6
O registro:
IN MX 20 mail.empresa.esa.br.
pode ser excluído, mas por segurança, deixe-o, se o mailgateway cair, as mensagens não serão encaminhadas para o servidor, mas não serão filtradas.
Reinicie os servidores dns, começando pelo master (ns1).
O gateway está pronto, ele apenas roteia as mensagens, mas nos próximos capítulos vamos implementar os filtros antivírus e antispam.
[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?
[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 é:
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,
[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.
# 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:
[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??
[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: $"
[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 ?
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.
[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?
[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.
[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.
[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)
[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?
[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?
[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,
[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"
[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