Um pouco de SysAdmin

linux, Telefonia IP, *BSD's, Segurança

Estudo de caso – combatendo spam com qmail + spamdyke

with one comment

Analise de implementação do spamdyke como ferramenta anti-spam em servidores de correio com qmail para reduzir o recebimento de e-mails não solicitados (spam), recursos do servidores de correio e o uso de link Internet em um provedor de acesso;

Motivação:

O texto abaixo foi retirado da Cartilha de Segurança desenvolvida pelo cert.br onde explica quais são os problemas causados pelos spam’s.

Spam
Spam é o termo usado para se referir aos e-mails não solicitados, que geralmente são enviados para um grande número de pessoas. Quando o conteúdo é exclusivamente comercial, este tipo de mensagem também é referenciada como UCE (do inglês Unsolicited Commercial E-mail).

1.1. Quais são os problemas que o spam pode causar para um usuário da Internet?

Não recebimento de e-mails, aumento de custos, perda de produtividade, conteúdo impróprio ou ofensivo, prejuízos financeiros causados por fraude.

1.2. Quais são os problemas que o spam pode causar para os provedores de acesso, backbones e empresas?

Impacto na banda, má utilização dos servidores, inclusão em listas de bloqueio, investimento em pessoal e equipamentos.

Infelizmente o combate ao SPAM não é uma tarefa fácil, exige um bom conhecimento sobre como nossos amigos spammers enviam seus indesejáveis e-mails não solicitados.

O texto abaixo foi retirado do site do projeto antispam.br e explica algumas técnicas utilizadas para envio de SPAM


Os spammers utilizam diversas técnicas que procuram subverter o caminho da mensagem em algum ponto, assim como existem códigos que também enviam mensagens em grandes quantidades. Alguns dos mais importantes mecanismos de envio destes e-mails são:

programas de envio de e-mail em massa, spam zombies, vírus propagados por e-mail, abuso de formulários e scripts na Web, uso de sites comprometidos.

Limitações para combater os spammers no atual contexto do cliente.


Aproximadamente 1500 domínios e 16000 contas
Qualquer alteração para aplicar novas técnicas anti-spam deveriam ser estudadas com cautela para não gerar problemas com falso positivo e  recebimento de e-mails legítimos.
Se as alterações criassem algum problema para recebimento ou envio de e-mail, seriam pelo menos 16000 clientes gerando chamados junto ao suporte técnico.
O downtime dos servidores de correio também foi levado em consideração no momento da escolha das técnicas e ferramentas utilizadas para as técnicas anti-spam’s.

Não alterar a estrutura atual dos servidores de correio
Uma limitação imposta foi que não existia uma alternativa para alterar a estrutura dos servidores de correio.
Os servidores estavam com os serviços distribuídos em dois servidores, balanceando o POP3 nos dois servidores e separando o SMTP/IMAP do MX. Uma boa pratica pois dessa forma é possível aplicar filtros de controles no MX (troca de mensagens entre servidores de e-mail) sem prejudicar o envio de e-mails pelos usuários.
Como dica, caso não exista dois servidores de correio para fazer a distribuição dos serviços, essa configuração pode ser feita adicionando um outro endereço IP como alias no servidor e a partir dai separar os serviços do SMTP e MX.

Estrutura de entrega/recebimento de mensagens dos servidores de correio:



Um boa alternativa seria adicionar um servidor para fazer o filtro (controle dos SPAM) antes dos servidores de correio, uma boa prática que considero uma das melhores alternativas para um controle fácil e centralizado.

Implementação antiga dos servidores de correio
Os servidores de correio estão implementados com o “MTA” qmail e vpopmail para gerenciar os domínios virtuais.
As caixas postais dos usuários são exportadas via NFS e banco de dados (mysql) replicados entre os dois servidores. O antivírus clamav e o qmvc fazem parte também da implementação.
Técnicas e forma de envio de SPAM são alteradas com frequência. Com a instalação antiga dos servidores de e-mail, essa implementação não continha técnicas atuais para o controle de SPAM.

Identificar e-mails legítimos de SPAM.
Não existia na implementação dos servidores de correio uma forma fácil de identificar quais eram as mensagens legitimas e spam’s que estavam sendo sendo aceitas.

As técnicas anti-spam que já eram aplicadas no servidor responsável pelo MX dos domínios

