Rejeitar emails com muitos destinatários Para / Cc com ACL exim

1

Estou tendo um problema com e-mails com muitos (> 20) destinatários Para ou Cc sendo enviados pelo meu servidor de e-mail. Pior ainda, essas listas de discussão atingem centenas de pessoas. As pessoas então respondem - todas causando mensagens maciças irritantes.

A educação do usuário não é uma opção (eles fazem isso de propósito). Posso filtrar essas mensagens no servidor de email? Por exemplo. com o Exim ACL.

recipient_max não é uma opção, pois isso também limitará os e-mails de Bcc que devem ser enviados.

    
por dtech 22.01.2014 / 23:48

1 resposta

1

Primeiro, é importante que você entenda que um cliente pode enviar um e-mail com 1 endereço no cabeçalho "Para", mas na verdade enviá-lo para 1.000 pessoas, se descobrir como abusá-lo da maneira correta. A contagem do número de endereços de e-mail no cabeçalho Para: ou Cc: não garante que você bloqueie os e-mails que um cliente está enviando. Você só bloqueará seus e-mails se eles abusarem do sistema de maneira ingênua. No entanto, você afirmou que eles estão apenas colocando tudo no campo Para (ou seja, a maneira ingênua), portanto, o restante dessa resposta assume que essa é a forma como os dados estão sendo enviados ao servidor Exim.

Agora, para responder à sua pergunta diretamente como você pediu: Na ACL DATA (somente na DATA ACL!), você pode verificar o número de endereços de e-mail no cabeçalho Para ou Cc por um processo em duas etapas. Para testar esses cabeçalhos, você o acessa com $ h_To: e $ h_Cc: O cólon final é obrigatório. Vamos supor que o cabeçalho To: seja:

"Org user" <[email protected]>,<[email protected]>,"Todd Lyons" <[email protected]>

Com este exemplo, mostrarei o que cada etapa do processo de duas etapas faz:

# Step 1: To header converted to a (colon-separated) list
$ exim -be '${addresses:"Org user" <[email protected]>,<[email protected]>,"Todd Lyons" <[email protected]>}'
[email protected]:[email protected]:[email protected]

# step 2: Now count the number of list items
$ exim -be '${listcount:${addresses:"Org user" <[email protected]>,<[email protected]>,"Todd Lyons" <[email protected]>}}'
3

Com as versões atuais do exim (4.82), a aparência final da sua DATA ACL será algo assim:

deny     message = Too many recipients
         condition = ${if >{ ${listcount:${addresses:$h_To:,$h_Cc:}} }{10} {yes}{no}}

Se você estiver usando uma versão mais antiga, como o que está no Debian estável, você pode usar uma versão mais antiga que itera na lista e incrementa um contador:

deny     message = Too many recipients
         condition = ${if >{ ${reduce {${addresses:$h_To:,$h_Cc:}} {0} {${eval:$value+1}}}} {10} {yes}{no}}

Note que em ambos os casos acima, a parte {yes} {no} é supérflua. O retorno da instrução $ {if ...} sempre será verdadeira ou falsa, então, com isso em mente, você pode deixá-la se quiser. Eu prefiro explicitamente colocá-lo porque torna mais legível (para mim e para qualquer um que possa me seguir e ter que ler este código).

    
por 23.01.2014 / 00:56