|
S E Ç Õ E S |
|
|
B U S C A |
|
|
|
D E S T A Q U E |
|
|
 |
|
|
 |
|
|
 |
|
E N Q U E T E |
|



|
- 2001
Todos os direitos reservados
|
|
|
H O W T O
|

|
|
|
|
06/09/02 00:16 - Barrando SPAM´s com Postfix
Ronan Lucio
Este howto tem por objetivo ensinar como identificar e barrar SPAM´s com Postfix.
SPAM
Primeiro vamos deixar claro que, quando falo SPAM neste howto, estou me referindo a "Mensagens comerciais
não solicitadas enviadas ou recebidas na Internet".
O termo SPAM parece ter sido derivado de cenas do programa Monty Python (um famoso programa humorístico
televisivo inglês) onde diziam:"Bem, nós temos Spam, tomate e Spam, ovo e Spam, ovo, bacon e Spam,...",
isto era o que acontecia quando os primeiros SPAM´s começaram a chegar na Internet. Spam é marca registrada
da Hormel, empresa do ramo de carnes muito conhecida pelas forças armadas americanas na Segunda guerra mundial,
porém, em nenhum momento estarei me referindo à esta empresa neste howto.
Identificando o spammer
Primeiramente vamos aprender a identificar o spammer. Para isso edite o cabeçalho da mensagem e
identifique a linha a qual mostra o recebimento da sua mensagem pelo seu servidor de e-mails.
Por exemplo: Supondo que o meu servidor de e-mails seja mail.dominio.com.br. Editando o cabeçalho
da mensagem, veremos algo do tipo:
Received: by mail.dominio.com.br (mbox ronan)
(with Cubic Circle's cucipop Thu Aug 15 13:08:38 2002)
X-From_: divulgue@spammer.com Thu Aug 15 13:08:16 2002
Return-Path:
Delivered-To: ronan@dominio.com.br
Received: from mail.anything.net(mail.anything.net [192.168.51.1])
by mail.dominio.com.br (Postfix) with ESMTP id 57FD811305
for ; Thu, 15 Aug 2002 13:08:15 -0300 (BRT)
Date: Thu, 15 Aug 2002 12:12:57 -0400
To: ronan@dominio.com.br
From:
Subject: Super novidade !!!
Reply-To: anywhere@anywhere.net
X-PMFLAGS: 10322341.10
X-UIDL: 10293287_192832.222
Message-Id: <14984421_93386863>
As linhas "Received:" do cabeçalho mostram o host o qual originou a mensagem e os servidores
pelos quais a mensagem passou até chegar na sua caixa postal.
Então precisamos localizar a linha Received: do cabeçalho que mostra o host o qual entregou
a mensagem ao seu servidor de e-mails (ou ao servidor de e-mails do seu provedor ou empresa).
Analisando o cabeçalho acima, podemos ver que a mensagem foi entregue pelo IP 192.168.51.1 ao
nosso servidor de e-mails mail.dominio.com.br. Desta forma podemos identificar que o e-mail foi
enviado pelo IP 192.168.51.1 vindo de divulgue@spammer.com.
Bloqueando SPAM´s
Realmente, os spammers estão cada vez mais criativos e os SPAM´s cada vez mais difíceis de bloquear. Ainda não
existe uma única regra ou forma que barre um número considerável de SPAM´s, o que realmente fará diferença é um
conjunto de técnicas de bloqueios constantemente atualizadas.
Algumas técnicas de controle anti-spam:
Bloqueando mensagens pelo remetente
A primeira forma de bloquear a mensagem é pelo remetente. Para identificá-lo, localize a linha Return-Path:
(que nem sempre possui o mesmo conteúdo do campo X-From: ou From:) no cabeçalho da mensagem e veja o remetente,
que no nosso caso é divulgue@spammer.com.
Insira a seguinte linha no arquivo /usr/local/etc/postfix/access:
divulque@spammer.com REJECT
Você ainda poderá barrar o dominio inteiro (qualquer usuário com endereço eletrônico @spammer.com) inserindo-o
no arquivo:
spammer.com REJECT
Ou ainda barrar o usuário divulgue@ com a seguinte linha:
divulgue@ REJECT
OBSERVAÇOES
Caso não exista o arquivo /usr/local/etc/postfix/access, crie-o manualmente:
"# echo "" > /usr/local/etc/postfix/access
Após cada atualização do arquivo access, é necessário recriar o banco de dados.
Para isto, digite: "# postmap /usr/local/etc/postfix/access"
Não é permitido barrar o remetente <>. Você verá muitos SPAM´s chegando com o remetente "<>", porém, de acordo com a
RFC (Request For Comments) 1123, sessão 5.2.9, isto é utilizado para evitar loops quando o MTA (Mail Transport Agent)
envia uma mensagem de erro para o remetente.
5.2.9 Command Syntax: Section 4.1.2
The syntax shown in for the MAIL FROM: command omits the case
of an empty path: "MAIL FROM: <>" (see Page 15). An empty
reverse path MUST be supported.
Bloqueando mensagens pelo conteúdo do cabeçalho
Nem sempre é possível barrar a mensagem pelo endereço do remetente. Isto porque muitos spammers mudam este endereço
constantemente.
Uma das formas de proteger nossas caixas postais contra isto é barrando a mensagem pelo "conteúdo do cabeçalho".
Muitos programas para o envio de SPAM´s têm alguma string em comum no cabeçalho das mensagens. Por exemplo:
Supondo que um programa qualquer de SPAM, sempre insira a linha "Received: from HostSpammer" no cabeçalho da
mensagem.
Para bloquear o envio/recebimento destas mensagens, basta fazer o seguinte:
Crie/edite o arquivo /usr/local/etc/postfix/header_checks e insira a seguinte linha:
/Received:.*HostSpammer/ REJECT
Ou ainda, supondo que certo SPAM (ou vírus) sempre tenha o mesmo Assunto, por exemplo, "Scherzo". Podemos barrar
este vírus adicionando a seguinte linha no header_checks:
/^Subject.*Scherzo/ REJECT
Desta forma podemos também barrar todas as mensagem que tiverem o assunto "GANHE DINHEIRO", com a seguinte regra:
/^Subject.*GANHE DINHEIRO/ REJECT
Com esta regra, o Postfix irá barrar as mensagem com o assunto "GANHE DINHEIRO" ou "GANHE DINHEIRO FÁCIL" ou
"GANHE DINHEIRO...".
Mas supondo que eu também queira barrar as mensagens com o assunto "GANHE MUITO DINHEIRO".
Para isso, vamos alterar a regra para:
/^Subject.*GANHE.*DINHEIRO/ REJECT
Vamos a outro exemplo: Supondo que recebemos outro SPAM o qual possue sempre o mesmo remetente: "FULANO DE TAL".
Então, incluiremos a linha:
/^From.*FULANO DE TAL/ REJECT
OBSERVAÇÕES
Para o melhor entendimento das regras:
"." Significa qualquer caracter;
"*" Significa qualquer quantidade de ocorrências do caracter anterior.
Então: ".*" significa qualquer conteúdo, ou, qualquer caracter em qualquer quantidade;
"^" Significa "inicio de linha", ou seja, "^From" quer dizer: Sempre que a linha começar com "From";
Quando você quiser representar um ".", represente da seguinte forma: "\.".
header_checks utiliza Expressões Regulares para a representação das regras, portanto, para o bom entendimento e a
criação de boas regras é imprescindível conhecer "Expressões Regurares".
Bloqueando mensagens pelo conteúdo do corpo da mensagem
Uma outra forma de bloqueio de SPAM´s é o body_checks, que faz a checagem da regra com o corpo da mensagem.
Este recurso é realmente muito eficiente, porém, tem que ser usado com critérios. Isto porque cada regra será
analisada de acordo com todo o corpo da mensagem e isto poderá causar lentidão em um servidor com muitas regras
e grande fluxo de e-mails.
O ideal é manter um número pequeno de regras e sempre bem otimizadas.
Com o body_checks podemos barrar mensagens do tipo:
Supondo que sempre recebemos um SPAM o qual não conseguimos bloqueá-lo nem pelo endereço do remetente
(Return-Path) nem pelo cabeçalho da mensagem, mas percebemos que no corpo da mensagem existe a frase
"Acesse nosso site: http://www.spammer.dom".
Desta forma, basta criar a regra a seguir no arquivo /usr/local/etc/postfix/body_checks:
/www\.spammer\.dom/ REJECT
Agora vamos supor que este mesmo spammer mudou a URL que aparecia no corpo da mensagem para http://www.megamail.dom.
Neste caso, não precisaremos criar uma nova regra (/www\.megamail\.dom/). Basta alterar a regra anterior para:
/www\.(spammer|megamail)\.dom/ REJECT
Desta forma utilizaremos somente uma regra e não duas, e assim o servidor estará consumindo menos recursos.
Outro tipo de regra que ajuda muito é o seguinte: Se eu quiser barrar todas as mensagem que tiverem no corpo,
a frase "trabalhe em casa" e depois disso, em qualquer lugar do corpo da mesma mensagem, "renda extra", basta
criarmos uma regra do tipo:
/trabalhe em casa.*renda extra/ REJECT
Configurando regras UCE (Unsolicited Commercial E-mail) no Postfix
Para implementar as regras descritas acima, devemos habilitar as seguintes opções no arquivo
/usr/local/etc/postfix/main.cf:
Para habilitar o bloqueio baseado no remetente da menssagem (arquivo access), o seu arquivo main.cf deverá
conter pelo menos as seguintes linhas:
smtpd_recipient_restrictions =
check_sender_access hash:/usr/local/etc/postfix/access
permit_mynetworks
Para habilitar o header_checks e o body_checks, basta descomentar (ou adicionar) as seguintes linhas no main.cf:
header_checks = regexp:/usr/local/etc/postfix/header_checks
body_checks = regexp:/usr/local/etc/postfix/body_checks
Caso o número de regras aumente muito, talvez seja conveniente você recompilar o Postfix com suporte a PCRE,
o que deverá dar um certo ganho de performance na checagem das regras. Para habilitar o header_checks e o body_checks
com PCRE, altere as linhas do main.cf por:
header_checks = pcre:/usr/local/etc/postfix/header_checks
body_checks = pcre:/usr/local/etc/postfix/body_checks
Outros recursos oferecidos
Mas os recursos que o Postfix oferece para o bloqueio de SPAM´s não param por ai. Ainda temos mais alguns detalhes
na configuração que podem ser acrescentados:
A minha sugestão, é utilizar algo to tipo:
maps_rbl_domains = relays.ordb.org blackholes.mail-abuse.org
smtpd_helo_required = yes
smtpd_recipient_limit = 100
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
check_sender_access hash:/usr/local/etc/postfix/access
reject_unknown_sender_domain
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_maps_rbl
permit
O MAPS-RBL (Mail Abuse Prevention System - Realtime Blackhole List), como o próprio nome diz, é uma lista negra
de spammers, servidores abertos para relay e etc.
"smtpd_helo_required = yes" aceitará somente conexões que enviarem um comando HELO ou EHLO. Ativando esta opção,
alguns programas utilizados para o envio de SPAM não conseguirão enviar e-mails.
"smtpd_recipient_limit = 100" limitará o número máximo de destinatários por mensagem.
"permit_mynetworks" irá permitir relay dos IP´s pertencentes à(s) rede(s) listada(s) em $mynetworks, para que
você e seus clientes possam enviar e-mails pelo servidor.
"reject_unauth_destination" irá rejeitar as conexões externas que não forem destinadas à sua(s) rede(s)
ou domínio(s).
"check_sender_access hash:/usr/local/etc/postfix/access" fará a checagem do remetente de acordo com o
arquivo access.db.
"reject_unknown_sender_domain" irá rejeitar mensagens de domínios sem um registro de DNS do tipo A ou MX.
"reject_non_fqdn_sender" irá rejeitar mensagens cujos endereços do remetente não forem no formato FQDN
(Fully-Qualified Domain Name).
"reject_non_fqdn_recipient" irá rejeitar mensagens cujos endereços do destinatário não forem no formato FQDN.
"reject_maps_rbl" irá rejeitar mensagens vindas de IP´s listados na(s) lista(s) RBL indicada em maps_rbl_domains.
OBSERVAÇÕES
Para opter maiores informações sobre os assuntos aqui relacionados, acesse http://www.postfix.org/uce.html ou
leia a documentação contida nos arquivos de exemplo (sample-*) no diretório do Postfix.
Para obter informações sobre a instalação do Postfix, existem diversos tutoriais na internet sobre este assunto.
Considerações finais
Um dos principais objetivos deste tutorial é despertar nos administradores de rede a vontade de lutar para que
possamos diminuir o número de SPAM´s na rede, bem como mostrar como fazê-lo.
É imprescindível que haja a união formada por um grupo anti-spam, no qual se crie uma base de regras comum a
todos, onde seja possível a troca de experiências entre os administradores e a criação de arquivos de regras mais
otimizados e eficientes.
Na realidade, expressão regular é basicamente a mesma coisa para qualquer sistema. Desta forma é possível até mesmo criar
uma base de regras comum e deixá-las disponíveis no formato header_checks, body_checks, procmailrc e etc.
Espero que possamos nos unir um dia para darmos continuidade a este projeto.
e vamos a luta.
Um abraço,
Ronan Lucio
Ronan Lucio
|
|