debian의 exim4: -bh로 테스트할 때는 이 ACL이 작동하지만 실제 사용에서는 작동하지 않는 이유는 무엇입니까?

debian의 exim4: -bh로 테스트할 때는 이 ACL이 작동하지만 실제 사용에서는 작동하지 않는 이유는 무엇입니까?

나는 local_acl_check_data가 From: 및 To:와 동일한 주소를 사용하여 거부하도록 하는 일반적인 스패머 정책을 가지고 있지만 스팸이 덜한 소스(예: Yahoo 그룹)가 이를 수행하므로 화이트리스트도 사용합니다. 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

문제는 내가 테스트할 때:


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

예상대로 작동합니다. 첫 번째 메시지는 화이트리스트에서 yahoogroups.com을 찾았기 때문에 수락되지만 두 번째 메시지는 거부됩니다. 그러나 실제로 yahoogroups.com 이메일은 스패머와 함께 이 ACL에 의해 거부됩니다. 저는 4.72-6을 사용하고 있는데 지난 몇 년간 사용해 본 모든 버전에서 이런 일이 일어났습니다. 아이디어가 부족해요.

요청에 따라 exim4의 로그는 다음을 거쳐야 하는 메시지를 거부했습니다.

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@ return.groups.yahoo.com> DATA 이후 거부됨: 스팸 거부:[이메일 보호됨]그리고 다음에서 :[이메일 보호됨]
봉투 발신자: <sentto-15991578-2122-1298645513-jc=example.com@returns.groups.yahoo.com>
봉투 수신자: <[이메일 보호됨]>
--
  MIME 버전: 1.0
메시지 ID:
  메일링 리스트: 목록[이메일 보호됨];만지다[이메일 보호됨]
  배송 대상: 메일링 리스트[이메일 보호됨]
  목록 ID: <PetalumaFreecycle.yahoogroups.com>
  우선순위: 일괄
  구독 취소 목록: <mailto:[이메일 보호됨]>
  날짜: 2011년 2월 25일 14:51:53 -0000
에서:[이메일 보호됨]
에게:[이메일 보호됨]
  주제: [페탈루마 프리사이클] Abstract Number 2122
  X-Yahoo-Newman-Property: 그룹-다이제스트-trad-m
R 답장: "답변 없음"<[이메일 보호됨]>
  콘텐츠 유형: 텍스트/일반; charset=ISO-8859-1
  콘텐츠 전송 인코딩: 견적 인쇄 가능

이것이 첫 번째 테스트에서 내 testacl 스크립트가 보여주는 내용입니다.

>>> ACL "acl_check_data" 사용
>>> "수락" 처리
>>> 발신자 확인 = ${존재하는 경우{/etc/exim4/local_sender_whitelist}{/etc/exim4/local_sender_whitelist}{}}
>>> "yahoogroups.com"의 yahoogroups.com? 예("yahoogroups.com"과 일치)
>>>[이메일 보호됨]"/etc/exim4/local_sender_whitelist"에 있습니까? 예(/etc/exim4/local_sender_whitelist의 "yahoogroups.com"과 일치)
>>>수락: 조건 테스트 성공
로그: 1PuxAz-0005jZ-B0 <=[이메일 보호됨]H=n52c.bullet.mail.sp1.yahoo.com (테스터) [66.163.168.186] P=smtp S=380
250 확인 ID=1PuxAz-0005jZ-B0

답변1

나는 이 패턴을 발견했지만 많은 것이 이해되고 있다고 생각하지 않습니다. 이 시도

  경고하다
    message = 스팸으로 식별된 메시지입니다. 이것이 잘못되었다고 생각하시면,\
        우체국장에게 연락하세요
    log_message = 보낸 사람과 받는 사람이 ${h_to:}인 스팸 가능성
    !senders = ${if {CONFDIR/local_sender_whitelist}\
                          {CONFDIR/local_sender_whitelist} {}}
    조건 = ${if eqi{$h_from:}{$h_to:}{true}}
    제어=동결

control = freeze규칙을 테스트할 때 검토를 위해 메시지를 저장하는 경우가 많습니다. 충분히 정확하다고 판단되면 거부 규칙으로 변경하겠습니다.

편집: 내 이메일 데이터베이스에서 이 규칙을 테스트했습니다. DNS 블랙리스트 로 사용하면 zen.spamhaus.org거의 모든 사례(483개 중 467개)를 포착할 수 있습니다. 회색 목록에는 나머지 대부분(16개 중 11개)이 포함됩니다. 테스트를 통과한 메시지 5개를 찾았습니다. 이 중 3개(60%)는 합법적인 이메일이었습니다. 다른 것들은 호스트 이름이나 2차 도메인인 helo 이름을 가지고 있습니다. helo 이름이 최소한 세 번째 수준 도메인인지 확인하는 조건을 추가하면 규칙이 상당히 안전해집니다. 테스트 중:

    조건 = ${if eq{${extract{3}{.}{$sender_helo_name}}}{}{true}}

답변2

Exim은 "from"을 return.groups.yahoo.com 도메인에 있는 봉투 보낸 사람 주소로 간주합니다. 해당 도메인(완전히 groups.yahoo.com은 작동하지 않고 yahoo.com은 작동하지 않음)을 local_sender_whitelist에 넣으면 ACL이 작동했습니다.

보낸 사람: 주소와 동일한 yahoogroups.com의 봉투 보낸 사람 주소를 사용했기 때문에 테스트 중에 작동했습니다. 이것이 사실인지 확인하기 위해 야후 그룹 이메일을 확인하지 마십시오.

답변3

귀하는 해결책을 찾았고 귀하의 ACL에 효과가 있을 수 있지만 귀하의 특정 사용 사례에서는 문제가 되지 않더라도 다른 사람들이 이 문제를 겪을 수 있기 때문에 이것을 추가하고 싶었습니다.

exim -bh많은 것을 확인하지만 다른 호스트에 연결하지 않습니다. ACL이 실패하거나 일시적으로 실패하고 주석 확인이 실패하는 경우 를 사용해야 합니다 -bhc.

관련 정보