terça-feira, 24 de março de 2009

SPAMDYKE - UM ALIADO CONTRA O SPAM NO QMAIL

ATENÇÃO!!! Existem algumas particularidades com relação a pasta de localização do vpopmail, em meu caso não é /home/vpopmail, mas sim: /var/qmail/vpopmail (depende da versão do qmail instalada em seu servidor)

Outra observação importante, a localização do (run) do qmail (é um arquivo que é executado durante uma conexão com o q-mail), em meu caso, fica localizado em:
/var/qmail/related/etc/qmail-smtpd/

-------------------------------------------- * * * * ----------------------------------------

Um dos maiores problemas atuais da informática é o famigerado Spam. Todo SysAdmin acorda sempre tendo que ler logs, vasculhar ips, criar blacklists, scripts, procurar boas soluções etc etc. Em resumo, boa parte do tempo de nossa vida profissional estaremos lutando contra os malucos que teimam em encher a caixa postal das pessoas de lixo.
O Spam é sem dúvida um negócio. O que eu mais vejo por aí são as famosas empresas de Email Marketing proliferando. No fim, o Email Marketing nada mais é que uma forma mais bonita de falar, Spam.
E, enquanto tem gente ganhando dinheiro mandando mensagem para você, seus gerentes estão ali lhe cobrando a velocidade de acesso em um link abarrotado de mensagens não "solicitadas". Ou seja, enquanto alguns ganham dinheiro, outros perdem dinheiro por causa disto.

Várias empresas hoje ganham a vida em cima do Spam. A IronPort, que hoje é parte da Cisco, tem um dos melhores appliances do mercado para isto. Do lado brasileiro, temos a mineira Mais Informática, com seu produto MAV, que não deixa a desejar em nada a seus grandes concorrentes. E, também, a maioria das empresas de anti-vírus possui produtos nesta área.

Eu, sempre, sou adepto de soluções livres. E, como em geral, os servidores de email são baseados ou no Postfix ou no Qmail, descobrir soluções para estes produtos, é um dos meus esportes preferidos.

Pessoalmente, apesar das intensas opiniões contrárias de outros analistas eu adoro implementar soluções com o Qmail. E, o post em questão fala sobre uma ferramenta que é o Spamdyke é um tipo de canivete suiço para o Qmail.

O grande trunfo do SpamDyke em cima de outras soluções baseadas no Qmail, é não pedir com a maioria das features do produto, que você aplique um patch nos fontes e o recompile.

Na realidade, o SpamDyke é um programa ( módulo ) que se adiciona ao Qmail e faz a coisa funcionar de um jeito melhor do que ele já faz ( e como faz, viu ).

A vantagem do SpamDyke é o corte da conexão já lá no início do processamento. Ou seja, meu servidor está tentando mandar um spam para o servidor que tem o SpamDyke instalado. Caso a minha mensagem ( ou servidor ) seja caracterizado como fonte de spam, eu terei minha conexão cortada ali.
Isto elimina custo de processamento ( pois a mensagem não vai se processada pelo servidor ) e banda ( ou seja, não vai haver a transferência da mensagem para o servidor ). Este custo, ao longo dos dias em que se instala o SpamDyke é sentido no acesso remoto a máquina e na banda que fica disponível para outros serviços.

O processo de instalação do SpamDyke é bem fácil. Na realidade, ele está muito bem documentado no site do projeto, mas uma documentação em português não faz mal a ninguém né ?

Baixe o pacote do SpamDyke no site do projeto e faça o processo padrão :

# wget -c http://sitedospamdyke/download/spamdyke-x.y.z.tgz
# tar -xvzf spamdyke-x.y.z.tgz
# cd spamdyke-x.y.z
# ./configure
# make
# cp spamdyke /usr/local/bin

Ou seja, com este processo, seu spamdyke já está prontinho para funcionar em qualquer servidor que esteja com o Qmail já em operação.
No meu caso, eu uso o QmailToaster, que integra com a maioria das distribuições espalhadas pelo mundo ( se bem que eu já usei a maioria das variações das implementações de Qmail disponíveis por aí :) ).

Em geral, você vai procurar o arquivo run do smtpd, e nele você vai usar a seguinte sintaxe :

exec /usr/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/usr/local/bin/spamdyke -f /etc/spamdyke.conf \
/var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true \
2>&1

Ou seja, seu arquivo de run do smtpd vai ter uma linha como a que está em negrito no trecho que eu peguei do run. Ou seja, aqui você vai estar chamando o SpamDyke antes de ativar o qmail-smtpd ( por um acaso o daemon de smtp do Qmail :-) ) .

Assim, entende-se por este processo o porque tudo é parado antes de gerar um processamento maior na máquina.

O arquivo de configuração, exemplificado abaixo, é o citado inclusive, no site oficial do SpamDyke pelo autor do programa :