RAV (Verificação do endereço de destino).
Um dos grande problemas na luta contra o spam são as mensagens recebidas para contas de e-mails inexistentes no servidor de e-mail. Essas mensagens recebidas ocupam desnecessariamente recursos do servidor de e-mail, como também acabam lotando a fila de mensagens. Prejudicando/Retardando a entrega de mensagens legitimas, deixando os usuários descontentes. Normalmente quando se detecta que o destinatário não existe a mensagem já passou pelo anti-spam, pelo anti-vírus, pela fila de mensagens (queue). Todo esse processo se torna em vão quando o destinatário não existe, além de tudo, a mensagem acaba na maioria das vezes se tornando um “failure notice”, uma mensagem de falha que será retornada ao remetente. O problema está no fato de que os spammers geralmente não usam remetentes válidos, eles não estão interessados na resposta da mensagem, mas que o usuário leia a propaganda e visite o link enviado.  Isso causa mais desperdício de CPU, a fila ficará cheia de mensagens de falhas que tentarão ser enviadas (mais consumo de consultas ao DNS, Link e tentativas de conexões a servidores não existentes). Uma forma simples de evitar isso é fazer com que o servidor de correio rejeite a mensagem no processo de negociação SMTP (rcpt to:) caso o destinatário não exista, assim a mensagem nem mesmo consumirá banda, CPU, etc.
Obs.: Esse recurso é adicionado ao qmail através do patch chkuser.

Consultas de DNS Reverso.
O DNS Reverso resolve um endereço IP para o nome de servidor.
Essa consulta é usada para verificar a autenticidade do servidor de correio que está tentando entregar uma mensagem. O servidor de correio que está recebendo a mensagem faz uma consulta de DNS para verificar qual é o nome de servidor configurado para o endereço IP do servidor que está  tentando fazer a entrega da mensagem, caso não exista essa configuração (o dns reverso não esteja configurado) a sessão SMTP é encerrada, não permitindo assim a entrega da mensagem.
Infelizmente somente essa técnica não é mais efetiva no combate aos spam’s,
Obs.: Esse recurso estava ativado no qmail através do binário tcpserver provido pelo ucspi-tcp.

Bloqueio de determinadas expressões nas consultas de DNS Reverso em determinados horários.
Como já citado a consulta do reverso resolve um endereço IP para o nome de servidor que está tentando fazer a entrega das mensagens.
Vamos analisar a consulta do reverso do endereço IP 189.59.61.58 que tentou fazer a entrega de uma mensagem no servidor de correio.

luciano@tiamat:~$ host 189.59.61.58
58.61.59.189.in-addr.arpa domain name pointer 189.59.61.58.dynamic.adsl.gvt.net.br.
luciano@tiamat:~$ host 189.59.61.58.dynamic.adsl.gvt.net.br.
189.59.61.58.dynamic.adsl.gvt.net.br has address 189.59.61.58

Esse endereço IP possui configuração de dns reverso, ok, porem observe que é uma configuração genérica que contem a expressão dynamic (são endereços IP’s usados para usuário final).
Um servidor de correio real nunca teria essa configuração de dns reverso, o bloqueio consiste em encerrar a conexão SMTP caso o reverso contenha expressões dynamic, adsl, ppp, etc.
Essas expressões estavam sendo filtradas através de um script desenvolvido para essa finalidade, porem com algumas “regalias”.

Consultas a RBL.
Um resumo quando um servidor de correio tenta fazer a entrega de uma mensagem o seu endereço IP é consultado em listas negras na Internet, que são alimentadas com informações de endereços IP’s de spammers, caso o endereço desse servidor de correio esteja nessa base de dados a sessão SMTP é encerrada não permitindo a entrega da mensagem.
Obs.: Esse recurso estava ativado no qmail através do binário rblsmtpd provido pelo ucspi-tcp.

Ferramentas utilizadas para combater o spam e atingir o objetivos.

spamdyke – http://www.spamdyke.org
Após a analise do contexto todo já citado o SpamDyke foi escolhido para reduzir o recebimento de SPAM’s. O spamdyke é um filtro para monitorar e interceptar conexões SMTP entre o host remoto e o qmail. Ele trabalha junto com o qmail para prover técnicas de controle anti-spam e  adicionar novos recursos, o melhor de tudo que não é necessário aplicar nenhum patch ou recompilar seu “MTA”.
O spamdyke adiciona novas técnicas anti-spam, e as suas filtragens são aplicadas enquanto os servidores de correio remotos (spammers) estão estabelecendo a conexão SMTP, evitando processamento das mensagens posteriormente pelo “MTA/MDA”, reduzindo recursos do servidor de correio e o uso do link Internet.

