rspamd Whitelis/Blacklist por domínio antes da filtragem

rspamd Whitelis/Blacklist por domínio antes da filtragem

como infelizmente não estou recebendo nenhuma resposta no fórum de discussão do GitHub do rspamd, talvez alguém aqui tenha experiência com o modo de pré-filtro rspamd.

Estou tentando fazer com que o rspamd aceite qualquer e-mail vindo de uma determinada lista de domínios, não importa o quanto ele pense que é spam. Infelizmente, isto é necessário porque muitas pessoas pensam que é uma boa ideia manipular os remetentes ou fazer outras coisas obscuras, geralmente usadas por pessoas que têm algo a esconder. Isso deve ser mais fácil de realizar com o modo de pré-filtro, já que eles devem ser executados antes mesmo de avaliar se o e-mail é spam ou não. Como um bônus adicional, isso também pode ser usado para uma lista de bloqueio se alguns e-mails de spam notórios simplesmente não forem reconhecidos. É claro que o rspamd pode aprender o que deve ser spam e o que não deve ser, mas isso não parece ser eficaz o suficiente. Além disso, nos registros, não consigo entender por que ele se recusa a aplicar os pré-filtros para a maioria dos domínios, então talvez um de vocês tenha uma sugestão.

No momento estou usando a configuração multimapa para configurar os pré-filtros para a lista de aceitação e bloqueio. Então, em local.d/multimap.conf eu tenho:

ACCEPTLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/acceptlist.sender.domain.map";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      score = 10.0;
      action = "add_header"; # Prefilter mode
  }

Os dois comentários no topo de cada bloco são de quando tentei filtrar o cabeçalho e depois o cabeçalho from, mas como você pode filtrar diretamente, tentei este, mas não ajuda. Além disso, tentei adicionar os arquivos no mapa apenas com o caminho e arquivo:///caminho/para/arquivo, ainda sem sucesso. O rspamd.log também não mostra nada de útil (o único erro que aparece constantemente é sobre não conseguir carregar a chave dkim, pois não consigo desabilitar esse módulo). Copiar esta configuração para overwrite.d também não ajuda. Alguma ideia?

Estou no Debian 11 executando o rspamd 3.4-1~bullseye direto do repositório rspamd.

Responder1

Minha última resposta ajuda bastante, mas no geral encontrei alguns problemas ainda sem solução:

por algum motivo, ele ainda adiciona ACCEPTLIST_SENDER_DOMAINum domínio que excluí há algum tempo do arquivo de mapa. Até reiniciei o rspamd várias vezes, mas ele se recusa a esquecer esse domínio. E não consigo encontrar nenhum cache que possa excluir que possa ajudar.

Além disso, o multimapa deve aceitar e-mails vindos de domínios específicos, não importa o que aconteça. Mas somente quando o domínio está no From:cabeçalho, em nenhum outro caso. O domínio que adicionei falsamente à lista de permissões anteriormente era o domínio da nossa lista de e-mails. Portanto, o rspamd nunca deveria ter aceitado esses e-mails com base no multimapa, já que nenhuma lista de discussão nossa substituirá o From:cabeçalho por seu próprio endereço. Mesmo assim, muitos e-mails de spam ainda são marcados como spam, mesmo que, em teoria, devessem ser excluídos pelo false ACCEPTLIST_SENDER_DOMAIN. Por enquanto, adicionei novamente o prefilter=true; para a configuração do multimapa, talvez isso ajude. Mas apesar de tudo, o rspamd ainda não se comporta conforme o esperado.

EDIT: para resolver o primeiro problema, voltei para verificar explicitamente o From:cabeçalho, pois type:from verificará o envelope antes de verificar isso, então isso deve ser muito mais confiável (é claro que é bastante simples modificar o cabeçalho From, mas Posso contar os incidentes que aconteceram nos últimos anos que não foram detectados pelo nosso principal filtro de spam por um lado):

ACCEPTLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

Mas, por algum motivo, os e-mails têm o seguinte em seu cabeçalho quando esses símbolos são acionados:

X-Rspamd-Pre-Result: action=no action;
    module=multimap;
    Matched map: ACCEPTLIST_SENDER_DOMAIN

A ação neste caso deve ser claramente "aceitar", conforme indicado na configuração. É assim que aparece no dump de configuração:

multimap {
    ACCEPTLIST_SENDER_DOMAIN {
        action = "accept";
        map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
        description = "Sender domain is on allowed";
        symbol = "ACCEPTLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    BLOCKLIST_SENDER_DOMAIN {
        action = "add_header";
        map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
        description = "Sender domain is on blocked";
        symbol = "BLOCKLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    [...]
}

Responder2

Não acho que deva haver aspas em torno do valor do pré-filtro:

prefilter = true;

Além disso, configurar uma pontuação em um mapa de pré-filtro pode ser inútil, pois a ação já foi aplicada.

Espero que ajude !

Responder3

Isso deve funcionar. Consegui implementar exatamente o que você deseja. Meu local.d/multimap.conf contém:

Para aceitar e-mails de domínios específicos

WHITELIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/whitelist.sender.domain.map";
      symbol ="WHITELIST_SENDER_DOMAIN";
      description = "WHITELIST map for SENDERS Domain - Action accept";
      action = "accept";
  }
# For rejecting domains
BLACKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/blacklist.sender.domain.map";
      symbol ="BLACKLISTED_DOMAIN";
      description = "Blacklist map for Senders Domain - Action reject";
      action = "reject";
  } 

Você precisa criar os arquivos de mapa mencionados em local.d com exatamente o mesmo nome e preenchê-los com os nomes de domínio que deseja filtrar. Apenas um nome de domínio por linha! Os arquivos devem ter permissão de leitura.

Além disso, observe que se uma ação for definida em uma mensagem, a maioria das verificações adicionais deverão ser ignoradas.

Responder4

@cz.steve Agora reconstruí tudo para usar o rspamd, já que o SpamAssassin também não estava funcionando da maneira que eu queria. Agora, as mudanças permitem a inclusão na lista branca e negra, embora não exatamente da maneira que eu pretendia que funcionasse. O que eu queria era que ele correspondesse aos domínios fornecidos apenas com o que está no From:cabeçalho, e não em todos os outros cabeçalhos também. É possível conseguir isso?

No momento minha configuração é esta:

ACCEPTLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

informação relacionada