log-level=2
local-domains-file=/var/qmail/control/rcpthosts
max-recipients=5
idle-timeout-secs=60
graylist-dir=/home/vpopmail/graylist
graylist-min-secs=300
graylist-max-secs=1814400
policy-url=http://my.policy.explanation.url/
sender-blacklist-file=/home/vpopmail/blacklist_senders
recipient-blacklist-file=/home/vpopmail/blacklist_recipients
ip-in-rdns-keyword-file=/home/vpopmail/blacklist_keywords
ip-blacklist-file=/home/vpopmail/blacklist_ip
rdns-blacklist-dir=/home/vpopmail/blacklist_rdns.d
reject-empty-rdns
reject-unresolvable-rdns
reject-ip-in-cc-rdns
rdns-whitelist-file=/home/vpopmail/whitelist_rdns
ip-whitelist-file=/home/vpopmail/whitelist_ip
greeting-delay-secs=5
check-dnsrbl=zombie.dnsbl.sorbs.net
check-dnsrbl=dul.dnsbl.sorbs.net
check-dnsrbl=bogons.cymru.com
reject-missing-sender-mx
tls-certificate-file=/var/qmail/control/servercert.pem

Quem conhece bem servidores de email vai bater o olho na maioria destas linhas e entender de cara. Os detalhes de cada opção acima eu vou colocar abaixo. O post vai ficar um pouco extenso por causa disto, mas acho que o interessado no mesmo não vai se preocupar com isto.
Em breve vou soltar uma documentação do tipo Hardening Qmail, com estas opções, até para a pessoa não ter que ficar procurando um monte de coisa solta aqui no site.

Bom, as duas primeiras linhas se auto-explicam, uma é o nível de debug e a outra, o seu arquivo de domínios válidos do Qmail.


max-recipients=5

Esta é uma opção que eu gosto muito. Sabe aqueles famosos emails que um recebe do outro com aqueles pps otimistas e sai mandando para todo mundo ? Este é o modo mais fácil de forçar o seu usuário a desistir de mandar a mensagem, pois quando ele exceder o número máximo ( 5 destinatários por mensagem ), o servidor vai recusar a saída/entrada de mensagens deste tipo.

idle-timeout-secs=60

Timeout da conexão. Ou seja, se em 60 segundos nada responde, diga adeus, não preciso de mandar este troço ou receber este troço.

graylist-dir=/home/vpopmail/graylist
graylist-min-secs=300
graylist-max-secs=1814400

Opções relacionadas ao Greylisting.
O conceito de Greylisting é uma idéia interessante, desenvolvida por Evan Harris e consiste em recusar temporariamente uma mensagem e esperar por sua retransmissão. Esta técnica parte da premissao de que emails válidos são enviados a partir de MTAs
(Mail Transfer Agents) legítimos, que mantém filas e possuem políticas de
retransmissão em caso de erros temporários e geralmente spammers e códigos
maliciosos raramente usam MTAs legítimos.
Apesar de hoje spammers se utilizarem de MTAs legítimos, esta técnica também se mostra interessante para barrar vírus e trojans, que usam estruturas de smtp embutidas no mesmo, que não utilizam-se do tratamento que um MTA faz com as mensagens.

policy-url=http://my.policy.explanation.url/

Aqui você vai colocar um endereço onde você explicará as políticas de anti-spam que você utiliza, e como o usuário ( ou seja, quem quer lhe mandar mensagens ) deve proceder caso tenha algum problema de envio ao seu servidor.

sender-blacklist-file=/home/vpopmail/blacklist_senders

Endereços ou parte de domínios que não serão aceitos pelo seu servidor. Sintaxes aceitadas : email@domini.com.br, @dominio.com.br.

recipient-blacklist-file=/home/vpopmail/blacklist_recipients

Caminho contrário. Lista de domínios para onde o seu servidor não vai enviar mensagens ( ou seja, seus usuários não poderão mandar mensagens para este local ). Mesma estrutura de sintaxe aceita pela outra listagem.

ip-in-rdns-keyword-file=/home/vpopmail/blacklist_keywords

Lista de palavras não aceitas quando for feita a resolução reversa do DNS. Exemplo : recebo um email do dominio sexo.com.br e tenho esta palavra "negada" na minha blacklist de palavras do dns reverso.
Quando ele for resolvido pelo SpamDyke, esta mensagem será considerada inválida por possuir uma palavra que está nesta blacklist.
Uma blacklist interessante, principalmente, porque spammers vão usar alguns domínios específicos para suas ações.


ip-blacklist-file=/home/vpopmail/blacklist_ip

Ips de servidor aos quais você não quer realmente receber mensagens. Aqui, é interessante usar uma dica que já dei, que é bloquear os ips advindos por exemplo, da China e da Koreia, que são dois países sabidamente gerados de grande volume de spam.

