O mailman / exim pode rejeitar postagens de não membros no momento da conexão?

1

Estou usando o Mailman com o Exim. Quando um não-membro publica em uma lista de discussão, o Mailman pode ser configurado de qualquer uma das maneiras a seguir, cada uma com um problema:

  1. Aceite - isso distribui spam para todos os membros da lista.
  2. Descarte-a silenciosamente - isso é frustrante e confuso para as pessoas que enviam e-mails de um endereço secundário, sem perceber que não são elas que estão inscritas.
  3. Guarde-o para moderação - isso cria uma carga de trabalho significativa para o moderador filtrar o spam que procura os poucos spams. Se o moderador se retrair, estamos efetivamente de volta no caso (2).
  4. Rejeite-a com uma mensagem de devolução - isso cria spam com dispersão de dados.

Parece-me que a melhor opção seria fazer a mesma coisa que o Exim faz quando alguém tenta enviar um email para um endereço inexistente: rejeite-o na hora da conexão SMTP com um código de erro. Dessa forma, os usuários reais serão informados sobre o problema enviando o MTA, enquanto o spam com um remetente falsificado não criará backscatter. É possível configurar o Exim para consultar o Mailman dessa maneira e rejeitar os lançamentos de listas de não membros no horário SMTP?

    
por Mike Shulman 17.04.2015 / 19:37

1 resposta

1

Isso é certamente possível. Apenas para lhe dar uma dica: você pode usar $ run e $ runrc na ACL no estágio rcpt. Veja a seção 5. depois de "$ {run ..." no link . Você tem que escrever um script, no entanto, que invoca "lista_memória lista de discussão " ou você pode encontrar o comando "withlist" inspirando ...

Outra abordagem seria: Ter um arquivo por lista pronto (gerado por um script), que contém todos os membros de uma lista. Em seguida, use uma pesquisa na sua instrução ACL para procurar o endereço do remetente nesse arquivo. O núcleo do script seria algo como:

while read -r list; do
   list_members "$list" > "$EXIM_HOME/mm-lists/$list"
done <<< "$(list_lists -b)"

A ACL correspondente pode ser algo como:

deny
   domains = +local_domains
   condition = ${if exists {MAILMAN_HOME/lists/$local_part/config.pck}{1}{0}}
   ! senders = ${lookup{$sender_address}lsearch{CONFDIR/mm-lists/$local_part}{$sender_address}}
   message = Only list members are allowed to post.

Mas há problemas com esse mecanismo, como problemas de corrida ao reescrever os arquivos que contêm os membros, provavelmente problemas de segurança, asf.

Eu não tentei o código acima e não sei se isso realmente funciona. É só para você ter uma ideia do que tentar.

Sua motivação precisa de alguma correção: Você não evita rejeições para endereços de remetentes forjados ao decidir se o tempo SMTP aceita uma mensagem ou não. Você simplesmente não assume a responsabilidade de entregar a mensagem de rejeição, você deixa isso para o MTA de envio. O envio de retornos para endereços forjados é difícil e pode levar a mensagens congeladas, o que não é desejável, mas provavelmente é motivação suficiente para tentar o que você estava perguntando.

    
por 03.07.2016 / 02:43