debian 上的 exim4:為什麼此 ACL 在使用 -bh 進行測試時有效,但在實際使用中無效?
我有 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.org
DNS 黑名單可以擷取幾乎所有這些情況(467 例,共 483 例)。灰名單涵蓋了其餘的大部分(16 個中的 11 個)。我發現有五條消息通過了測試。這三個 (60%) 是合法電子郵件。其他人有 helo 名稱,其中主機名或二級域。添加一個條件來檢查以確保 helo 名稱至少是第三級域使規則相當安全。我正在測試:條件 = ${if eq{${extract{3}{.}{$sender_helo_name}}}{}{true}}