rdns-blacklist-dir=/home/vpopmail/blacklist_rdns.d

Este aqui é um ponto interessante. É um diretório onde estarão "diretórios" com os nomes dos domínios que serão bloqueados durante consultas. Ou seja, todo domínio que estiver neste diretório será consultado e caso bata com algum, será dropado logo já na conexão.
Não vou conseguir ser tão claro quanto ao funcionamento, porque eu ainda não achei uma boa lógica para trabalhar com isto. No fundo, quando achar, devo gerar algum script para criação dos diretórios e afins :-)
Para quem quiser saber mais sobre isto, clique neste link aqui e dê uma estudada.



reject-empty-rdns
reject-unresolvable-rdns

Aqui, o básico. Não tem DNS reverso ou não conseguiu se resolver o DNS reverso do cara, a mensagem é negada.

reject-ip-in-cc-rdns

Procura pelo ip do servidor remoto ( DNS reverso ) e também pelas duas letras que levam ao código do país. Caso ambos sejam encontrados, diga adeus, a conexão é rejeitada ( toda a busca é feita no nome do domínio em questão ).

rdns-whitelist-file=/home/vpopmail/whitelist_rdns

Mesmo que hajam erros no DNS reverso, caso ele esteja nesta listagem, vai ser aceito qualquer conexão dos ips em questão. Um ip por linha.

ip-whitelist-file=/home/vpopmail/whitelist_ip

Mesmo esquema, só que relacionado a ips que estejam em alguma rbl ou coisa parecida.

greeting-delay-secs=5

Tempo aceito de demora para que o servidor receba o famoso Hello, primeiro passo de uma conexão smtp.


check-dnsrbl=zombie.dnsbl.sorbs.net
check-dnsrbl=dul.dnsbl.sorbs.net
check-dnsrbl=bogons.cymru.com

RBLS que serão utilizadas pelo Spamdyke. Uso estas e mais algumas que o pessoal indica por aí :-)

reject-missing-sender-mx

Se o domínio não tiver um MX válido, logicamente, não vai ser aceito conexão do mesmo. Por incrível que pareça, isto ainda acontece com diversos domínios que estão configurados por aí.
Erros de DNS são muito comuns ainda.

tls-certificate-file=/var/qmail/control/servercert.pem

Caso esteja usando uma conexão segura, use o mesmo certificado já criado na hora de configurar o seu Qmail.

O post foi um pouco longo, mas foi mesmo para apresentar esta ferramenta que é o SpamDyke. Com a instalação do mesmo, nesta configuração pura, já cheguei a ter por volta de 90% de negação de spams ( de cara ) e isto me deixou um pouco animado com o mesmo.
Com esta ferramenta dominada, duvido que a porcentagem não suba.

Ainda não há um script oficial para estatísticas, mas na lista do SpamDyke eu consegui um script muito legal ( na realidade, precisei editar ele diversas vezes ) e ele conseguiu me mostrar o seguinte resultado :

[root@neo ~]# cat /var/log/maillog | spamdyke-stats
7804 DENIED_IP_IN_CC_RDNS
6803 DENIED_RDNS_MISSING
4362 DENIED_RBL_MATCH
2394 ALLOWED
1532 DENIED_RDNS_RESOLVE
553 DENIED_OTHER
418 DENIED_BLACKLIST_IP
376 TIMEOUT
29 DENIED_TOO_MANY_RECIPIENTS
22 DENIED_SENDER_NO_MX

Allowed: 2394
Denied : 21899
Sum: 24293
% Spam : 90.15%

Ou seja, não é o ideal, porque o bom é ter um controle geral dos logs, mas já ajuda para ver como está o rendimento do spamdyke. Para quem quiser baixar, deixei o código pronto por aqui ;-)
Espero que o post ajude a quem está tentando implementar o SpamDyke em seus servidores. E, vamos trocar idéias sobre o mesmo porque quanto mais experiências sobre ele

-------------------------------------------- * * * * ----------------------------------------

Este documento foi estraido do site: http://www.ataliba.eti.br/node/1603

Site Oficial do SpamDyke: http://www.spamdyke.org/

-------------------------------------------- * * * * ----------------------------------------

Um comentário:

Anônimo disse...

Uso o spamdyke com configurações "básicas de fábrica".
Estava pensando em usar o recurso de greylisting dele, o problema é que eu tenho 3 servidores MX e a base de dados greylist iria ficar descentralizada, existe alguma solução para centralizar isso, talvez usando mysql?

Como obter sua chave do produto do Windows (10 ou 11) com o prompt de comando

  Se quiser obter sua chave do produto do Windows, a maneira mais fácil é fazer isso com o prompt de comando do Windows. Primeiro, pressione...