看到 Leeym 長輩發表的 "ORDB 要關門了,改改 DNSBL 設定吧" 這篇文章後, 想想, 好像自己被垃圾信困擾很久, 都已經直接把連絡方式改成 gmail 了, 但是自己平常管理的系統還是一堆廣告信, 總是很煩~
之前防 Spam 的處理已經全被我拿掉了, 自從我發現到那些處理會讓每封信進來, 都讓 CPU 滿載一次~ 我就全權交給 gmail 了(記得好像是會經過兩次防毒, 一次 spamassassin, 然後 procmail filter ... 等等).. XD
跟 Leeym 長輩 請益後, 決定用他提到的前面兩種方式, 光前面兩種方式已經可以抵擋掉 8 成以上的 spam, 而且不太佔 CPU 資源, 所以就使用 DNSBL + postgrey 來擋囉~ (而且下述的設法很簡單, 只要各加一行(共三行)即可, 效果也很不錯)
以下來介紹一下兩者:
- DNSBL: 信件寄來後, 會去查詢來源 Server IP 是否有在 DNSBL 的 Spam 列表中, 有就擋掉~
- Postgrey: 信件寄來時, 第一次會跟他說主人不在家, 請過一段時間(不一定, 看寄信 Server 的設定), 第二次才會收進來, 回重新再寄的才是正常郵件.
- 再多一個自己要加 filter 的功能 Postfix-PCRE: 設定自己不想要收的信, 就搞定初級擋信機智囉!
再來就直接實作囉, 做法如下: (以下是照 debian 設定, 其它只要找到 postfix 的 main.cf 設法應該都一樣)
DNSBL:
- vi /etc/postfix/main.cf
- 加入 smtpd_client_restrictions = reject_rbl_client sbl-xbl.spamhaus.org 即可
Postgrey: (加在 DNSBL 那行下面)
- apt-get install postgrey
- vi /etc/postfix/main.cf
- 加入 smtpd_recipient_restrictions = reject_unauth_destination, check_policy_service inet:127.0.0.1:60000 (看你的 postgrey 跑哪個 port)
Postfix-PCRE
- apt-get install postfix-pcre
- vi /etc/postfix/access # 見下面完整範例
- vi /etc/postfix/main.cf
- 加入 smtpd_sender_restrictions = check_sender_access pcre:/etc/postfix/access 即可
完整寫法如下: /etc/postfix/main.cf
# 上面的就是 main.cf 本來該有的, 上面該注意的是 mydestination: domain name, mynetworks: 自己的 network IP, 別被人當 Relay Spam Server.
# sbl-xbl.spamhaus.org DNSBL
smtpd_client_restrictions = reject_rbl_client sbl-xbl.spamhaus.org
# Postgrey, apt-get install postgrey
smtpd_recipient_restrictions = reject_unauth_destination, check_policy_service inet:127.0.0.1:10023
# smap filter, apt-get install postfix-pcre
smtpd_sender_restrictions = check_sender_access pcre:/etc/postfix/access
PCRE 就照 regex 寫法即可, 下面純個人偏好, 參考寫法就好, 別照抄了.
參考的 /etc/postfix/access 寫法:
/.*@.*epaper.com.tw/ REJECT
/mailman@.*udnpaper.com/ REJECT
/[email protected]/ REJECT
/.*@citymail.com.tw/ REJECT
/CN-BIG5/ REJECT
這樣寫完再 /etc/init.d/postfix reload 或 restart 就可以生效了, 記得去看看 /var/log/mail.log, 看到如下: (應該就是有生效了)
Dec 23 01:16:17 mail postfix/smtpd[10514]: NOQUEUE: reject: RCPT from unknown[61.57.227.169]: 550 5.1.1 <[email protected]>:
Recipient address rejected: User unknown in local recipient table; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<61-57-227-169.piinet.net>
如果有興趣加上防毒 + SpamAssassin, 可以參考: 垃圾信過濾設定小記, 不過個人是因為 CPU 因素放棄這些東西了, 所以在此也不想再多加介紹了, 有興趣可以自行架設上去, 有 防毒 + 自動學習功能 會加分不少~ 🙂