[心得] postfix 如何過濾垃圾郵件 [論壇 - 伺服器架設]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



[心得] postfix 如何過濾垃圾郵件
會員四級
註冊日期:
2008/11/20 21:32
所屬群組:
已註冊使用者
等級: 20
HP : 0 / 487
MP : 163 / 17738
EXP: 48
離線
前言:

web server 幾個月沒收郵件,結果一收發現上萬封「垃圾郵件」,看都懶得看,全刪了。

以前就覺得這樣不是辦法,會把真正有用的郵件給淹沒了,雖知道有過濾機制這種東西,但就是很懶,所以一直沒去用,今天爬文研究整天,研究出一點心得,分享出來 ^^b

postfix 其實本身就內建過濾垃圾郵件的機制,效果還不錯,若再加上第三方的軟體,幾乎可做到 95% 以上防堵過濾。

網路上亂七八糟的資料一大堆,有的是沒整理,有的根本錯誤。浪費很多時間,假如有清晰的資料,10分鐘就能搞定了。

-------------------------------------------------------

小弟製作的 postfix 的 main.cf 檔,漢化版(中文化約 80%)

下載:
http://www.box.net/shared/65c245nnjd9thum9xkei


裡頭關於過濾垃圾郵件機制的部份

###################################################################
#                                                                 #
#              ★ 3. 垃圾郵件 過濾機制 規則 設定                  #
#                                                                 #
###################################################################
#
# 說明:
# 1.此過濾規則有順序性,請合理安排先後順序,以便達到最佳效能。
# 2.一旦規則命中,就不會繼續往下比對。
# 3.當每行的第一個字為空白(tab或空白鍵)的文字列皆被視為上一列的延續。
# 4.同一個項目的設定,不可斷行,隔行會被視為結束。
#
# 允許:
# permit_mynetworks               ←允許來自 $mynetworks 設定值的來源。(預設值)
# permit_sasl_authenticated       ←允許經 sasl 金鑰驗證過的來源。(預設值)
# 
# 拒絕:
# reject_unauth_destination       ←預設值,拒絕不信任的目標。(預設值)
# reject_unknown_recipient_domain ←拒絕收件人網域不存在的郵件。
# reject_unknown_sender_domain    ←MAIL FROM 命令所提供的寄信人位置,
#                                   若查不到 A 紀錄 或 MX 紀錄 則退信。
# reject_non_fqdn_sender          ←用戶端的 MAIL FROM 命令,
#                                   若不是RFC要求的完整名稱則退信。
# reject_unknown_client           ←當 SMTP Client 連線時,
#                                   postfix 若無法查詢該用戶端之 PTR(DSN 反解),
#                                   則拒絕連線。此規則不建議使用。
#
# ★ reject_rbl_client [線上的黑名單資料庫] ★
# 使用指令 dig [黑名單資料庫] 測試網站是否還存活,存活才加進去。
#
# ★ check_client_access [要檢查的轉遞允許清單] ★
# 若轉遞的限制,不是使用/etc/postfix/access的話,以下此行請註解
# 或者不要開啟 client 發信端 的過濾規則
# check_client_access hash:/etc/postfix/access
#
# ★★★ 外掛 postgrey 曙光 郵件過濾軟體 ★★★
# 具體請參考「鳥哥私房菜」 postfix 一章教學。
# 此外掛過濾軟體會導致郵件晚幾秒或幾分鐘收到,但可有效過濾單發型垃圾郵件。
# 若無安裝此 postgrey 軟體,以下此行請註解,否則 postfix 運作會出錯!
# check_policy_service unix:/var/spool/postfix/postgrey/socket


###############################################
#        ★ recipient 收件人 過濾規則         # 
###############################################

smtpd_recipient_restrictions =
   permit_mynetworks
   permit_sasl_authenticated
   reject_unauth_destination
   reject_unknown_sender_domain
   reject_unknown_recipient_domain
   reject_rbl_client cbl.abuseat.org
   reject_rbl_client bl.spamcop.net
   reject_rbl_client cblless.anti-spam.org.cn
   reject_rbl_client sbl-xbl.spamhaus.org
   check_policy_service unix:/var/spool/postfix/postgrey/socket


###############################################
#           client 發信者 過濾規則            # 
###############################################

#smtpd_client_restrictions =
#   check_client_access hash:/etc/postfix/access
#   check_client_access regexp:/etc/postfix/client_checks
#   reject_rbl_client cbl.abuseat.org
#   reject_rbl_client bl.spamcop.net
#   reject_rbl_client cblless.anti-spam.org.cn
#   reject_rbl_client sbl-xbl.spamhaus.org


###############################################
#            sender 寄件者 過濾規則           # 
###############################################

smtpd_sender_restrictions =
   reject_non_fqdn_sender
   reject_unknown_sender_domain 