Além das técnicas anti-spam já em uso no servidor de correio responsável pelo MX, foram ativados (ou repassados) os seguintes filtros para o spamdyke:

Checagem de DNS Reverso

Técnica já comentada, porem o spamdyke está fazendo essas verificações.

Checagem se o DNS Reverso não resolve expressões associadas com endereços dinâmicos

A implementação antiga já tinha uma validação de endereços dinâmicos através de um script, porêm foi repassado ao spamdyke essas verificações. As verificações agora estão sendo realizadas em tempo integral e para qualquer rede/ip.

Checagem se o domínio do “sender” possui uma entrada MX

Quando um servidor de correio tenta fazer a entrega de uma mensagem o spamdyke identifica o endereço de e-mail utilizado para envio dessa mensagem, após a identificação o spamdyke busca uma entrada do tipo MX válida no domínio do e-mail identificado e caso essa entrada não exista a sessão SMTP é encerrada, não permitindo a entrega da mensagem. Não faz sentido aceitar uma mensagem de uma conta de e-mail onde será impossível enviar uma mensagem de resposta.

[root@XXXXXX control]# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 XXXXXX – Welcome [Seja bem vindo] ESMTP
helo smtp.google.com
250 XXXXXX – Welcome [Seja bem vindo]
mail from:<luciano@essedominionaoexisteeusadoporspammer.com.br>
250 Refused. The domain of your sender address has no mail exchanger (MX).
^]

Procurando por entradas do endereço IP em RBL (blacklists na Internet)

Já citada anteriormente como funciona, porem quem está fazendo essas verificações é o spamdyke.

Procurando por entradas do endereço IP em blacklist’s local

Tem o mesmo principio da RBL, porem em uma lista local.

Procurando se o sender não está em blacklist local

O spamdyke verifica o endereço de e-mail que está tentando fazer a entrega da mensagem e checa em uma lista local de endereços usados para envio de spam. O arquivo foi linkado com o blackholesender do próprio qmail, a diferença nesse contexto é que quem trata e encerra as conexões é o proprio spamdyke.

Bloqueando servidores que não estão seguindo RFC (não aguardando o greeting banner ser enviado)

Spammer’s são apressados e não aguardão o recebimento do banner greeting na sessão SMTP.Esse recurso no spamdyke retarda o envio do banner greeting e caso o host remoto não aguarde o banner e tente enviar uma mensagem essa será recusada, pois o host remoto não está seguindo a RFC.  Não temos problemas com bloqueio de e-mails reais pois os servidores de correio reais vão aguardar o envio do banner para iniciar a entrega das mensagens.

[root@XXXXXX control]# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
mail from:<>
220 XXXXXX – Welcome [Seja bem vindo] ESMTP
250 Refused. You are not following the SMTP protocol.
^]

Limitando o numero máximo de recipientes por mensagem

Foi adicionado um limite para 25 “rcpt to” permitidos em cada mensagem.

Firewall (iptables)

Usado para filtrar os “spammer’s” antes mesmo de chegar abrir uma conexão SMTP com o servidor de correio.

Todos os recursos oferecidos pelo spamdyke:

spamdyke’s reverse DNS filters can:

  • Require reverse DNS names.
  • Require reverse DNS names to resolve with IP addresses.
  • Require reverse DNS names to be real, not dynamically assigned.
  • Require the sender’s domain name to have a valid mail exchanger (MX).

spamdyke’s blacklist and whitelist filters can:

  • Search local IP and reverse DNS blacklist/whitelist files.
  • Search DNS realtime blacklists/whitelists (DNS RBLs).
  • Search DNS righthand-side blacklists/whitelists (DNS RHSBLs).
  • Search sender and recipient blacklist/whitelist files.

spamdyke’s graylist(/greylist) filters can:

  • Graylist specific recipient domains (activated per domain).
  • Graylist connections from specific IP addresses or reverse DNS domains.
  • Enforce minimum and maximum ages for graylist entries.
  • Skip graylisting for specific domains, IP addresses or reverse DNS domains.

