Acl

debian 上的 exim4:為什麼此 ACL 在使用 -bh 進行測試時有效,但在實際使用中無效?

  • August 15, 2015

我有 local_acl_check_data 來拒絕使用與 From: 和 To: 相同的地址的典型垃圾郵件發送者策略,但由於一些垃圾郵件較少的來源,如 Yahoo Groups,這樣做,我也使用白名單。這是 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: PetalumaFreecycle@yahoogroups.com
rcpt to: jc@example.com
data
from: PetalumaFreecycle@yahoogroups.com
to: PetalumaFreecycle@yahoogroups.com
subject: should be ok

this one should not reject
.
mail from: PetalumaFreecycle@yahoo.com
rcpt to: jc@example.com
data
from: PetalumaFreecycle@yahoo.com
to: PetalumaFreecycle@yahoo.com
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@ Returns.groups.yahoo.com> 在數據後被拒絕:拒絕垃圾郵件發件人:PetalumaFreecycle@yahoogroups.com 和來自:PetalumaFreecycle@yahoogroups.com
信封發件人:<sentto-15991578-2122-1298645513-jc=example.com@returns.groups.yahoo.com>
信封收件人:<jc@example.com>
--
MIME 版本:1.0
I 消息 ID:
郵件列表:列出 PetalumaFreecycle@yahoogroups.com;聯繫 PetalumaFreecycle-owner@yahoogroups.com
送達:郵件列表 PetalumaFreecycle@yahoogroups.com
列表 ID:<PetalumaFreecycle.yahoogroups.com>
優先級:批量
取消訂閱列表:<mailto:PetalumaFreecycle-unsubscribe@yahoogroups.com>
日期:2011 年 2 月 25 日 14:51:53 -0000
F 來自:PetalumaFreecycle@yahoogroups.com
收件人:PetalumaFreecycle@yahoogroups.com
主題:[Petaluma Freecycle] 摘要編號 2122
X-Yahoo-Newman-Property:groups-digest-trad-m
R 回复:“無回复”<notify-dg-PetalumaFreecycle@yahoogroups.com>
內容類型:文本/純文字;字元集=ISO-8859-1
內容傳輸編碼:quoted-printable

這是我的 testacl 腳本在第一次測試中顯示的內容:

>>> 使用 ACL “acl_check_data”
>>> 處理“接受”
>>> 檢查發件人 = ${如果存在{/etc/exim4/local_sender_whitelist}{/etc/exim4/local_sender_whitelist}{}}
>>> yahoogroups.com 在“yahoogroups.com”中?是(匹配“yahoogroups.com”)
>>> PetalumaFreecycle@yahoogroups.com 在“/etc/exim4/local_sender_whitelist”中?是(匹配 /etc/exim4/local_sender_whitelist 中的“yahoogroups.com”)
>>> 接受:條件測試成功
日誌:1PuxAz-0005jZ-B0 <= PetalumaFreecycle@yahoogroups.com H=n52c.bullet.mail.sp1.yahoo.com(測試人員)[66.163.168.186] P=smtp S=380
250 確定 id=1PuxAz-0005jZ-B0

正如 Exim 所看到的,“發件人”是信封發件人地址,位於域returns.groups.yahoo.com 中。一旦我將該域(完全;groups.yahoo.com 不起作用,yahoo.com 也不起作用)放入我的 local_sender_whitelist 中,ACL 就起作用了。

它在測試期間有效,因為我使用了 yahoogroups.com 的信封發件人地址,與 From: 地址相同。從不費心檢查雅虎集團的電子郵件中是否存在這種情況。

我注意到了這種模式,但不要認為有太多的通過。嘗試這個

警告
message = 被辨識為垃圾郵件的郵件。如果你認為這是錯誤的,\
與郵政局長取得聯繫
log_message = 可能帶有 ${h_to:} 的垃圾郵件作為 from 和 to
!senders = ${如果存在{CONFDIR/local_sender_whitelist}\
{CONFDIR/local_sender_whitelist} {}}
條件 = ${if eqi{$h_from:}{$h_to:}{true}}
控制=凍結

control = freeze當我測試規則時,我習慣於保存消息以供檢查。如果我發現它足夠準確,我會將其更改為拒絕規則。

編輯:我在我的電子郵件數據庫中測試了這個規則。用作zen.spamhaus.orgDNS 黑名單可以擷取幾乎所有這些情況(467 例,共 483 例)。灰名單涵蓋了其餘的大部分(16 個中的 11 個)。我發現有五條消息通過了測試。這三個 (60%) 是合法電子郵件。其他人有 helo 名稱,其中主機名或二級域。添加一個條件來檢查以確保 helo 名稱至少是第三級域使規則相當安全。我正在測試:

條件 = ${if eq{${extract{3}{.}{$sender_helo_name}}}{}{true}}

引用自:https://unix.stackexchange.com/questions/8491