###############################################
#                                             #
#     ★ 進階 - 正規表示式 驗證 表頭欄位      #
#                                             #
############################################### 
#
# 默認值:不使用
#
# 說明:
# 1.使用自訂的「正規表示式」文件檔,來分析郵件的表頭、內文,並進行進階的過濾。
# 2.相關使用方法,請查閱網路上教學。
# 3.上面 smtpd_ 的相關過濾機制,已有過濾大部分的郵件表頭錯誤(垃圾郵件),
#   所以不必特地在正規表示式再過濾一遍,此項目主要用途為過濾特定的標題或夾檔。

# 分析郵件表頭
#header_checks = regexp:/etc/postfix/header_checks

# 內文
#body_checks = regexp:/etc/postfix/body_checks




註:
1→這個實際上是有 "排版" 的,但是因為論壇 code 標籤不完美的關係,所以全走樣了。貼出來僅供大略看一下內容。

2→postfix 的主要設定檔 main.cf,對於每行開頭的空白有非常嚴格的要求,所以請勿直接 copy 這段文字使用,因為那很可能會出錯。

3→建議下載上面提供的那個漢化版檔案,檔案是有排版的,比較清晰和整齊。

XD



----------------------------------------------------------------

補充-01:

關於 postgrey 曙光 垃圾郵件抵擋軟體

首封郵件的抵擋時間,該多久比較好?
才不會對收信效能有影響之探討


此軟體的說明,具體請參考鳥哥的私房菜教學網站:
http://linux.vbird.org/linux_server/0380mail.php#adv_postgrey

postgrey 在 CentOS 安裝非常簡易,依照教學安裝一個 rpm 匯入第三方軟體庫源後,yum install 可以直接裝。

Ubuntu 怎麼裝,沒研究....


這個軟體一開始裝好,預設值的抵擋時間是 5分鐘(300秒)
而鳥哥網站的建議是 60秒

但我測試用 3 秒其實就可以了

原本一天收上百上千封垃圾郵件,用了 postfix 內建的過濾 + postgrey 的單發抵擋,銳減為不到 3封垃圾郵件


為什麼要設抵檔只有 3秒,理由說明:

E-mail 的好處就是快,如果要拖 60秒後才能收到,那拖太久了。

而且對方也不一定 60秒後就馬上重寄 <--這點很重要

從原理來說,mail server 寄出去的郵件,若無法成功寄出,就會退回佇列,每次退回,停留佇列的時間就會持續增加,直到設定值的上限。

以 postfix 的佇列停留時間為例,預設好像 400~4000 秒,就是第一次沒寄出,等 400秒,下一次又沒寄出,等 500秒,再下次600秒...這樣子以此類推,最大到每次等 4000秒上限,直到預設的5天後都寄不出去,就丟棄信件。

換句話說,如果對方第一時間無法成功寄出,立刻重試也無法寄,那再下一次輪到這封信寄出的佇列時間就會拖非常久,可能要 400 秒以上。

這就是為什麼 postgrey 曙光垃圾郵件抵擋軟體,預設抵擋時間會是 5分鐘(300秒)的原因,因為大部分的 mail sever 軟體,預設的佇列停留時間最小都要300秒以上。

但一般垃圾郵件廣發軟體,只會寄出一次(單發),就射後不理了。因為他們的 mail 名單也不一定正確的,有些甚至就沒名單,根本像亂數破解密碼那樣,從 a~z 在那 try,在亂寄的,所以他們不會去理會對方伺服器的回應,也不會去等。

因此理論上只抵擋 1秒應該也行,但考慮到有些垃圾郵件軟體,可能會連續寄兩次或三次,所以取抵擋3秒。

這就是為什麼設抵擋 3秒就ok 了,或者 1秒、2秒也行。


我用外面的 gmail 信箱實測(實驗)

若不開 postgrey 曙光垃圾郵件抵擋,gmail 寄出,我主機這邊是1秒內立刻收到。

而開了 postgrey 抵擋後,第一封確實會被擋下來,然後約10秒後才能收到。

我設只擋3秒,但卻要 10秒後才能收到,這證明對方 mail server 也不會一直持續發送,有佇列停留時間的。如果重發失敗次數愈多,這個佇列停留時間就會增長愈長。所以抵擋時間不宜設大。

2011/11/7 17:33
應用擴展 工具箱
回覆: [心得] postfix 如何過濾垃圾郵件
會員三級
註冊日期:
2008/4/9 10:52
所屬群組:
已註冊使用者
等級: 13
HP : 0 / 323
MP : 74 / 12372
EXP: 94
離線
收未參考

2011/11/10 5:35
應用擴展 工具箱
回覆: [心得] postfix 如何過濾垃圾郵件
會員二級
註冊日期:
2008/9/12 11:40
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 145
MP : 21 / 5384
EXP: 82
離線
收下參考, 謝謝..

2011/11/10 11:18
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.