LinuxMan
 
Submitted by Eri on Wed, 2005-09-14 22:52.


Diversos tipos de filtros para o MTA PostFix








Introdução


O Postfix é um excelente MTA. com uma ampla base instalada e com fácil instalação e manutenção.
Dentre suas características, podemos destacar a alta modularidade, capacidade de interagir com diversas bases de dados, como mysql e ldap e o uso nativo de regular expressions, sendo que iremos explorar mais a fudo essa última funcionalidade.



Sobre o autor

Eri Ramos Bastos trabalha com Linux desde 1998, passando por diversas
distribuições e fases diferentes do pinguim. Atualmente trabalha como
consultor em soluções Linux / Unix e está disponível para ajudar a
sua empresa a implantar Linux em todos os setores.
Consultoria



Pré-requisitos


Não é objetivo desse mini-tutorial ensinar como instalar e configurar o Postfix, como também não é introduzir o leitor ao uso de expressões regulares.
Chamaremos, a partir de agora, as regular expressions (expressões regulares), apenas de regex.


Você deve ter o módulo pcre do Postfix instalado. Também deve saber usar os comandos básicos como "postmap filename" ou "postfix reload".



Filtros


Como filtros podemos definir qualquer regra ou política que restrinja de alguma forma quais e-mails iremos receber ou descartar.
O uso de filtros pode ser de extrema valia no combate a spams e outros tipos de mensagens indesejadas, como iremos analisar um pouco a diante.


Bloqueando Vírus


Vírus são o tipo mais comum de mensagem indesejada. Felizmente eles têm uma característica de fácil identificação em sua grande maioria: arquivos anexos.
Para identificar e bloquear arquivos que podem ser perigosos, incluiremos a seguinte linha no main.cf:

  mime_header_checks = regexp:/etc/postfix/mime_checks


E criamos o arquivo /etc/postfix/mime_checks com o conteúdo:


ATENÇÃO: Como as linhas são muitos grandes, coloquei uma quebra de linha no formato shell ( \ ).
Linhas do tipo:

  abc \ 
  d


Devem ser coladas no seu arquivo de configuração como:

  abcd

  # This filter works on MIME headers in postfix.
  # It deletes (discards) all mails with attachments that are executable, or known
  # to contain virus. Especially it deletes all mails with a .zip attachment.
  # Use it by installing it in a file /etc/postfix/mime_header_checks.regexp
  # and add a line in /etc/postfix/main.cf (without the beginning '#'):
  # mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp
  # And then restart postfix with 'service postfix restart'
  #
  # Keld Simonsen keld@dkuug.dk 2004-01-31
  # Pequenas modificações por Eri Ramos Bastos - www.linuxman.pro.br/postfix
  #
  /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(lnk|asd|hlp|ocx|reg|bat|c(pl|hm|om|md) \
  |exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|xl))"?\s*$/ \
  DISCARD Attachment type not allowed - possible virus. File "$2" has the unacceped extension "$3"
  /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(zip))"?\s*$/ \
  REJECT Attachment type not allowed - possible virus. File "


Atenção: A segunda regra bloqueia arquivos .ZIP, devido a vários vírus que utilizam essa extensão recentemente. Se você precisa receber esse tipo de arquivo, não utilize a última linha.



Bloqueando aviso de vírus

Não sei o que alguns administradores de sistemas tem na cabeça para deixar habilitada aquela opção de "Enviar aviso ao remetente" em caso de vírus encontrado. Hoje em dia quase 100% dos vírus forjam o e-mail de origem, de forma que não faz o MENOR sentido utilizar esse tipo de recurso. E pior: ainda cria um segundo flood. Imagine isso: para cada e-mail com vírus recebido o servidor envia um aviso. O dobro de banda e recursos está sendo usado.
Além disso, ainda temos que atender ligações de usuários desesperados falando que estão com vírus.
A minha idéia é tentar resolver esse problema bloqueando as mensagens geradas pelos anti-vírus:


Inserir a seguinte linha no main.cf:

  header_checks = regexp:/etc/postfix/header_checks


