The FreeBSD FAQ - The Power to Help
The FreeBSD FAQ - The Power to Help
This site is Powered by PAR Teleon

S E Ç Õ E S
B U S C A
+
D E S T A Q U E
CONTATO
PÁGINA ANTIGA
TELEON INTERNET
E N Q U E T E
Se apos a conclusao, a traducao da documentacao oficial do FreeBSD, fosse impressa em livro, voce:

Usaria apenas a documentacao na internet como referencia.Faria o download de toda a documentacao na internet e imprimiria eu mesmo.
Compraria o livro, para te-lo em maos, mas usaria a referencia na internet com maior frequencia do que o livro.Compraria o livro, e seria minha unica referencia.
Compraria varias copias do livro e daria de presente a varias pessoas que deveriam ser devidamente catequisadas.







Jean M. Melo © - 2001
Todos os direitos reservados






H O W   T O 


Índice


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




Entrar em contato Enviar este artigo a um amigo Preparar para impressão Índice Topo da página


 

PrincipalBusca AvançadaEnqueteContatoTeleon Internet  
Enquetes antigas | FAQ | FreeBSD Desktop | Informacoes | Links | How To