Como posso explicar ao dspam que o usuário “brandon” é o mesmo que “brandon @ mydomain”?

3

Estou usando dspam para filtragem de spam, executando o daemon "dspamd" no Ubuntu 9.10 e, em seguida, configurando uma regra Postfix que diz :

smtpd_recipient_restrictions =
    ...
    check_client_access pcre:/etc/postfix/dspam_everything
    ...

onde o mapa PCRE se parece com isto:

/./ FILTER lmtp:[127.0.0.1]:11124

Isso funciona bem e significa que todos os usuários do meu sistema recebem todos os seus e-mails, independentemente de o "dspam" achar que são inocentes ou não, e têm a opção de filtrar suas decisões ou ignorá-las.

O problema surge quando quero treinar o dspam usando meus arquivos de e-mail. Depois de ler sobre o comando "dspam", tentei isso nos arquivos nas caixas Caixa de Entrada e de spam (que datam de quando eu estava usando outra solução de filtragem):

for file in Mail/Inbox/*; do cat $file | dspam --class=innocent --source=corpus; done
for file in Mail/spam/*; do cat $file | dspam --class=spam --source=corpus; done

O sintoma que notei depois de fazer tudo isso foi que o dspam era horrível na classificação de spam - não encontrei nenhum! O problema, quando eu rastreei, foi que eu estava treinando o usuário "brandon" com os comandos acima, mas o e-mail recebido foi comparado com o nome de usuário "brandon @ mydomain", então ele estava rodando em um banco de dados de treinamento completamente vazio !

Então, o que posso fazer para que os comandos acima realmente treinem meu endereço de e-mail totalmente qualificado em vez do meu nome de usuário simples? Eu gostaria de evitar ter que executar "dspam" como root com uma opção "--user". Eu teria esperado que os arquivos de configuração "dspam" tivessem um atributo "append_domain" ou algo com o qual para decorar nomes de usuários locais com um domínio de e-mail apropriado, mas eu não consigo encontrar tal coisa.

Quando eu costumava usar o backend do Berkeley DB para "dspam", resolvi esse problema criando um link simbólico de um dos bancos de dados para o outro. :-) Mas essa solução acabou morrendo porque o backend do BDB não é thread-safe, então agora eu mudei para o back-end do PostgreSQL e preciso de uma maneira de resolver o problema lá. E, não, a tabela onde mantém nomes de usuários tem uma restrição UNIQUE que me impede de listar ambos os nomes de usuários como mapeamento para o mesmo ID. : -)

    
por Brandon Rhodes 21.11.2009 / 05:05

1 resposta

1

A solução simples é configurar um grupo de inoculação compartilhado

mim: brandon, brandon @ mydomain.com

/ var / spool / dspam / group - em uma instalação debian

Acredito que o padrão é ativar grupos de inoculação / grupos compartilhados no debian, caso em que você só precisa criar o arquivo de grupo no diretório do usuário e ele será usado automaticamente.

    
por 22.03.2010 / 04:49