Protegendo ainda mais o seu Postfix contra Spam!

Analizando os arquivos de logs que recebo via email, notei que o mesmo email insistentemente envia mensagens para diversos usuários do meu sistema, sejam os destinatários válidos e ou inválidos… diante disso me partiu a seguinte idéia: bloquear automaticamente quem envia emails para usuários que não existem no meu sistema!! Afinal, se estão chutando para qualquer lado… o goleiro aqui é profissional e cata todas! 💡

Desenvolvi então o seguinte script que adiciona os emails recusados em uma lista negra e informa detalhadamente as origens do email, facilitando reconhecer algum falso-positivo que venha a cair na malha. 😀

Para funcionar é preciso adicionar a verificação do arquivo access_blacklist dentro da seção de verificações dos remetentes no main.cf do Postfix:

smtpd_sender_restrictions =
  check_sender_access hash:/etc/postfix/access_blacklist

O seguinte script atualiza o arquivo access_blacklist e recomendo que seja programado para execução diária:

#!/bin/bash
export LANG="en_US"
access_blacklist="/etc/postfix/access_blacklist"
#  whitelist: coloque aqui os domínios do seu servidor de email,
#             para evitar que os emails dos seus clientes sejam bloqueados!
whitelist="nunes.net.br 12345678910.yi.org dominios.com.br"
maillog=/var/log/old/maillog-`date +%Y%m%d`
grep "User unknown in local recipient table" $maillog | awk '{ print $23 }' | \
      grep @ | sort -u | sed s/\<//g | sed s/\>//g | awk -F= '{ print $2 }' | \
      sed 's/$/\tREJECT Access denied/' > .spammer_list
for wl in $whitelist
do
  grep -v $wl .spammer_list > .spammer_list.tmp
  mv .spammer_list.tmp .spammer_list
done
if [ -s .spammer_list ]
then
  echo Relatório de emails bloqueados em `date '+%d %B %Y'` na \
       access_blacklist > .relatorio.txt
  echo -e '\n\n' >> .relatorio.txt
  for mail in `awk '{ print $1 }' .spammer_list`
  do
    echo "Email bloqueado: $mail; com o histórico:" >> .relatorio.txt
    echo -e '\n' >> .relatorio.txt
    grep "from=<$mail>" $maillog >> .relatorio.txt
    echo -e '\n\n' >> .relatorio.txt
  done
  cat .relatorio.txt | \
       mail -s "[Postfix] Atualização access_blacklist `date '+%d/%b'`" root
  rm .relatorio.txt
  cat $access_blacklist >> .spammer_list
  sort -u .spammer_list > $access_blacklist
  postmap $access_blacklist
  postfix reload 2> /dev/null
fi
rm .spammer_list

Lembre-se de configurar corretamente as seguintes opções:

access_blacklist com o caminho correto para o arquivo definido no main.cf do Postfix.

whitelist com os seus próprios domínios de email, para prevenir um falso-positivo por parte de seus remetentes.

maillog é o arquivo do último maillog do postfix que será analisado. Como eu rotaciono os logs essa configuração funciona bem para pegar o arquivo completo de ontem que foi rotacionado hoje.

De tempos em tempos, eu verifico o access_blacklist, efetuando uma limpeza transferindo os domínios mais freqüentes dos emails bloqueados para uma lista definitiva. Bloqueando finalmente os spammers diretamente pelos seus domínios… mailsender.com.br, *.locaweb.com.br, paranageral.com, etc… 😀

Outra idéia é utilizar um honeypot, publicando um email inválido do seu sistema (mas que aponte para o seu servidor) na internet… como por exemplo honeypot@honeypot.yi.org com o seu domínio ou outro que pode ser criado em algum site de domínios dinâmicos (como a dyndns.org ou yi.org ou afraid.org) e sugerir que ele seja inserido em uma lista comercial de spam… assim mais remetentes spammers serão bloqueados automaticamente pelo seu sistema com esse script, preservando assim todas as outras caixas postais! 💡 E conjuntamente com o bloqueio de IPs no firewall você preserva o seu servidor do bombardeio de spams 😀

Leia mais artigos relacionados ao Postfix.

2 ideias sobre “Protegendo ainda mais o seu Postfix contra Spam!

  1. Olá Eduardo! Não sei se lembra de mim mas eu já postei aqui no seu blog e tive sucesso na implatação de uma conf do postfix e eu estava querendo que você me respondesse uma coisa. Tenho um servidor postfix com courier, mysql, clamav, spamassassin, quota com 4 domínios virtuais e várias contas de e-mail num CentOS 5.5 64 bits. Eu queria saber se tem como pelo postfix ou outro programa criar um filtro que pegasse todos os e-mails que contenham anexo XML ( arquivo de nota fiscal eletronica ) ou somente os anexos que sejam XML e mandar pra algum e-mail ou melhor ainda, pra uma máquina específica da minha rede via compatilhamento pra alguma pasta ? Já vasculhei a internet toda e não achei nada! Estou precisando muito disso… Se puder meu ajudar blz, se não sem problemas também! Abraços cara…

    • Olá bento! Lembro sim e fico feliz que esteja tendo sucesso com seu Postfix no CentOS!

      A implementação da verificação do anexo XML e redirecionamento da mensagem é “simples”, podendo ser realizada através de um simples filtro de conteúdo do postfix.

      Como por exemplo meu filtro “beta” http://blog.eduardo.nunes.net.br/1356/linux/mail_filter-content-filter-postfix (inicialmente ele separava os anexos do email para passar o antivirus em cada anexo separadamente, quando os antivirus não suportavam o formato da mensagem de emails) se você reparar no código do script em um determinado momento ele separa os anexos em arquivos avulsos.. e por volta desse código pode-se adicionar uma verificação simples: se o nome do arquivo possuir “.XML” tomamos a decisão desejada como por exemplo as sugeridas por você de encaminhar o email para uma conta específica ou salvar em uma pasta da máquina (com as permissões de escrita do postfix) ou até enviar o arquivo para um compartilhamento em um servidor de rede (essa medida já deve ser mais cautelosa para não perder a mensagem caso não consiga salvar no compartilhamento por erro do servidor/rede, podendo-se salvar então em uma máquina local e gerar uma sincronia ou script que de hora em hora assegura que o arquivo seja devidamente copiado no compartilhamento… etc..).

      Tecnicamente e a grosso modo pode ser feito de uma maneira muito simples, com um egrep incondicional no email verificando se ele possui o texto “filename=.*\.xml” e assim tomando a medida necessária: reinjetar no postfix com outro destinatário ou utilizar o código de separação de anexo para copiar o arquivo .xml e então entregar ou descartar o email!

      Sabe que me deste uma idéia bem legal, pois também recebo essas notas e algumas empresas enviam em xml ao invés do formato convencional e bem que eu gostaria de convertê-las automaticamente já no servidor de email para um formato mais agradável de ler 🙂

      Abraços e Sucesso!!

Escreva seu comentário: