BOMBOLOM.COM

(correio) Prevenção anti SPAM usando o Postix

O spam (ou mensagens de correio electrónico não solicitadas) é um problema com que nos debatemos todos os dias. Para combater esta praga podemos utilizar várias técnicas, quer isoladamente quer em conjunto. Vamos neste artigo fazer um apanhado destas técnicas e ver a forma de implementa-las no servidor Postfix.

Por exemplo é comum:

  1. Aceitar apenas correio destinado aos nossos domínios. Ou seja não termos o servidor a funcionar como Open Mail Relay. Nos tempos que correm é fundamental termos o servidor assim configurado.
  2. Rejeitar todas as mensagens que sejam mal formadas, as mensagens de spam são normalmente enviadas a partir de clientes construídos para o efeito, este clientes têm frequentemente erros de implementação ou então não seguem rigorosamente os RFCs relevantes por motivos de espaço (o spam é enviado na maior parte dos casos de PCs comprometidos por virus, trojans ou outro tipo de malwere). Assim ao rejeitar estas mensagens temos quase a certeza absoluta que não estamos a rejeitar correio proveniente de fontes legítimas. Os clientes de mail como o KMail, Thunderbird e até o Outlook, seguem razoavelmente os RFCs, pelo que as mensagens destes clientes são aceites. Este método é seguro.
  3. Rejeitar mensagens provenientes de servidores que não tenham um registo DNS MX válido, ou que o domínio não seja FQDN. Este método também é bastante seguro quanto à existência de falsos positivos.
  4. Rejeitar correio proveniente de máquinas marcadas como origem de spam pelos sistemas DNSB, por exemplo http://www.spamcop.net/, ou http://dsbl.org/. Este método é bastante eficaz, rejeita uma quantidade apreciável se spam de uma forma relativamente segura.
  5. Utilizar Greylisting. Este é um método bastante astuto para detectar correio não solicitado. Consiste basicamente em, numa primeira fase, rejeitar o correio proveniente de endereços IP desconhecidos. Esta rejeição é feita enviando para o servidor de origem um erro de falha de entrega temporária (erro smtp 4xx).

    Um servidor de correio legítimo, ao receber esta mensagem de erro, vai voltar a tentar enviar a mensagem de novo ao fim de alguns minutos. Se isso acontecer o sistema de Greylisting acrescenta a uma base de dados o endereço IP do servidor e aceita a mensagem.

    Isto é muito eficaz porque os sistemas de envio de spam normalmente não implementam a gestão de correio devolvido e mesmo que o façam, na maior parte dos casos, os sistemas comprometidos que enviam o spam estão por de trás de firewalls que não aceitam ligações para os sistemas de mail.

    Juntando a isto o facto de, cada vez mais, os ISPs incluirem nas suas políticas aceitáveis de utilização termos que restrigem o envio de correio em massa, este método é por ventura o mais eficaz para rejeitar correio não solicitado, quer em termos de fiabilidade, quer pelo facto de ter poucos falsos positivos.

    Notar também, que muitas vezes, o período de tempo que o servidor que envia a mensagem leva para a voltar a enviar, é suficiente para estes serem listados nas DNSBs.

  6. Rejeitar mensagens usando produtos de classificação como o SpamAssassin, ou o Bogofilter. Estes métodos são relativamente eficazes, têm no entanto alguns problemas que os métodos anteriores não têm:
    • Estes sistemas, para serem eficazes têm de ser treinados periodicamente com mensagens que de spam, quer legítimas. Se não fizermos este treino, ao fim de algum tempo a fiabilidade na detecção de spam vai-se degradando;
    • O risco de falsos positivos é muito mais alto que os anteriores;
    • São muito mais exigentes em termos de necessidades de memória e processador, se tivermos um site com alguma dimensão (eu diria que a partir de 30 mensagens por minuto necessitamos de pelo menos 512MB e um processador relativamente recente, do tipo P4 a 1GHz - notar que isto é produto apenas da minha experiência, não fiz medições concretas a este respeito, pelo que o no seu caso estas necessidades poderão ser diferentes);

    Neste site já fizemos várias referências ao Spamassassin, consulte, por favor, a lista de links relaccionados no fim deste artigo para fazer a respectiva configuração (associada ao Amavis, ou apenas para detecção de spam).

  7. Finalmente, pode-se pura e simplemente usar listas negras para rejeitar correio. Há administradores de sistemas que chegam a recusar mails provenientes de países inteiros, quando a organização em que estão inseridos não tem ligações a estes países. Não recomendo esta técnica (apesar de ser eficiente!) uma vez que, na minha opinião, subverte a lógica da Internet. Assim não vou descrever este processo neste documento.

Configuração do Postfix

A configuração do postfix para implementar as políticas de rejeição de mail listadas anteriormente é bastante simples:

Os primeiros quatro pontos da lista anterior configuram-se no /etc/postfix/main.cf fazendo a variável de configuração smtpd_recipient_restrictions igual a:

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    permit_mynetworks
    reject_unauth_destination
    reject_unauth_pipelining
    reject_invalid_hostname
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    reject_non_fqdn_recipient
    reject_unknown_recipient_domain
    reject_rbl_client bl.spamcop.net
    reject_rbl_client list.dsbl.org
    reject_rbl_client dnsbl.njabl.org
    reject_rbl_client relays.ordb.org

basta recarregar o Postfix e temos este assunto arrumado.

Greylisting

Para configurar o Greylisting, temos um pouco mais de trabalho, mas não muito.

Em primeiro lugar temos de escolher o produto que vai fazer o Greylisting, eu utilizo o Postgrey.

Em sistemas Debian e derivados, a instalação consiste no seguinte:

# apt-get install postgrey

O Postgrey funciona como um serviço, nos sistemas Debian este fica a inicializar no boot automaticamente. Se não, temos apenas de o acrescentar ao runlevel em que a máquina funciona normalmente.

A seguir temos de configurar o Postfix para utilizar este serviço. Mais uma vez, isto é feito no main.cf, na mesma variável que usámos anteriormente:

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    permit_mynetworks
    reject_unauth_destination
    reject_unauth_pipelining
    reject_invalid_hostname
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    reject_non_fqdn_recipient
    reject_unknown_recipient_domain
    reject_rbl_client bl.spamcop.net
    reject_rbl_client list.dsbl.org
    reject_rbl_client dnsbl.njabl.org
    reject_rbl_client relays.ordb.org
    check_policy_service inet:127.0.0.1:60000

É claro que convém consultar a página de manual do Postgrey (man postgrey).

Conclusão

Com este simples procedimento consegue-se diminuir de uma forma incrível a quantidade de spam recebido pelo nosso servidor. Julgo que todos os provedores de serviço de correio, quer a nível de servidor caseiro, empresarial ou de ISP, deveriam aplicar no mínimo as técnicas descritas neste artigo. O nível de spam iria diminuir consideravelmente.

20.09.2007 | Ler mais | Comentários | Tags , , , ,

Voltar à Página principal | Made with PyBlosxom