Configurando o Exim com anti-spam

Configure Exim with anti-spam
Autor original: Ryan Cartwright
Publicado originalmente no:
https://www.freesoftwaremagazine.com
Tradução: Roberto Bechtlufft

Alguns comentários no meu artigo o servidor de rede perfeito (em inglês) na edição 17 da Free Software Magazine pediram por mais artigos aprofundando o assunto. A idéia é que este seja o primeiro deles. Vou me focar no Exim, um MTA (agente de transporte de email), configurando-o especificamente com um anti-spam. Estou me baseando em configurações que eu uso em servidores Debian GNU/Linux.

Este é um artigo de nível intermediário, e estou partindo do princípio de que você já está familiarizado com as tecnologias de entrega de email e sua terminologia. Caso não saiba o que são SMTP, registros MX e buscas por DNS reverso, pode ser uma boa idéia estudar um pouco antes de ler este artigo. Vou tentar me focar num estilo de narrativa descritiva, mas é inevitável incluir linguagem técnica no texto.

O que o Exim não é

O Exim é um agente de transporte de email. Ele recebe mensagens, geralmente via SMTP, decide o que fazer de acordo com sua configuração e transfere as mensagens para outro local baseado nessas informações. O novo local pode ser uma caixa de correio local, outro servidor ou outro daemon em execução na mesma máquina.

Ele não entrega email a máquinas clientes, e não oferece recursos para a criação de mensagens, como os clientes de email fazem. Resumindo, o Exim lida com SMTP e assuntos relacionados. Ele não lida com POP3, IMAP[1], calendários compartilhados e não serve o cafezinho. É importante destacar que o Exim não baixa emails: ele espera que as mensagens sejam entregues a ele [2].

Pacotes do Exim para o Debian

O Debian tem alguns pacotes do Exim. No momento em que escrevo, a versão atual é a 4. Os pacotes principais a serem instalados são exim4-base, exim4-config e um dos dois pacotes exim4-daemon-?. Se estiver instalando um servidor novo, o Exim pode ser instalado como uma tarefa durante a instalação do Debian (consulte o servidor de rede perfeito para informações sobre isso). Se você já tiver um servidor Debian, é possível instalar o Exim com um tasksel install mail-server ou com seu gerenciador de pacotes favorito.

Os dois pacotes de daemons do Exim4 no Debian são chamados de exim4-daemon-light e exim4-daemon-heavy. Instalar qualquer um deles vai instalar o pacote exim4-base como dependência, mas não o exim4-config. Instale o exim4-config também, ele vai ser útil.

O pacote do daemon light é perfeitamente adequado para a instalação do Exim, mas deixa de fora as buscas por dados SQL, a integração com o anti-spam e com o antivírus e a SPA (Autenticação de Senha de Segurança) do SMTP. Tudo isso está incluído no daemon heavy e, como você pretende usar o anti-spam, você vai precisar dele. O tasksel e o instalador do Debian vão instalar o exim4-daemon-light, mas para substituí-lo basta instalar o pacote do daemon heavy depois. Ou seja, um apt-get install exim4-daemon-heavy exim4-config dá conta de tudo.

Configuração inicial do Exim

Não conheço nenhuma ferramenta gráfica para configuração do Exim que vá além do gerenciamento de contas e de endereços. Eu iniciei uma longa discussão sobre a necessidade de interfaces gráficas para servidores no meu último artigo, mas me disseram “documente o que você sabe fazer”… então vou configurar o Exim pelo terminal mesmo.

É hora do exim4-config mostrar sua utilidade. Para usar o exim-config, entre com o comando (como root ou via sudo) dpkg-reconfigure exim4-config. Não vou detalhar as etapas porque todas têm um texto bem explicado – e as explicações sobre a instalação do Exim tomariam a maior parte do artigo. Algumas observações sobre as últimas etapas.

O modo debconf de configurar o Exim

Formato das caixas de correio

O transporte local_delivery do Exim é usado para entregar mensagens nas caixas de correio locais. Por padrão, elas estão no formato mbox. Há a opção de usar o popular formato Maildir, e isso pode ser definido aqui. Eu prefiro o Maildir, por isso vou usá-lo neste artigo. Para uma discussão sobre qual é o melhor, sugiro que vista sua roupa à prova de fogo e dê uma busca no Google, ou poste um comentário por aqui. Resumindo, o formato mbox armazena todas as mensagens em um único arquivo de texto. O Maildir armazena cada mensagem em um arquivo separado, em subdiretórios do seu diretório principal de email. Um vantagem do Maildir é que ele não exige o bloqueio de arquivos, o que reduz os atrasos.

Um único arquivo de configuração, ou vários?