spamdyke’s other filters can:

  • Stop earlytalkers (remote servers that send data before the SMTP greeting banner is sent).
  • Limit the maximum number of recipients per message.
  • Enforce idle timeouts and absolute timeouts.
  • Prevent unauthorized relaying.

spamdyke has additional features you will love:

  • Readable logging, using syslog, so you can actually monitor your qmail server and save your log files.
  • Full SMTP AUTH support, so your users can bypass all filters, even from remote locations. spamdyke can provide SMTP AUTH even if qmail is completely unpatched.
  • Full TLS support, so your users can send mail securely. spamdyke can provide TLS even if qmail is completely unpatched.
  • Log all SMTP traffic to files so you can diagnose connection problems.
  • Support available through an active mailing list.

Ferramentas para gerar estatísticas

Foi desenvolvido um script para coletar estatísticas (utilizando bash script) e junto com rrdtools gerar gráficos com a finalidade de  acompanhar a efetividade dos bloqueios configurados pelo spamdyke.
Também foi criado um script para criar um rank dos servidores de correios que não estão sendo bloqueados pelas técnicas anti-spam do spamdyke.

Resultado

Segue as informações de estatísticas de dois dias dos bloqueio e carga atual do servidor após a implementação do spamdyke

[root@XXXXXX etc]# /root/spamdyke-stats.sh
Looking for Logs in /var/log/qmail/qmail-smtpd begin in May 13 03:54

Messages Reject by DENIED_IP_IN_RDNS: 66826
Messages Reject by DENIED_OTHER: 30244
Messages Reject by DENIED_RBL_MATCH: 43502
Messages Reject by DENIED_RDNS_MISSING: 105425
Messages Reject by DENIED_RDNS_RESOLVE: 58230
Messages Reject by DENIED_RECIPIENT_BLACKLISTED: 543
Messages Reject by DENIED_SENDER_NO_MX: 15286
————————————————-
Total Denied by SpamDyke:
320056

Messages Filtered by FILTER_EARLYTALKER: 10927
Messages Filtered by FILTER_IP_IN_RDNS_BLACKLIST: 30263
Messages Filtered by FILTER_OTHER: 30244
Messages Filtered by FILTER_RBL_MATCH: 26668
Messages Filtered by FILTER_RDNS_MISSING: 81399
Messages Filtered by FILTER_RDNS_RESOLVE: 50153
Messages Filtered by FILTER_RECIPIENT_BLACKLIST: 543
Messages Filtered by FILTER_SENDER_NO_MX: 14976
————————————————-

Total Filtered by SpamDyke: 245173


Messages Allowed by SpamDyke: 109046

death to spammers =)
[root@XXXXXX etc]#

[root@XXXXXX etc]# uptime
8:40pm  up 25 days, 19:53, 13 users,  load average: 0.75, 0.91, 0.74
[root@XXXXXX etc]#

Uma das redes usadas por spammers identificada e bloqueada no Firewall.

Obs: 443M de conexões SMTP barradas no Firewall

[root@YYYYY /root]# iptables -t mangle -L -nv|grep 64.234.123.0

12531 1110K DROP       all  —  *      *       0.0.0.0/0            64.234.123.0/24
7391K  443M DROP       all  —  *      *       64.234.123.0/24      0.0.0.0/0

Conclusão

Existe outras técnicas que não foram citadas nesse artigo, que podem reduzir ainda mais o recebimento de mensagens não solicitadas.

Porem espero que esse estudo de caso seja util para pessoas que estão enfrentando o mesmo problema e que tenha como base os resultados dos bloqueios apresentados com o uso do spamdyke como um motivador para a implementação do mesmo como filtro anti-spam junto com o qmail

Anúncios

Written by lucianoborguetti

maio 15, 2010 às 8:36 pm

Publicado em Linux, qmail

Uma resposta

Subscribe to comments with RSS.

  1. Muito Bom Luciano, estou iniciando no uso do Spamdyke é o problema inicial que estou tendo é que ele esta classificando como SPAM mensagens normal vindas do gmail e hotmail.

    estranho né? vou estudar esses seus casos acim para ver se resolvo, pois coloquei os dominios gmail e hotmail na writelist e não resolveu.

    Bernardo Castro

    junho 10, 2010 at 11:35 am


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: