Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198948
  • 博文数量: 43
  • 博客积分: 366
  • 博客等级: 一等列兵
  • 技术积分: 427
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-17 14:03
文章分类

全部博文(43)

文章存档

2018年(2)

2017年(5)

2016年(2)

2015年(3)

2014年(9)

2013年(5)

2012年(8)

2011年(9)

我的朋友

分类: LINUX

2012-01-20 10:29:41

转自:

前言:

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

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

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

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

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

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

下載:



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

###################################################################
# #
# ★ 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 曙光 垃圾郵件抵擋軟體

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


此軟體的說明,具體請參考鳥哥的私房菜教學網站:


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 也不會一直持續發送,有佇列停留時間的。如果重發失敗次數愈多,這個佇列停留時間就會增長愈長。所以抵擋時間不宜設大。
阅读(994) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~