Até onde eu sei, a próxima etapa é exclusiva do Debian e seus derivados. Você pode optar por ter os vários roteadores e transportes em arquivos de configuração separados, ou todos em um arquivo só. A primeira opção é a forma tradicional do Debian de lidar com a questão, a segunda é mais comum em outras distribuições. Se você tem experiência com o Exim em outras distribuições, escolha a segunda opção. Do contrário, a primeira opção pode ajudá-lo a encontrar o que procura com mais facilidade. Os dois métodos oferecem as mesmas opções de configuração, só que em arquivos diferentes. Eu uso arquivos separados, e vou me basear nessa escolha. Se você preferir usar um arquivo só, todas as opções de configuração estarão no arquivo /etc/exim4/exim4.conf.

SpamAssassin

O arquivo de configuração é gerado automaticamente, e oferece um servidor Exim pronto para o uso: qualquer usuário local será capaz de receber mensagens em sua caixa de correio por meio do Exim. Mas até agora, nada de anti-spam. Vamos resolver isso agora. A abordagem tradicional de anti-spam no GNU/Linux é usar o SpamAssassin. O melhor de tudo é que a versão 4.50 do Exim tem uma interface integrada para o SpamAssassin. Antes ela vinha em um plugin, o exiscan_acl.

Uma vez instalado (ex: apt-get install spamassassin), o SpamAssassin precisa ser habilitado para que tudo funcione. Edite o arquivo /etc/default/spamassassin e defina ENABLE = 1. As regras do SpamAssassin podem ser atualizadas toda noite, definindo CRON = 1 no mesmo arquivo. Depois de fazer isso, o daemon spamd pode ser iniciado com um /etc/init.d/spamassassin start.

Há bastante documentação de qualidade sobre o SpamAssassin na internet, incluindo este wiki.

Por padrão, o SpamAssassin escuta na porta 783. Se você instalou o exim4-daemon-heavy, o Exim já estará configurado para procurar o SpamAssassin nessa porta. Se seu SpamAssassin usa uma porta diferente, altere a configuração em /etc/exim4/conf.d/main/02_exim4-config_options .

Listas de Controle de Acesso (ACLs)

É preciso dizer ao Exim como e quando usar o SpamAssassin. Isso pode ser feito por meio de um roteador (que roda sobre as mensagens recebidas) ou por uma lista de controle de acesso (ACL). Vou usar uma ACL. As ACLs são executadas em mensagens durante sessões SMTP. O Exim geralmente executa uma ACL durante o comando RCPT e outra após o comando DATA. A verificação anti-spam costuma ser feita no corpo da mensagem, e por isso é preciso editar a segunda ACL. Presume-se que o SpamAssassin esteja instalado e em execução. As configurações que temos que alterar estão em /etc/exim4/conf.d/acl/40_exim4-config_check_data. Remova o comentário e amenize a configuração principal desta forma:

warn
spam = Debian-exim
condition = ${if <{$message_size}{100k}{1}{0}}
message = X-Spam_score: $spam_scoren
X-Spam_score_int: $spam_score_intn
X-Spam_bar: $spam_barn
X-Spam_report: $spam_report

Essa ACL passa todas as mensagens com menos de 100k para o SpamAssassin, assim que elas são recebidas. O limite de 100k diminui a carga do servidor, evitando a verificação de mensagens maiores com anexos que têm mais chances de conterem malware do que spam. A ACL adiciona alguns cabeçalhos à mensagem, definido a “pontuação” de spam. Vou usar isso em filtros daqui a pouco.

Rejeitando possíveis spams

Essa configuração vai alertá-lo sobre problemas, mas vai continuar aceitando as mensagens suspeitas. Não seria melhor não retransmitir as mensagens? É possível fazer a ACL rejeitar mensagens acima de um certo limite, mas não sei se isso seria uma boa idéia.

O SpamAssassin é bom no que faz, mas dá alguns alarmes falsos. Por exemplo, listas de email mal configuradas que usem HTML costumam ser um problema. Embora seja tentador bloquear essa mensagens, isso pode não ser muito prático para os seus usuários. O melhor a fazer é aceitar a mensagem com um cabeçalho adicional e trabalhar nela depois. O Exim usa filtros para essa tarefa.

Filtrando as mensagens

Muitos clientes permitem a configuração de filtros para detectar e examinar cabeçalhos. É possível, por exemplo, definir um filtro para o cliente que procure nos cabeçalhos por uma pontuação de spam acima de 9,9 e envie tais mensagens direto para a lixeira ou para a pasta de spam do cliente. Os usuários provavelmente vão gostar de não receber as mensagens com pontuação mais alta. Ainda que os filtros de clientes de email funcionem, geralmente os usuários gostam de receber menos spam.