E criar o arquivo /etc/postfix/header_checks com o conteúdo:

  #Bloqueio de mensagens falsas de virus
  # Eri Ramos Bastos - www.linuxman.pro.br/postfix
  #
  /([Vv].rus(es)?|V.RUS).*(ALERT|alert|S(EU|UA)|YOUR|en(viado|contrado)|found|detect(ado|ed)|blo(cked|queado) \
  |[Rr]emetente|sent)/ REJECT Bogus anti-virus alert - please config your mail server properly
  /[Rr]eturn(ado|ed) d(evido|ue) (a|to) [Vv].rus/ REJECT Bogus anti-virus alert - please config your mail server properly
  /[dD]etect[ea]do? [Vv].rus(es)?/ REJECT Bogus anti-virus alert - please config your mail server properly



Usando RBLs

Real-Time Blackhole Lists (Listas para bloqueio em tempo real) são úteis, mas devem ser utilizadas com cuidado. Diversas listas podem ser encontradas pela internet, mas é preciso verificar a seriedade de cada uma delas.
No exemplo a seguir iremos utilizar o SpamCop e a Ordb.


Inserir as seguintes linhas no main.cf:

  smtpd_recipient_restrictions =
  reject_rbl_client relays.ordb.org,
  reject_rbl_client bl.spamcop.net



Criando excessões a RBLs


Em alguns casos temos que aceitar e-mails de IPs listados nas RBLs. Mas como fazer isso?


Inserir as seguinte linha no main.cf:

  check_client_access hash:/etc/postfix/rbl_exceptions


Criar o arquivo /etc/postfix/rbl_exceptions com o conteúdo:

  dominio.com.br	OK



Bloqueando Domínios inexistentes


Não é raro receber e-mails de domínios como nonreply, asldkj.hotmail.com e outros que não existem.
Para isso podemos fazer com que nosso Postfix receba e-mails apenas de domínios existentes.


Inserir a seguinte linha no main.cf:


  smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain



Bloqueando HELO/EHLO forjado


Não é raro que os spammers utilizem o nome do nosso servidor, nosso domínio, ou até mesmo o IP do nosso servidor de e-mail na hora de enviar um HELO. Utilizando algumas restrições do Postfix, bem como regex, isso é a mesma coisa que receber um e-mail com uma flag indicando que é spam. Vamos cortar o mal pela raiz:


Coloque no seu main.cf:

  smtpd_helo_required = yes
  smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_hostname, 
  check_helo_access regexp:/etc/postfix/helo-invalid


E dentro do /etc/postfix/helo-invalid (supondo que o IP do seu servidor de e-mail seja 200.200.200.200:

  /(mailserver\.)?dominio\.com\.br/ REJECT You are not me
  /200\.200\.200\.200/ REJECT You are not me



Bloqueando redes indesejáveis


Se você monitorar seus logs de e-mail, irá perceber que mais de 90% do spam nacional vem de redes como xDSLs da Telefônica e Telemar, conexões a cabo como virtua ou mesmo conexões dial-up. Já temos o padrão. Agora é só escrever as regras:


No main.cf:

  smtpd_client_restrictions = permit_mynetworks, check_client_access regexp:/etc/postfix/ip-access-exceptions


No /etc/postfix/ip-access-exceptions:

  /dsl\.telesp\.net\.br/  REJECT  Sorry, no xDSL here
  /speedy(terra|uol)\.com\.br/    REJECT Sorry, no xDSL here
  /dial-?(up|uol)/        REJECT Sorry, no Dial-up here
  /virtua\.com\.br/       REJECT Sorry, no xDSL here
  /veloxzone\.com\.br/    REJECT Sorry, no xDSL here


Agora é só observar seus logs e usar seus conhecimentos em regex e implementar regras referentes a outros IPs e redes.


SUGESTÃO: Crie regras para todas as redes que estiverem relatadas aqui: http://www.nbso.nic.br/stats/spam/



Conclusões


Como demonstrado rapidamente, o Postfix tem uma enorme capacidade de vericações e filtros. Utilize sua imaginação e seus conhecimentos em regex e, com certeza, poderá fazer filtros muito interessantes.


Referências


Keld Simonsen


Postfix Configuration - UCE Controls


Postfix UCE-HOWTO


Expressões Regulares


Fighting malware and spam with Postfix



GoogleAds