:[ Mauricio Teixeira :: Artigos e comentários - Tutorial: Anti-Spam em SUSE 10.0 ]:
Introdução
O objetivo deste documento é apresentar uma maneira simples e rápida de
instalar um sistema anti-spam em um servidor rodando
SUSE 10.0. Pressupõe-se que o leitor:
- já instalou ou vai instalar o sistema operacional base, e sabe como fazê-lo.
- sabe instalar os pacotes quando solicitado (com o gerenciador de escolha).
A configuração descrita abaixo foi implantada em uma empresa para qual presto
consultoria, e serviu como gateway para um servidor Microsoft Exchange.
Alguns detalhes podem ser um pouco diferentes no seu caso, mas estou expondo
a idéia geral. Aceito sugestões e/ou críticas para melhoria do documento.
O resultado deste trabalho está em operação desde Janeiro/2006. A parte
relacionada à interligação com o Exchange pode ser lida em
"Anti-Spam Gateway para MS Exchange com SUSE 10.0".
Por causa dessa implementação diferenciada, as partes da configuração do
Postfix relacionadas à entrega final das mensagens (local ou remota) foram
omitida neste documento.
Fluxo de uma mensagem
Toda mensagem que entra no sistema segue o fluxo abaixo:
- Mensagem recebida pelo Postfix. Execução de checagens básicas preliminares.
- Mensagem repassada para o AMaViS:
- Checagem de vírus. Caso encontrado, mensagem descartada. FIM
- Checagem de spam:
- level < 5.0 : Mensagem passa limpa, sem modificação.
- 5.0 <= level < 10.0 : Mensagem passa com X-Spam-Level (possível spam).
- 10.0 <= level < 30.0 : Mensagem descartada, cópia enviada para quarentena, notificação enviada para remetente.
- 30.0 <= level < 60.0 : Mensagem descartada, cópia enviada para quarentena, sem notificação.
- 60.0 <= level : Mensagem descartada, sem cópia em quarentena.
- Mensagem, cópias e/ou notificações são entregues ao destino final.
- FIM
Checagens executadas pelo Postfix
Lista das checagens executadas pelo Postfix (não necessariamente na ordem em que ocorrem):
- smtpd_sender_restrictions - restrições de mensagens entrantes, com destino local, verificadas no campo MAIL FROM.
- hash:/etc/postfix/access - pode-se utilizar esse arquivo para definir endereços (inteiros ou partes) que serão negados imediatamente após a execução do comando MAIL FROM. Verifique access(5) para maiores detalhes.
- reject_unknown_sender_domain - rejeita mensagens quando o domínio especificado em MAIL FROM não possuir uma entrada de DNS A ou MX válidos (domínios forjados e/ou mal configurados).
- smtpd_client_restrictions - restrições de mensagens entrantes, com destino remoto (ou seja, enviadas da rede local para e-mails externos).
- permit_mynetworks - permite o envio a partir de máquinas listadas em mynetworks (caso a variável não exista, confia em máquinas da mesma classe da máquina local).
- reject_rbl_client - rejeita mensagens enviadas a partir de máquinas listadas em um dos servidores RBL especificados.
- reject_unknown_client - rejeita o envio de mensagens quando (a) ip->nome falha (b) nome-ip falha ou (c) nome-ip é diferente do ip de origem (ou seja, aceita somente servidores com reverso válido).
- smtpd_helo_required - exige que o protocolo comece com HELO ou EHLO (muitos programas de envio de spam suprimem isso para economizar tempo).
- smtpd_helo_restrictions - restrições/excessões para o HELO/EHLO.
- permit_mynetworks - permite o envio a partir de máquinas listadas em mynetworks (caso a variável não exista, confia em máquinas da mesma classe da máquina local).
- reject_invalid_hostname - rejeita quando o hostname especificado possui sintaxe inválida.
- strict_rfc821_envelopes - aceita mensagens apenas quando os endereços especificados em MAIL FROM e RCPT TO estão entre <>.
- smtpd_recipient_restrictions - restrições de mensagens entrantes, verificadas no campo RCPT TO.
- permit_mynetworks - permite o envio a partir de máquinas listadas em mynetworks (caso a variável não exista, confia em máquinas da mesma classe da máquina local).
- reject_unauth_destination - rejeita o envio de máquina não listadas em mynetworks quando o destinatário não for reconhecido como um domínio local.
- message_size_limit - tamanho máximo de uma mensagem (inclindo cabeçalhos) (padrão 10MB).
- header_checks - filtros de cabeçalhos de mensagens, checados antes de passar a mensagem adiante. Verifique header_checks(5) para maiores detalhes.
- relay_domains - domínios aceitos para relay local.
- relay_recipient_maps - endereços válidos para relay local. Caso o RCPT TO não exista nessa tabela, a mensagem é imediatamente negada.
- smtpd_delay_reject - envia códigos de rejeição apenas após receber MAIL FROM e RCPT TO.
Checagens executadas pelo AMaViS
Lista das checagens executadas pelo AMaViS (não necessariamente na ordem em que ocorrem):
- Checagem de vírus usando ClamAV (clamd).
- Checagem de spam usando SpamAssassin (stand-alone).
- Anexos:
- Extensões proibidas - exe|vbs|pif|scr|bat|cmd|com|cpl
- Extensões que não podem ser duplicadas - exe|vbs|pif|scr|bat|cmd|com|cpl|dll (ex.: arquivo.src.exe)
- Tipos MIME proibidos - application/x-msdownload|application/x-msdos-program|application/hta
- Cabeçalhos e textos que aumentam o score de spam - (verificar variável @score_sender_maps no arquivo amavisd.conf)
Políticas do AMaViS
- Checagem de spam em mensagens com no máximo 2MB.
- Não utiliza a auto_whitelist do SpamAssassin.
- Vírus detectado, mensagem descartada.
- Spam detectado acima de 10.0, mensagem copiada para quarentena (spambox) e dropada.
- Permite o uso de whitelist/blacklist/spam_lovers
Checagens executadas pelo SpamAssassin
- Lista de testes padrão
- use_bayes - utiliza deteção de spam através do algoritmo Bayes.
- bayes_auto_learn - utiliza o sistema de auto-aprendizado do Bayes.
- ok_languages - mensagens nas linguagens especificadas são consideradas válidas, a qualquer outra será atribuido o valor de UNWANTED_LANGUAGE_BODY (padrão 2.800).
- ok_locales - permite apenas determinados códigos de caracteres.
- skip_rbl_checks - permite a execução de testes RBL, e atribui valores baseados nos resultados.
- use_razor2 - utiliza base de dados centralizada do Razor para deteção de spam conhecido.
- use_dcc/use_pyzor - dois outros sistemas similares ao Razor (não utilizados em nosso ambiente).
- dns_available - verifica existência dos domínios através de queries DNS.
- use_auto_whitelist - gera listas brancas baseadas no comportamento de longo termo de um determinado remetente (não utilizado no momento).
- header/describe/score LOCAL_RCVD - todos os e-mails recebidos da máquina local recebem score menor.
- score <diversos> - aumenta ou diminui os scores padrão.
Checagens executadas pelo Razor
- ignorelist - mensagens vindas de listas de discussão são tratadas como qualquer uma (checadas).
- min_cf - quando definido ac, o score mínimo necessário para ser considerado spam vai ser determinado pela média geral informada pelo próprio servidor do Razor.
- report_headers - quando spam é detectado, envia relatório completo ao servidor Razor.
== Definindo parâmetros do Postfix ==
- /etc/sysconfig/mail
SMTPD_LISTEN_REMOTE="yes"
- /etc/sysconfig/postfix
POSTFIX_LOCALDOMAINS="\$myhostname, \$mydomain"
POSTFIX_MAP_LIST="relay_recipients ...
POSTFIX_RBL_HOSTS="relays.ordb.org, list.dsbl.org, sbl-xbl.spamhaus.org"
POSTFIX_BASIC_SPAM_PREVENTION="medium"
POSTFIX_ADD_RELAY_RECIPIENT_MAPS="hash:/etc/postfix/relay_recipients"
POSTFIX_ADD_HEADER_CHECKS="regexp:/etc/postfix/header_checks"
POSTFIX_ADD_BODY_CHECKS="pcre:/etc/postfix/body_checks"
POSTFIX_ADD_SMTPD_DELAY_REJECT="yes"
- /sbin/conf.d/SuSEconfig.postfix
Altere a linha 490, de forma a aumentar a quantidade de processos permitidos do smtpd.
$line = $1."40".$2." -o content_filter=smtp:[127.0.0.1]:10024";
Não esqueça de rodar SuSEconfig toda vez que alterar algum parâmetro nesse arquivo. E mais importante: não edite o main.cf manualmente, ou o SuSEconfig não mais irá gerenciar o arquivo. Nesse caso, o ideal seria migrar toda a configuração e ignorar o SuSEconfig por completo.
- /etc/postfix/master.cf
smtp inet n - n - 15 ...
Reinicie o postfix e teste o envio de mensagens.
Configuração do ClamAV
Instale os pacotes clamav e clamav-db.
- /etc/clamd.conf
LocalSocket /var/lib/clamav/clamd-socket
#TCPSocket 3310 # Apenas scan LOCAL
#TCPAddr 127.0.0.1
MaxThreads 20
#Foreground
ScanRAR
ArchiveMaxFileSize 20M
- /etc/freshclam.conf
DatabaseMirror db.br.clamav.net
Checks 2
OnErrorExecute "echo freshclam-error | mail -s freshclam-database-update-error postmaster@myfakedomain.fake"
Inicie os serviços:
- chkconfig freshclam on && rcfreshclam start && chkconfig clamd on && rcclamd start
Configuração do AMaViSd-new
Instalamos o AMaViSd-new pelos pacotes dos repositórios. A seguir, definimos os parâmetros de configuração:
- /etc/sysconfig/amavis
USE_AMAVIS="yes"
Esse parâmetro faz com que o SuSEconfig integre automaticamente o AMaViS ao Postfix.
OBS.: É recomendada a leitura de amavisd-new documentation bits and pieces para o perfeito entendimento das opções abaixo.
- /etc/amavisd.conf
$max_servers = 15;
$mydomain = 'myfakedomain.fake';
@local_domains_maps = ( [".$mydomain"] );
$log_level = 1;
$quarantine_subdir_levels = 2;
$sa_tag_level_deflt = 5.0;
$sa_tag2_level_deflt = 10.0;
$sa_kill_level_deflt = 10.0;
$sa_dsn_cutoff_level = 30.0;
$sa_quarantine_cutoff_level = 60.0;
$sa_auto_whitelist = 0;
$virus_admin = "spambox\@$mydomain";
$final_virus_destiny = D_DISCARD;
$final_spam_destiny = D_DISCARD;
$spam_quarantine_to = "spambox\@$mydomain";
read_hash(\%whitelist_sender, '/var/spool/amavis/whitelist');
read_hash(\%blacklist_sender, '/var/spool/amavis/blacklist');
read_hash(\%spam_lovers, '/var/spool/amavis/spam_lovers');
Para habilitar o clamd, descomente as linhas abaixo no arquivo de configuração:
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN <>\n", "/var/lib/clamav/clamd-socket"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
Inicie as listas.
Ainda não inicie o serviço. Precisamos configurar o SpamAssassin primeiro.
Configuração do SpamAssassin
Instalamos o SpamAssassin pelos pacotes dos repositórios. A seguir, definimos os parâmetros de configuração:
Regras brasileiras
Precisamos de um arquivo específico para regras brasileiras. Para isso existe o site Exit0Wiki Brazilian Rules.
- Copie o conteúdo da página Exit0Wiki br_Tools em um arquivo local no servidor (ex. /usr/local/bin/get-spamassassin-br-rules.sh), e dê permissão de executar.
- Edite o arquivo, e modifique // lynx --dump --dont_wrap_pre $wget ${FILE} -O ${TMPFILE>.
Lembre-se de executar o arquivo de vez em quando. Não é bom colocar no cron. Também é interessante acompanhar a lista de discussão.
Configuração Razor
O Razor faz checagens de SPAM em uma base centralizada na internet. Instalamos o pacote razor-agents.
- razor-admin -home=/var/spool/amavis/.razor -d -create && razor-admin -home=/var/spool/amavis/.razor -register && razor-admin -home=/var/spool/amavis/.razor -discover
- /var/spool/amavis/.razor/razor-agent.conf
debuglevel = 0
identity = identity
ignorelist = 0
listfile_catalogue = servers.catalogue.lst
listfile_discovery = servers.discovery.lst
listfile_nomination = servers.nomination.lst
logfile = razor-agent.log
logic_method = 4
min_cf = ac
razordiscovery = discovery.spamnet.com
rediscovery_wait = 172800
report_headers = 1
turn_off_discovery = 0
use_engines = 4,8
whitelist = razor-whitelist
razorhome = /var/spool/amavis/.razor
- chown -R vscan.vscan /var/spool/amavis/.razor
Finalizando
Configurações finalizadas, inicie o AMaViS.
- chkconfig amavis on && rcamavis start
E confirme que o Postfix vai reler as configurações:
Documentação Consultada
Autor
Mauricio Teixeira <mteixeira:at:webset:dot:net>
Início... - Mauricio Teixeira - Atualizado em: Thu Apr 20 15:20:06 2006