O Exim tem um amplo sistema de filtragem que pode ser usado individualmente pelos usuários, em mensagens entregues a eles, ou em regime global, em todas as mensagens retransmitidas pelo servidor. A segunda opção é um filtro de sistema. É possível ter um para cada instalação do Exim. Especifique onde está localizado o filtro do sistema em um dos arquivos de configuração principais. Eu usei o arquivo /etc/exim4/conf.d/main/02_exim4-config_options para isso. Adicione algo neste estilo:

system_filter = “/etc/exim4/system.filter”
system_filter_user = Debian-exim
system_filter_group = Debian-exim
system_filter_pipe_transport = address_pipe
system_filter_file_transport = address_file
system_filter_reply_transport = address_reply

O filtro em si é uma série de condições e ações a serem tomadas. Aqui vai um exemplo de condição para um filtro do sistema:

if $h_X-Spam_score_int is above 99
and foranyaddress $recipients ($thisaddress contains “@mydomain.com”)
save /var/mail/suspect_spam
mail to $thisaddress
subject “[ SPAM Witheld ] $h_subject:”
from “Company Mail Server <no-reply@mydomain.com>”
text “Esta é uma mensagem automática do software de email,
não responda a esta mensagemnnO servidor suspeita que uma mensagem enviada para você por $h_From:
seja um spam. Ela obteve a pontuação : $h_X-Spam_score: .n O relatório de spam é:n
$h_X-Spam-report: n.nA mensagem original não foi enviada a você, mas
foi armazenada no servidor.n Se você deseja receber a mensagem, entre em contato com o
administrador do sistema, com a referêncian $message_id
finish endif

A segunda linha vai passar por todos os endereços (To, CC, BCC) de destinatários, buscando um que contenha mydomain.com. Isso garante a verificação exclusivamente em mensagens de entrada. Se o padrão casar, a mensagem original é adicionada a um arquivo local e uma notificação é enviada ao destinatário, com um novo assunto. Observe o uso de outros cabeçalhos adicionais no texto de notificação.

Agora, é hora de cuidar das mensagens com pontuação entre 4,9 e 9,9. Para isso, vamos usar outra condição que reescreve o cabeçalho do Assunto.

if $h_X-Spam_score_int is below 99
and $h_X-Spam_score_int is above 49
and foranyaddress $recipients ($thisaddress contains “@mydomain.com”)
then
headers add OldSubject “$h_Subject”
headers remove “Subject”
headers add Subject “[ SPAM ] $h_OldSubject
headers remove “OldSubject”
finish endif

A manipulação do cabeçalho ocorre no ato nos filtros do Exim. Por isso foi necessário salvar o assunto original antes de usá-lo no novo.

Considerações finais

O Exim é como um jogo de xadrez: aprende-se com facilidade, mas leva-se uma vida para dominar. O SpamAssassin também é assim. Por isso, escrever um artigo abrangente cobrindo todas as possibilidades é quase impossível. O que eu tentei fazer foi dar algumas orientações introdutórias para a configuração de ambos no Debian GNU/Linux. A idéia é abrir seu apetite. Se você pretende implantar um servidor Exim com o SpamAssassin e outros recursos que eu não mencionei, como usuários virtuais, verificação antivírus e antimalware, dentre outros, sugiro que você pesquise um pouco antes de começar. O site do Exim tem uma documentação abrangente, mas que talvez não seja muito adequada aos principiantes. Seria melhor começar pelo https://www.exim-new-users.co.uk.

Bibliografia

[1] Dê uma olhada no Courier IMAP, no Cyrus, no Qpopper e outros para servidores POP3 e IMAP.

[2] Experimente o fetchmail para baixar email de outros servidores e repassá-los para entrega local pelo Exim. Os dois trabalham muito bem juntos.

Leia também:

Previna-se contra o spam com o Exim + greylistd, parte 1

Os meios tradicionais de proteção anti-spam envolvem o uso de regras de detecção bayesianas (geralmente com o SpamAssassin) nas mensagens depois delas serem aceitas pelo seu servidor. A maioria dos administradores de sistemas encarregados de servidores de email já tiveram que lidar com as constantes reclamações de usuários que perguntam: “você não pode impedir que esses spams sejam enviados?” Claro que você não pode impedir que alguém envie uma mensagem, mas pode impedir que essa mensagem seja aceita. É aí que entra a greylist, ou lista cinza. Por Ryan Cartwright

Créditos a Ryan Cartwrighthttps://www.freesoftwaremagazine.com
Tradução por Roberto Bechtlufft <robertobech at gmail.com>

Ver Mais

Postagem relacionada