Greylisting baseado em GeoIP com Exim?

2

Eu tenho usado Sendmail junto com milter-greylist por muitos anos em vários sites.

milter-greylist tem suporte para a definição de regras de greylisting baseadas em pesquisas de banco de dados GeoIP. Isso é muito conveniente para empresas que não fazem negócios internacionalmente. Quase todo o spam é enviado de endereços IP externos. Não importa se o endereço de e-mail legítimo (ham) de endereços externos está atrasado. E-mail local deve chegar sem atrasos, assim greylisting é ignorado por um par de códigos de país. Além disso, se o registro SPF corresponder ou o IP estiver em uma lista de desbloqueio, a lista cinza será ignorada. Isto é muito simples de implementar em greylist.conf com o gancho milter em sendmail.cf . Também é bom para os recursos do servidor de e-mail porque a maioria do spam é descartado antes mesmo de chegar ao servidor e, portanto, o carregamento do sistema é causado pelas soluções de filtragem com base em spamassassin e / ou dspam mais abaixo o caminho de entrega é muito menor.

Agora, para a verdadeira questão:

Como posso implementar uma lista cinza semelhante à GeoIP com Exim ?

Eu tenho uma nova responsabilidade de cuidar de outro servidor de e-mail que por acaso executa Exim e recebe um grande volume de spam. Eu não sinto como re-implementar o seu sistema de entrega de e-mail a partir do zero, mas eu definitivamente preciso fazer algo sobre a carga causada por seus volumes de spam. Infelizmente Exim não parece ter interface milter. Também não consegui localizar soluções greylisting com suporte a GeoIP para o Exim. Eu sou um noob completo com Exim (eu posso fazer tudo com macros sendmail.cf e sendmail m4).

Eu ficaria feliz se a implementação desse recurso fosse possível usando apenas a sintaxe do arquivo de configuração do exim. Nesse caso, eu tomaria o esforço de aprendê-lo e possivelmente começaria a usar o Exim em outros sites também.

    
por snap 05.09.2011 / 10:14

3 respostas

1

Estou respondendo a minha própria pergunta agora que tenho uma solução que eu gosto de mim mesmo.

O greylisting propriamente dito pode ser implementado apenas com as listas de controle de acesso do Exim, ou um auxiliar de lista cinza externo pode ser conectado às ACLs. Existem várias abordagens para isso, documentadas em outro lugar.

A lista cinza é normalmente implementada em listas de controle de acesso e, portanto, é fácil adicionar alguma pesquisa de endereço IP externo na ACL para controlar o comportamento de lista cinza (por exemplo, para ignorar lista cinza de acordo com uma pesquisa de código de país).

Existem várias alternativas para obter o código do país:

  • Pesquisa DNSBL usando, por exemplo, o link (como na resposta do mailq).
  • Importe algum banco de dados GeoIP em um banco de dados SQL e faça uma consulta SQL a partir da ACL.
  • Implemente a pesquisa do GeoIP usando um dos vários módulos GeoIP perl e conecte-o à ACL do Exim com a interface perl.
  • Use uma biblioteca dlfunc que implementa a pesquisa do GeoIP na ACL.

Eu pessoalmente escolhi a última opção, pois é mais eficiente e não depende de recursos externos. Implementei uma nova biblioteca dlfunc para essa finalidade, já que nenhuma das várias existentes tinha suporte a IPv6. Minha implementação com exemplos simples está disponível em: link . Ao implementar isso, aprendi sobre as ACLs do Exim e descobri que elas são extremamente eficientes para implementar qualquer tipo de política de aceitação de e-mail.

Agora é fácil pular a lista cinza para determinados países adicionando uma regra ACL antes das regras de lista cinza:

warn    set acl_c_geoip_country_code = \
        ${dlfunc{/usr/local/lib/exim4/exim-geoipv6-dlfunc.so}\
        {geoip_country_code}{$sender_host_address}}

accept  condition = ${if inlist{$acl_c_geoip_country_code}{FI:SE:EE}}

As versões do Exim anteriores à 4.77 não possuem a sintaxe inlist{ . O mesmo pode ser alcançado alterando a segunda regra da seguinte forma:

accept  condition = ${if forany{FI:SE:EE}{eq{$item}{$acl_c_geoip_country_code}}}
    
por 04.07.2012 / 14:17
0

De longe, a melhor maneira de gerenciar spam é por filtragem bayesiana. Embora você possa obter benefícios transitórios aplicando outras abordagens antes de aplicar os filtros bayesianos, o sucesso da filtragem bayesiana depende de ter um grande volume de spam e ham para modelar - portanto, se você começar a negar e-mails com base no endereço IP, perderá em detecção a longo prazo. OTOH deve ser possível sinalizar a mensagem em vez de apenas negá-la.

SPF e RBLs também são formas comprovadas de evitar spam. E apoiado por spamassassin (juntamente com filtragem bayesiana e outros).

Você modelou seus dados para ver se adicionar pesquisa de país melhorará a detecção de spam? Comparado com uma instalação de spamassassin bem configurada?

Se você precisa seguir esse caminho ...

Escrever um milter é fácil - mas o IIRC, o Exim não suporta milters.

Tentar mapear todos os endereços IP permitidos como ACLs Exim seria muito difícil.

Portanto, a maneira mais prática de implementar isso seria usar um MDA que suporte filtros de injeção de cabeçalho (por exemplo, procmail), que então alimenta o spamassassin.

    
por 05.09.2011 / 16:25
0

Isso só ajuda um pouco, mas existem serviços GeoIP que são consultáveis via DNS (como DNSBLs). Talvez você possa usá-lo como base para tomar decisões com base no resultado.

Veja, por exemplo, link

    
por 05.09.2011 / 16:59