Fora spam! - Linux Magazine

Propaganda
SYSADMIN
Sendmail contra o lixo digital
Fora spam!
O spam é uma praga digital e deve ser combatido como tal. O
Sendmail oferece diversas abordagens, tanto sozinho quanto
acompanhado, para filtrar mensagens indesejadas. Entenda
os princípios da filtragem de spam com o Sendmail e outros
componentes que podem ajudar muito nesta tarefa, e veja
qual abordagem oferece o custo-benefício que você espera.
por Mirko Dölle
O
versátil agente de transporte
de mensagens (MTA, na sigla
em inglês) Sendmail oferece
diversas formas de controlar a atual epidemia de vírus e spam. Este artigo apresenta três cenários plausíveis anti-spam
e antivírus antes de terminar com uma
discussão sobre uma abordagem radical
que virtualmente elimina todo o spam.
A discussão pressupõe que o leitor esteja
minimamente familiarizado com a configuração do Sendmail. O artigo se aterá
a ferramentas práticas adicionais. Algumas configurações internas do Sendmail
[1], como por exemplo as estratégias de
prevenção por listas negras, também
ajudam a combater essas pragas, porém
raramente representam uma solução
completa. Para mais informações sobre
a configuração de servidores Sendmail,
62
o site deste programa [2] oferece um
resumo de seu código.
O Amavisd-new é uma interface entre
um MTA e um filtro de conteúdo como
um antivírus ou o Spamassassin. Você
pode buscar mais informações sobre o
Amavisd-new na edição de Fevereiro de
2006 da Linux Magazine [4]. Diversas
configurações do Amavis estão disponíveis
para vários MTAs, e oferecem ao mesmo
tempo uma interface para estatísticas. O
Amavis é bastante seguro do ponto de vista
da programação, já que a linguagem Perl
não está sujeita a estouros de buffer. O
fato de os fóruns de segurança como o
SecurityFocus e o FrSirt [5] não falarem
muito sobre o Amavis por si só já confirma
esse ponto. O Amavis normalmente não
requer privilégios de superusuário; ele roda
feliz num ambiente de chroot, e dá aos
administradores opções de configuração
para evitar ataques de negação de serviço
baseados em emails-bomba.
A interface é fácil de instalar. Para
sistemas baseados em Debian, rode aptget install amavisd-new. Como o Amavis
geralmente também procura vírus, você
certamente vai querer instalar um antivírus ao mesmo tempo. A configuração fica
em /etc/amavis/amavisd.conf; e as opções
dependem da situação atual. Entretanto,
você pode antes modificar a sua instalação do Sendmail.
Há diversas formas de integrar o Amavis ao Sendmail. O recomendado é a variante dual do Sendmail. Nesse cenário,
a primeira instância do Sendmail aceita
emails na porta 10024, encaminhando-os
à segunda instância do Sendmail após
a verificação.
http://www.linuxmagazine.com.br
Spam no Sendmail | SYSADMIN
~/.procmailrc
Sasl
SM-MTA-RX
SM-MTA-TX
na porta 25
na porta 10025
Procmail
Dovecot
POP3(s), IMAP(s)
Amavisd-new
na porta 10024
TMDA
(opcional)
Clam-AV
Spamassassin
Razor
(clamd)
Squirrelmail
Cliente
de Email
DCC
Figura 1 Simples e bastante rígido: Sendmail e Amavis lutando sozinhos contra spam e vírus.
Sendmail dual
Hostname-tx.mc. Defina as configurações
Executar o Amavis significa configurar até para recebimento de email, incluindo os
dois processos do Sendmail que gerenciam limites de recursos, em hostname-rx.mc. O
filas distintas de mensagens. Um processo lado do envio é definido pelo hostnamegerencia a fila de recepção (MTA-RX), tx.mc. Uma vantagem da instalação dual
enquanto o outro cuida da transmissão do Sendmail é que o MTA-RX, acessível
(MTA-TX): o Amavisd-new fica no meio da Internet, não precisa rodar com privido caminho, atuando como um filtro de légios de superusuário, pois não acessa
vírus e spam. O processo MTA-RX escuta os diretórios home dos usuários.
na porta TCP 25, e lê sua configuração
dos arquivos /etc/mail/sendmail-rx.cf e /
etc/mail/submit.cf, junto com o arquivo
fonte /etc/mail/hostname-rx.mc.
A maioria das redes inclui computaDigite mkdir /var/spool/mqueue-rx para dores com Windows®, portanto faz
criar o diretório com a fila de emails. sentido permitir que o servidor de
A seguinte linha aplica as permissões emails busque vírus. O ClamAV é um
adequadas:
antivírus aberto e gratuito com atualizações diárias. Binários do ClamAV
chown root:amavis /var/spool/mqueue-rx
estão disponíveis para diversas distri➥ && chmod 700 /var/spool/mqueue-rx
buições de Linux. Infelizmente, esse
programa recentemente esteve nas
Continue agora com a definição do manchetes devido a algumas falhas
seu próprio soquete de controle, ou faça críticas de segurança, o que dificulos dois processos do Sendmail pararem ta sua recomendação. No entanto, o
de discutir:
Amavisd-new facilita a execução de
múltiplos antivírus em paralelo; uma
define(`confCONTROL_SOCKET_NAME’,
visão geral dos antivírus mais popula➥`/var/run/sendmail/mta/smcontrol-rx’)dnl
res está disponível em [6].
gins e um programa antivírus. As opções
são diversas. Se você configurar a variável
$mydomain da forma errada, praticamente
nada funcionará, então comece dandolhe um valor. Defina também valores
adequados para $LOGFILE e $log_level
para ativar a solução de problemas e a
análise de logs.
Em seguida, você deve pensar no que
acontecerá às mensagens infectadas por
vírus e ao spam, definindo as variáveis
$final_virus_destiny e $final_spam_destiny de acordo. As opções disponíveis
são D_PASS, D_DISCARD, D_BOUNCE e D_REJECT;
administradores responsáveis devem optar por D_BOUNCE em vez de D_REJECT, pois
essa última permite a adulteração de
endereços (address spoofing).
Esse método utiliza os parâmetros
$sa_* para controlar o Spamassassin,
que são praticamente auto-explicativos. Para marcar todas as mensagens
com um cabeçalho X-Spam, defina
$sa_tag_level_deflt = -999 . Para permitir aos usuários identificar spam
pela linha de assunto do email, um
$sa_spam_subject_tag vazio ajuda. Para
aumentar a taxa de detecção, também
é bom mandar o Amavis usar fontes
externas, como listas negras, o DCC,
A maneira mais simples e menos flexível Razor, Pyzor. Para isso, use a opção
de combater spam e vírus é usar o Amavis $sa_local_tests_only = 0.
(figura 1) sozinho. A interface automaticaJá se mostrou que valores entre 2 e
mente integra o Spamassassin, seus plu- 2,5 são úteis para a $sa_tag2_level_deflt,
Programas maliciosos
O processo MTA-TX se liga à porta
10025 da interface local e usa o arquivo
de configuração e a fila normais. Para
manter as informações legíveis, usaremos
o arquivo fonte compartilhado /etc/mail/
Linux Magazine #22 | Agosto de 2006
Amavis sozinho
63
SYSADMIN | Spam no Sendmail
~/.procmailrc
Sasl
SM-MTA-RX
SM-MTA-TX
na porta 25
(porta 10025)
Spamassassin
Procmail
Dovecot
POP3(s), IMAP(s)
TMDA
Amavisd-new
(opcional)
na porta 10024
Razor
MySQL-DB
Clam-AV
Squirrelmail
(clamd)
Cliente
de Email
DCC
Maia Mailguard
(front-end web com PHP)
Figura 2 Um cenário mais flexível com bancos de dados e Sendmail, Amavis e Maia.
que marca mensagens como spam ou
não-spam. No caso de aparecerem muitos falsos positivos, pode-se aumentar
esse valor, mas com cuidado. A opção
$sa_mail_body_size_limit nos permite controlar o tamanho de mensagem a partir
do qual o Amavis não buscará mais spam
– emails grandes dificilmente são spam.
E a opção $sa_timeout informa o número
de segundos que o Amavis esperará pelo
Spamassassin antes de encaminhar as
mensagens. As listas brancas e negras e
os receptores que preferirem desativar a
verificação de spam ($spam_lovers) podem
ser configurados de forma bastante flexível. Listas brancas são problemáticas
devido a endereços remetentes adulterados, como já mencionamos.
Figura 3 A interface Maia oferece aos usuários a
possibilidade de usar configurações individuais – listas negras, no caso.
64
Múltiplos antivírus
A solução 1 permite verificar vírus, e
pode até usar múltiplos antivírus paralelamente. (ClamAV e McAfee foram
testados com sucesso pelo autor). Assim
que o antivírus encontra um vírus, seria
um desperdício de recursos entregar a
mensagem para o outro. O parâmetro
$first_infected_stops_scan = 1 impede
esse comportamento.
Também é possível avisar o remetente a respeito do email infectado
especificando $warnvirussender = 1,
porém esse serviço pode não fazer
muito sentido, pois administradores
afobados provavelmente tratarão seus
avisos como spam, ou os endereços
adulterados impedirão o email de aviso
de alcançar o verdadeiro responsável
pelo spam. Se você preferir não apagar
automaticamente as mensagens com
vírus, pode usar um diretório de quarentena com a variável $QUARANTINEDIR,
naturalmente cuidando para que haja
espaço suficiente em disco.
A varredura de vírus pode rapidamente consumir boa parte dos recursos
de um servidor de email, levando-o
assim a uma condição de negação de
serviço. Emails-bomba, em especial,
explodem para um tamanho tão grande
quando descompactados para a varredura de vírus que o servidor pode facilmente ficar sem memória e espaço de
troca. O parâmetro $MAXLEVELS diminui
esse problema restringindo os níveis
de aninhamento de arquivos múltiplas
vezes compactados. Ao atingir o nível
pré-definido, o Amavis pára de tentar
descompactar o arquivo. O parâmetro
$MAXFILES restringe o número de arquivos por email.
O parâmetro $MAX_EXPANSION permite que você defina um limite em bytes
para uso da memória em operações de
descompactação. Sempre que um email
exceder um desses três limites, o Amavisdnew versão 20060616-p8 ou mais recente
adiciona uma etiqueta ***UNCHECKED*** ao
campo de assunto. É uma boa prática
filtrar esses emails, pois provavelmente
contêm vírus.
Solução 2
A solução 1 é fácil de configurar, no
entanto não oferece muitas opções de
personalização das filtragens baseadas
em usuários. Uma maneira de estender
o Amavis é adicionar o Maia Mailguard
http://www.linuxmagazine.com.br
Spam no Sendmail | SYSADMIN
[7] conforme o esquema da figura 2. Maia
é uma interface web multi-linguagem
e fácil de usar feita em PHP e Perl. Ele
usa uma versão modificada do Amavisd-new, que armazena configurações
específicas para cada usuário num banco de dados MySQL ou PostgreSQL. A
instalação é longa, porém não oferece
grande dificuldade.
Os usuários acessam suas configurações individuais pela interface web. Para
isso, pede-se que eles façam login com
seus endereços completos (!) de email.
Depois, eles podem gerenciar suas caixas de mensagens, definir listas negras
individuais (figura 3), ou mudar o valor
de limite para spam.
O preço dessa conveniência é um
maior risco para o administrador: mais
componentes sempre significam maior
risco de falha. Se o banco de dados
travar, o servidor simplesmente pára
de entregar os emails. Olhando pelo
lado positivo, ele armazena a mensagem temporariamente, entregando-a
mais tarde, assim que o banco de dados
voltar. Para aumentar a disponibilidade,
administradores podem utilizar múltiplos servidores SQL.
O segundo ponto crítico é que as alterações usadas pelo Maia impedem-nos
de instalar as atualizações de segurança
em formato binário fornecidas para o
Amavisd-new por nossas distribuições
– isso simplesmente apagaria o caminho (path). Para servidores de email
com grande volume de mensagens, a
queda de desempenho devido a acessos
repetidos ao banco de dados também
pode ser significativa (veja abaixo). Mais
uma vez, os administradores podem
contornar esse problema utilizando
múltiplos servidores.
boa medida de segurança. A solução 3 é
fácil de instalar: apt-get install spamassmilter spamassassin. Depois acrescente
as seguintes linhas:
INPUT_MAIL_FILTER(`spamassassin’,
➥`S=local:/var/run/sendmail/spamass.sock,
➥ F=,T=S:4m;R:4m;E:10m’)dnl
ao arquivo de configuração do MTA-RX
compile os arquivos de
configuração executando m4, e reinicie o Sendmail. Defina as preferências
globais em /etc/spamassassin/local.cf.
Veja [8] para uma lista completa de
opções. As mais importantes são: para
permitir configurações individuais dos
usuários, defina allow_user_rules 1. Para
etiquetar todo spam, use required_score
2.5, rewrite_subject 1 e rewrite_header
Subject ***Spam***.
Os critérios padrão de detecção são
bastante bons; opções de configuração
mais granulares estão detalhadas em [9].
O Spamassassin dá um valor ao conteúdo dos emails e, se o valor superar um
determinado limite, ou o estabelecido
pela opção required_score, a mensagem
é marcada como spam. Para melhorar
a taxa de detecção de spam, é recomendável atribuir um valor maior a
hostname-rx.mc,
Solução 3
Para uma flexibilidade máxima nas
configurações, sem o impacto dos
gráficos, um modelo como o da figura 4 provavelmente é o melhor. Ele
usa a interface de Milter do Sendmail
para acessar uma instância distinta
do Spamd (o daemon do Spamassassin). Cada usuário pode definir suas
próprias configurações em ~/.spamassassin/user_prefs . O Spamd acessa
o arquivo user_prefs e detecta spam
baseado nesses valores. Se não existir
esse arquivo, o Spamassassin automaticamente aplicará as preferências do
administrador, localizadas em /etc/
spamassassin/local.cf.
Como o Spamd precisa acessar os
diretórios em /home, ele roda sob a conta
do superusuário. Você pode configurar
o uso de níveis de usuário ao acesso a RAZOR2_CHECK, RAZOR2_CF_RANGE_51_100 e
esses diretórios, para evitar rodar o pro- DCC_CHECK. O valor de PYZOR_CHECK já é
cesso como superusuário. Essa é uma alto o suficiente.
➧
~/.procmailrc
Sasl
SM-MTA-RX
SM-MTA-TX
na porta 25
na porta 10025
Procmail
Dovecot
POP3(s), IMAP(s)
Amavisd-new
SpamassMilter
Spamd
na porta 10024
TMDA
(opcional)
Razor
Clam-AV
(Clamd)
DCC
Squirrelmail
Cliente
de Email
~/.spamassassin/
user_prefs
Figura 4 Uma configuração mais flexível com o uso de bancos de dados com Sendmail e Milter.
Linux Magazine #22 | Agosto de 2006
65
SYSADMIN | Spam no Sendmail
Email chegando
UDP (DCC), 2703/TCP, 7/TCP (Razor),
e 24441/UDP (Pyzor).
Talvez você tenha que configurar seu
firewall para permitir tráfego de saída nessas
portas e assim deixar que se abram as devidas
conexões às redes respectivas. Pode parecer
um pouco paranóico usar todos esses três
programas paralelamente, mas isso realmente melhora a detecção de spam.
Enviando ao
Servidor de Email
Pedido de confirmação
Email de confirmação
Solução 4
Um método menos conhecido de combate ao spam, que só funciona em situações específicas, é o Agente de entrega
de mensagem etiquetada, ou Tagged
Message Delivery Agent (TMDA) [10]. o
TMDA utiliza uma abordagem de desafio
e resposta na qual cada mensagem enviada ao servidor para ser entregue deve
provar a este que é legítima.
A figura 5 mostra como isso funciona a
princípio: um servidor de email externo
está tentando enviar uma mensagem para
uma caixa de correio no nosso servidor. O
nosso servidor de email pede que o remetente confirme a mensagem original, e não
a entrega ao destinatário até que receba
a confirmação. Spammers não enviarão
Aceito
Servidor de Email
Entrega
Caixa de Email
Figura 5 Abordagem de desafio e resposta para impedir o spam por meio de TMDA.
DCC + Razor
+ Pyzor
Os parâmetros referidos acima especificam os critérios de avaliação de dados
a partir das três redes globais de email,
que coletam e avaliam hashes de emails.
As funções hash usadas para esse propósito funcionam de forma diferente das
conhecidas funções hash MD5 e SHA1.
Elas utilizam os chamados soft hashes,
que permitem que alguns itens do email
mudem, como por exemplo o destinatário,
sem, no entanto, modificar o hash.
Cada servidor de email que usa essas
redes externas envia para elas os hashes
de todos os emails que recebe. Se 100.000
hashes chegarem à rede – e esse valor é
configurável – você pode considerar que
o email é spam. Afinal, é improvável que
alguém envie 100.000 emails com conteúdo idêntico e legítimo.
Rode o apt-get para instalar o DCC,
o Razor e o Pyzor. O Spamassassin automaticamente detecta sua existência. O
DCC requer um servidor DCC separado
para volumes acima de 250.000 emails,
e bloqueia qualquer acesso acima disto
como um ataque de negação de serviço
em potencial. Para verificar se esses plugins estão funcionando, você pode usar o
Tcpdump para ver o cabeçalho dos emails
considerados spam, ou as portas 6277/
66
Email chegando
Enviado ao
Servidor de Email
Valor < 1
= Lista Branca
Antivírus/
Anti-spam
Valor > 2.5
Entregar como Spam
Caixa de entrada
1 < Valor < 2,5
Pedidos
Mensagem de
Confirmação
Confirma o
Remetente
Caixa de entrada
Aceito
Servidor de Email
Entrega
Mensagem entregue
Caixa de entrada
Figura 6 Num cenário mais sofisticado de TMDA, o Spamassassin pré-seleciona as mensagens.
http://www.linuxmagazine.com.br
Spam no Sendmail | SYSADMIN
uma mensagem de confirmação, já que
eles geralmente enviam emails em massa,
e nem receberão o pedido de confirmação,
pois adulteram o endereço do remetente.
Isso reduz a zero as mensagens indesejadas, mas com um custo considerável
causado pelo maior fluxo de emails. A
figura 6 apresenta uma abordagem mais
sofisticada para o TMDA.
Se optar por essa abordagem de tolerância zero, você deve entender algumas coisas:
➧ Como spammers normalmente usam
endereços de outras pessoas, o seu
servidor de email não deve incomodar esses inocentes pedindo-os confirmação. Em outras palavras, não
peça confirmação de mensagens que
já tenham sido marcadas como spam
pelo filtro de spam.
➧ Emails com um nível de spam muito
baixo podem ser entregues diretamente, sem passar pelo TMDA.
➧ Se dois sistemas TMDA por acaso
se encontrarem, laços infinitos não
podem ser excluídos. A página do
TMDA [10] afirma que isso não deve
acontecer, mas não há garantia. A
FAQ na página aborda mais questões
e sugere soluções.
➧ Você está advertido a fazer sua lista branca
pessoal, independente do Spamassassin;
sua melhor abordagem é adicionar seu
catálogo de endereços. Listas brancas
são particularmente importantes para
registrar e usar em listas de emails.
Um efeito colateral positivo é que
qualquer pessoa que mande email para
você, e que não esteja na sua lista branca, recebe uma confirmação de que a
mensagem chegou. Além disso, deve-se
notar que, devido a sua complexidade,
o TMDA não é a solução perfeita para
muitos usuários e situações.
Desempenho
Um servidor de emails que tente oferecer
a solução perfeita em todos os cenários
coloca sempre em risco o desempenho
caso o volume de mensagens cresça. Por
isso realizamos um teste de desempenho
das soluções propostas neste artigo.
Utilizamos o Postal [11] para um teste
de desempenho num Pentium 4 2.8 GHz
com 512 MB de RAM. O programa de
benchmark envia emails com um tamanho máximo de 15KB para o servidor num
período de cinco minutos. A solução 1
(Amavis sozinho) mostrou-se capaz de
lidar com 600 emails por minuto. Ela
levou mais cinco minutos para entregar
Linux Magazine #22 | Agosto de 2006
todas as mensagens. Ativar o ClamAV não
reduziu significativamente a velocidade
desse processo. Se você usar o Spamassassin com testes externos conforme descrito
na solução 3, o desempenho dependerá
fortemente da largura de banda da conexão do servidor à Internet, além de sua
latência. O TMDA (solução 4) afeta o
desempenho significativamente.
Tudo acaba bem
Obviamente este artigo não substitui um
livro de 1000 páginas, e só pode ofereceer
uma introdução ao Sendmail e alguns de
seus componentes. O primeiro dos três
designs que examinamos deve funcionar na primeira tentativa na maioria dos
ambientes. Antes de utilizar a solução 4,
deve-se pesar os prós e contras atenciosamente. O que todas as soluções têm em
comum é a alta escalabilidade, devido a
sua característica modular, seja pelo uso
de discos separados para filas de emails,
ou mesmo servidores distintos para cada
componente individual. ■
Mais Informações
[1] Propriedades anti-spam do Sendmail:
http://www.sendmail.org/
m4/anti_spam.html
[2] Sendmail: http://www.sendmail.org
[3] Amavis-new: http://www.ijs.si/
software/amavisd/
[4] “Proteção na fonte”, de Larkin
Cunningham; Linux Magazine,
Fevereiro de 2006, p. 35
[5] SecurityFocus e FrSirt:
http://www.securityfocus.com
e http://www.frsirt.com
[6] “Quer um bom antivírus?”, de
James Mohr; Linux Magazine,
Fevereiro de 2006, p. 27 :
[7] Maia Mailguard:
http://www.renaissoft.com/maia/
[8] Configuração do Spamassassin para
recebimento de emails:
http://spamassassin.apache.org/
full/3.0.x/dist/doc/
Mail_SpamAssassin_Conf.html
[9] Valores de spam padrão do
Spamassassin:
http://spamassassin.apache.org/
tests_3_0_x.html
[10] TMDA: http://www.tmda.net
[11] Postal:
http://www.cocker.com/postal/
67
Download