iT邦幫忙

0

Postfix + header_checks

前陣子把郵件轉送機制做起來之後
接著要應付的就是垃圾信的問題
先前有試過把SpamAssassin和Amavis掛上
但好像不是那麼容易搞定 (這兩個套件好像很依賴 CPAN 的模組?)
所以就想說先暫時用 header_checks 和 body_checks 頂一下
在參考一些資料之後就開始實作了
但最後的結果卻是出乎我的意料
目前遭遇的問題如下:

  1. /var/log/maillog 裡沒有任何 header_checks, body_checks 比對成功的記錄
  2. 為了避免正常信因誤判遭 DROP 或 REJECT, 所以 header_checks, body_checks 的所有 Rule 都是使用 REDIRECT, 但這兩天從 /var/log/maillog 來看, 幾乎所有信件都被 REDIRECT (可參閱後段所附的訊息片段)

目前的郵件系統架構如下:

  1. Postfix - Mail Gateway: 負責接收外來的郵件, 以及基本的垃圾信過濾, 最後把郵件轉送至 Mail Server
  2. Exchange Server: 負責接收 Postfix 轉過來的信, 並將信件送到使用者的郵件信箱 (所有的郵件帳號都在這裡)

main.cf檔部份內容

smtpd_client_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_rbl_client relays.ordb.org,
 reject_rbl_client dsn.rfs-ignorant.org,
 reject_rbl_client spam.ecenter.idv.tw
 #check_client_access regexp:/etc/postfix/client_checks

smtpd_sender_restrictions = permit_mynetworks,
 #check_sender_access regexp:/etc/postfix/sender_access,
 reject_non_fqdn_sender,
 #reject_unknown_reverse_client_hostname,
 reject_unknown_sender_domain

smtpd_recipient_restrictions = permit_sasl_authenticated,
 permit_mynetworks,
 reject_unauth_destination

header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks

header_checks的部份內容:

/^From:.*Free Sample/ REDIRECT 垃圾郵件暫存信箱
/^From:.*Enlargement/ REDIRECT 垃圾郵件暫存信箱
/^From:.*Penis Growth/ REDIRECT 垃圾郵件暫存信箱
...............(略)
/^Subject:.*Free Sample/ REDIRECT 垃圾郵件暫存信箱
/^Subject:.*Enlargement/ REDIRECT 垃圾郵件暫存信箱
/^Subject:.*Penis Growth/ REDIRECT 垃圾郵件暫存信箱
...............(略)

以下是 /var/log/maillog 的片段:

Aug  7 21:07:49 proxy postfix/smtpd[26021]: connect from mail-wy0-f179.google.com[74.125.82.179]
Aug  7 21:07:51 proxy postfix/smtpd[26021]: 264D5CE5A7: client=mail-wy0-f179.google.com[74.125.82.179]
Aug  7 21:07:51 proxy postfix/cleanup[26032]: 264D5CE5A7: redirect: header Received: from mail-wy0-f179.google.com (mail-wy0-f179.google.com [74.125.82.179])??by proxy.公司的網域名稱 (Postfix) with ESMTP id 264D5CE5A7??for <我在公司用的信箱>; Sun,  7 Aug 2011 21:07 from mail-wy0-f179.google.com[74.125.82.179]; from=<我的私人信箱> to=<我在公司用的信箱> proto=ESMTP helo=<mail-wy0-f179.google.com>: 垃圾郵件暫存信箱
Aug  7 21:07:51 proxy postfix/cleanup[26032]: 264D5CE5A7: message-id=<CACCNw29cZBQSZ6z4Z2o+9oyvGZtsDkRK5XuTk=EwKcHqgq4jPQ@mail.gmail.com>
Aug  7 21:07:51 proxy postfix/qmgr[25886]: 264D5CE5A7: from=<我的私人信箱>, size=1537, nrcpt=1 (queue active)
Aug  7 21:07:51 proxy postfix/smtp[26047]: 264D5CE5A7: to=<垃圾郵件暫存信箱>, orig_to=<我在公司用的信箱>, relay=192.168.1.184[192.168.1.184]:25, delay=1.6, delays=1.4/0/0.01/0.12, dsn=2.6.0, status=sent (250 2.6.0  <CACCNw29cZBQSZ6z4Z2o+9oyvGZtsDkRK5XuTk=EwKcHqgq4jPQ@mail.gmail.com> Queued mail for delivery)
Aug  7 21:07:51 proxy postfix/qmgr[25886]: 264D5CE5A7: removed

上面的第4, 6, 7行就是讓我感到很奇怪的地方:

  1. 為什麼我能收到一堆廣告信, 但log檔卻沒有比對成功的記錄?
  2. 那些查無比對記錄的廣告信, 為什麼一樣會被轉到垃圾郵件暫存信箱?
  3. 應該如何設定才能在 /var/log/maillog 看到比對成功的記錄 (也就是有抓到垃圾信)
  4. 如何設定才能避免正常信件不會轉到垃圾郵件暫存信箱? (我現在的狀況是, 沒在header_checks裡定義的, 一樣會先寄到垃圾郵件暫存信箱)
ayu iT邦好手 4 級 ‧ 2011-08-09 05:55:52 檢舉
修改完 header_checks 後有做 postmap 嗎?
header_checks 跟 postmap 有關聯嗎?

2 個回答

2
plums
iT邦高手 1 級 ‧ 2011-08-08 21:55:05
最佳解答

以前用Sendmail+SpamAssassin也是會收到一堆垃圾信,在改了POSTFIX之後再加上下面的參數設定,基本上已經可以阻擋了大部分的垃圾信了,請參考

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname

2
ganymede
iT邦好手 1 級 ‧ 2011-08-08 18:37:37

比對字串, 請修正為下例試試:
/^From: .*Free Sample/
請注意 : 與 . 之間的空白

這個小地方我倒是沒有注意
過濾的效果也有一些提昇
不過 header_checks, body_checks 對中文的處理
似乎還有很大的改善空間
他日有其它問題
再勞駕您來解答了

我要發表回答

立即登入回答