exim4 no debian: por que essa ACL funciona ao testar com -bh, mas não no uso real?

1

Eu tenho local_acl_check_data para rejeitar a típica tática de spammer de usar o mesmo endereço de From: e To :, mas como algumas fontes menos spam, como o Yahoo Groups, fazem isso, também estou usando uma lista branca . Aqui está a ACL:


# block spammers who use the same "from" and "to" address
accept
    senders = ${if exists{CONFDIR/local_sender_whitelist}\
                   {CONFDIR/local_sender_whitelist}\
                   {}}
deny
    condition = ${if eqi{${address:$h_from:}}{${address:$h_to:}}{true}{false}}
    log_message = rejecting spam with to:${address:$h_to:} and from:${address:$h_from:}
    message = Message identified as spam. If you think this is wrong, get in touch with postmaster

O problema é quando eu testo com:


jcomeau@tektonic:~$ cat bin/testacl 
exim4 -bh 66.163.168.186 <<EOT
helo tester
mail from: [email protected]
rcpt to: [email protected]
data
from: [email protected]
to: [email protected]
subject: should be ok

this one should not reject
.
mail from: [email protected]
rcpt to: [email protected]
data
from: [email protected]
to: [email protected]
subject: should reject

this one should be rejected
.
quit
EOT

Funciona como esperado: a primeira mensagem é aceita porque encontrou yahoogroups.com na lista branca e a segunda foi rejeitada. Mas em operação real, os e-mails do yahoogroups.com são rejeitados por essa ACL junto com os spammers. Estou usando 4.72-6, e isso aconteceu para todas as versões que tenho usado nos últimos anos. Eu fiquei sem ideias.

Conforme solicitado, o log do exim4 rejeita uma mensagem que deveria ter passado:

jcomeau@tektonic:~$ grep -C2 Freecycle /var/log/exim4/rejectlog
2011-02-25 09:52:00 1Psz1U-00020g-79 H=n52c.bullet.mail.sp1.yahoo.com [66.163.168.186] F=<sentto-15991578-2122-1298645513-jc=example.com@returns.groups.yahoo.com> rejected after DATA: rejecting spam with to:[email protected] and from:[email protected]
Envelope-from: <sentto-15991578-2122-1298645513-jc=example.com@returns.groups.yahoo.com>
Envelope-to: <[email protected]>
--
  MIME-Version: 1.0
I Message-ID: 
  Mailing-List: list [email protected]; contact [email protected]
  Delivered-To: mailing list [email protected]
  List-Id: <PetalumaFreecycle.yahoogroups.com>
  Precedence: bulk
  List-Unsubscribe: <mailto:[email protected]>
  Date: 25 Feb 2011 14:51:53 -0000
F From: [email protected]
T To: [email protected]
  Subject: [Petaluma Freecycle] Digest Number 2122
  X-Yahoo-Newman-Property: groups-digest-trad-m
R Reply-To: "No Reply"<[email protected]>
  Content-Type: text/plain; charset=ISO-8859-1
  Content-Transfer-Encoding: quoted-printable

E aqui está o que meu script testacl mostra para o primeiro teste:

>>> using ACL "acl_check_data"
>>> processing "accept"
>>> check senders = ${if exists{/etc/exim4/local_sender_whitelist}{/etc/exim4/local_sender_whitelist}{}}
>>> yahoogroups.com in "yahoogroups.com"? yes (matched "yahoogroups.com")
>>> [email protected] in "/etc/exim4/local_sender_whitelist"? yes (matched "yahoogroups.com" in /etc/exim4/local_sender_whitelist)
>>> accept: condition test succeeded
LOG: 1PuxAz-0005jZ-B0 <= [email protected] H=n52c.bullet.mail.sp1.yahoo.com (tester) [66.163.168.186] P=smtp S=380
250 OK id=1PuxAz-0005jZ-B0
    
por jcomeau_ictx 02.03.2011 / 20:10

3 respostas

2

O "remetente", como o Exim vê, é o endereço do envelope, que estava no domínio returns.groups.yahoo.com. Uma vez que eu coloquei esse domínio (completamente; groups.yahoo.com não funciona, nem o yahoo.com) no meu local_sender_whitelist, o ACL funcionou.

Ele funcionou durante os testes porque eu usei o endereço envelope-de yahoogroups.com, o mesmo que o endereço From :. Nunca me preocupei em verificar se esse era o caso nos e-mails dos grupos yahoo.

    
por 14.03.2011 / 15:04
2

Eu notei esse padrão, mas não acho que muita coisa esteja passando. Tente isto

  warn
    message = Message identified as spam. If you think this is wrong, \
        get in touch with postmaster
    log_message = Possible spam with ${h_to:} as both from and to
    !senders = ${if exists{CONFDIR/local_sender_whitelist}\
                          {CONFDIR/local_sender_whitelist} {}}
    condition = ${if eqi{$h_from:}{$h_to:}{true}}
    control = freeze

Eu uso control = freeze para reter mensagens para inspeção quando estou testando regras. Se eu achar que é preciso o suficiente, mudo para uma regra de negação.

EDIT: Eu testei esta regra no meu banco de dados de e-mails. Usar zen.spamhaus.org como uma lista negra de DNS captura quase todos esses casos (467 de 483). A lista negra captura a maior parte do restante (11 de 16). Eu encontrei cinco mensagem passou por aqueles para testes. Destes três (60%) eram emails legítimos. Os outros tinham nomes de helo que eram nomes de host ou domínios de segundo nível. Adicionar uma condição para verificar se o nome do helo é pelo menos um domínio de terceiro nível torna a regra razoavelmente segura. Eu estou testando com:

    condition = ${if eq{${extract{3}{.}{$sender_helo_name}}}{}{true}}
    
por 03.03.2011 / 01:41
1

Você encontrou uma solução e provavelmente é válida para seu acl, mas eu só queria adicionar isso, já que é algo em que outras pessoas podem entrar, mesmo que não seja o problema em seu caso de uso específico.

exim -bh verifica muitas coisas, mas não se conecta a outros hosts. Se sua ACL falhar (ou tempfails) se suas verificações de callout falharem, você precisará usar -bhc .

    
por 15.08.2015 / 23:24

Tags