免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1887 | 回复: 2
打印 上一主题 下一主题

[Mail] 利用 Postfix 抵擋垃圾信 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-30 16:39 |只看该作者 |倒序浏览
參考文件

    * Postfix 技術手冊 (O'REILLY, ISBN: 986779429X)
    * Postfix Documentation
    * Study-Area

SPAM 一直以來是郵件管理人員心中的痛,就算設定了再強的過瀘規則,SPAM 還是有辦法如洪水般的湧進來。當然,大部份的 SPAM 都是不遵守網路規則的。以下,有一些小小方法來抵擋“基本”的來源。

    * header_checks & body_checks

這應該是最常用的過瀘方法,但是隨著網路上亂丟垃圾的人手段越來越高明,會逼得我們只好一條一條的去新增規則,當然,在常見的 SPAM 下,使用 header_checks 及 body_checks 還是有很大的作用。

要使用 header_checks 或 body_checks 請在 main.cf 加上去就可以了。如果在指定的檔上是不存在的,則請手動建立。
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks

    * 拒絕動態 IP 所發出來的信件

在 2004 年開始,台灣各大 ISP 已把動態 IP 的反解改成 dynamic.*.net.tw,因此,對於此資訊,我們可以設定出一套規則,記錄在 access 裡,把來自動態 IP 的信都擋掉。

要使用這個機制,在 main.cf 加一筆設定既可。
smtpd_client_restrictions =
     check_client_access hash:/etc/postfix/access

而 access 的內容為:
dynamic.apol.com.tw REJECT We can't allow dynamic IP to relay!
dynamic.giga.net.tw REJECT We can't allow dynamic IP to relay!
dynamic.hinet.net REJECT We can't allow dynamic IP to relay!
dynamic.seed.net.tw REJECT We can't allow dynamic IP to relay!
dynamic.tfn.net.tw REJECT We can't allow dynamic IP to relay!
dynamic.ttn.net REJECT We can't allow dynamic IP to relay!
dynamic.lsc.net.tw REJECT We can't allow dynamic IP to relay!

設定好之後, 要記得使用 postmap 產生 access.db 檔, 然後再重新載入 postfix, 這樣才會生效.
# postmap hash:/etc/postfix/access
# postfix reload

    * 丟棄找不到 DNS 裡 MX / A 記錄的 hostname

這個機制是查尋寄件者的主機位址,再使用這個位置去做 DNS 查尋,一般在 SPAM 新手會隨意造一個主機名稱以企圖矇騙過關,對於這種手法實只要使用一個設定既可。

要使用這種機制,在 main.cf 加上一筆:
smtpd_sender_restrictions = reject_unknown_sender_domain

隨著科技的進步,可能到處撒垃圾的 SPAM 發送者已知道我們可以從 DNS 去做查尋工作,因為就隨意去申請一個 domain name,如此就可以通過 reject_unknown_sender_domain 的檢查了。

接下來,既然使用 DNS 的正向查尋 OK,那麼我們就來檢查一下反解的動作,一般良好的 DNS 管理者,應該要把 DNS 正、反解都設定好,做個遵守規範管理員,然而 SPAM 發送者確經常不設定好,以致於在反查的時候會找不到連線主機的 IP 反解。我們可以利用這一點來過瀘這種手法。

    * 不允許對方的連線 IP 沒有反解

這種過濾方法不是參考寄件者的主機名稱,而是利用 Client 連過來時的 IP 位置。

在 main.cf 加上一筆:
smtpd_sender_restrictions = reject_unknown_client

當然,這種方式非常的有效,但也“超乎你所想像”的有效,為什麼這麼說呢?一些合法的信件、也許不是垃圾信,會因為查不到 DNS 的 PTR 記錄而被擋到外面。像這種“例外的案子”就必需把他們加入到 mynetworks 這個項目裡以便收到他的“例外信件”。

因此,您的 mynetworks 必需加一個段落,以 11.22.33.44 來說,我們就必需使用如下方法:
mynetworks = 11.22.33.44, 192.168.3.0/24, 127.0.0.0/8

再把他加到 smtpd_sender_restrictions 裡,配合 reject_unknown_client 一起使用。
smtpd_sender_restrictions =
     permit_mynetworks
     reject_unknown_client

因為 permit 的項目如果驗證通過,就會離開整個 smtpd_sender_restrictions 的規則,所以當使用者從 11.22.33.44 連上來的時候,就會被視為合合的來源,而不會被 reject_unknown_client 所過濾。
DNS & Mail

在防堵別人的 mail 之前,一定要把自家的設定都弄得很完善才行,如此才可以跟對方說“那是你的問題”尤其是在 DNS 方面。

DNS 裡必需指定最少一個 MX record 到你正解設定,如:
abc.com.             IN MX      10      mail.abc.com
mail.abc.com.     IN A                   11.22.33.44

這樣,才算遵守規則。在反解方面,也必需設定完全。
44          IN PTR          mail.abc.com.

做測試

    查 MX record
    # host -t mx abc.com
    abc.com mail is handled by 10 mail.abc.com.

    查 mail.abc.com 正解
    # host mail.abc.com
    mail.abc.com has address 11.22.33.44

    查反解
    #host 11.22.33.44
    44.33.22.11.in-addr.arpa domain name pointer mail.abc.com.

以上,如果在手工測試 OK 之後都有結果,那麼就可以確定你的 DNS 致少是好的。

很多機關已把垃圾信的過濾規則定得相當嚴僅,比如出現三個驚嘆號 (!!!) 就馬上退信,當然在一般的做法上是不用如此的嚴格,選出適用的條件既可。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-08-30 16:57 |只看该作者
提一下 Sendmail 的做法,和 Postfix 沒兩樣
參考文件

    * Postfix 技術手冊 (O'REILLY, ISBN: 986779429X)
    * Postfix Documentation
    * Study-Area

SPAM 一直以來是郵件管理人員心中的痛,就算設定了再強的過瀘規則,SPAM 還是有辦法如洪水般的湧進來。當然,大部份的 SPAM 都是不遵守網路規則的。以下,有一些小小方法來抵擋“基本”的來源。

    * header_checks & body_checks

這應該是最常用的過瀘方法,但是隨著網路上亂丟垃圾的人手段越來越高明,會逼得我們只好一條一條的去新增規則,當然,在常見的 SPAM 下,使用 header_checks 及 body_checks 還是有很大的作用。

要使用 header_checks 或 body_checks 請在 main.cf 加上去就可以了。如果在指定的檔上是不存在的,則請手動建立。
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks

我不知道 postfix 是在做什麼檢查,所以提不出來 sendmail 做法

    * 拒絕動態 IP 所發出來的信件

在 2004 年開始,台灣各大 ISP 已把動態 IP 的反解改成 dynamic.*.net.tw,因此,對於此資訊,我們可以設定出一套規則,記錄在 access 裡,把來自動態 IP 的信都擋掉。

要使用這個機制,在 main.cf 加一筆設定既可。
smtpd_client_restrictions =
     check_client_access hash:/etc/postfix/access

而 access 的內容為:
dynamic.apol.com.tw REJECT We can't allow dynamic IP to relay!
dynamic.giga.net.tw REJECT We can't allow dynamic IP to relay!
dynamic.hinet.net REJECT We can't allow dynamic IP to relay!
dynamic.seed.net.tw REJECT We can't allow dynamic IP to relay!
dynamic.tfn.net.tw REJECT We can't allow dynamic IP to relay!
dynamic.ttn.net REJECT We can't allow dynamic IP to relay!
dynamic.lsc.net.tw REJECT We can't allow dynamic IP to relay!

設定好之後, 要記得使用 postmap 產生 access.db 檔, 然後再重新載入 postfix, 這樣才會生效.
# postmap hash:/etc/postfix/access
# postfix reload

sendmail 的 access 中可以照寫就可以了 (其實這個東西都是 postfix 抄 sendmail 的)
或是可以在 sendmail 支援 tcp_warpper 的情況下把

  1. # /etc/hosts.allow
  2. sendmail: ALL, EXCEPT dynamic.hinet.net,dynamic.seed.net.tw,....
复制代码

也可以達到同樣的事情,不過可以發現這麼做實在不聰明,如果可以用 Regular Express (RE), 那就只要一行就可以處理掉了,
因為現在世界上也有很多 ISP 把 dyn ip 也這麼設,但是你無法收集到全部的domain name列表,所以只要針對特徵就夠了

  1. #mimedefang filter
  2. return ('REJECT',"553 Sorry, no dynamic IP ($hostname [$ip])  from ISP") if ($hostname=~ /dynamic\.|dyn[0-9]*\.|dyn\.|dyn-|^dyn|\.ppp|\.dial/i);

复制代码
    * 丟棄找不到 DNS 裡 MX / A 記錄的 hostname

這個機制是查尋寄件者的主機位址,再使用這個位置去做 DNS 查尋,一般在 SPAM 新手會隨意造一個主機名稱以企圖矇騙過關,對於這種手法實只要使用一個設定既可。

要使用這種機制,在 main.cf 加上一筆:
smtpd_sender_restrictions = reject_unknown_sender_domain

sendmail 中不開啟 accept_unresolvable_domains 即可,也就是 sendmail.mc 中要把
dnl # FEATURE(`accept_unresolvable_domains') 註解掉

隨著科技的進步,可能到處撒垃圾的 SPAM 發送者已知道我們可以從 DNS 去做查尋工作,因為就隨意去申請一個 domain name,如此就可以通過 reject_unknown_sender_domain 的檢查了。

接下來,既然使用 DNS 的正向查尋 OK,那麼我們就來檢查一下反解的動作,一般良好的 DNS 管理者,應該要把 DNS 正、反解都設定好,做個遵守規範管理員,然而 SPAM 發送者確經常不設定好,以致於在反查的時候會找不到連線主機的 IP 反解。我們可以利用這一點來過瀘這種手法。

    * 不允許對方的連線 IP 沒有反解

這種過濾方法不是參考寄件者的主機名稱,而是利用 Client 連過來時的 IP 位置。

在 main.cf 加上一筆:
smtpd_sender_restrictions = reject_unknown_client

當然,這種方式非常的有效,但也“超乎你所想像”的有效,為什麼這麼說呢?一些合法的信件、也許不是垃圾信,會因為查不到 DNS 的 PTR 記錄而被擋到外面。像這種“例外的案子”就必需把他們加入到 mynetworks 這個項目裡以便收到他的“例外信件”。

因此,您的 mynetworks 必需加一個段落,以 11.22.33.44 來說,我們就必需使用如下方法:
mynetworks = 11.22.33.44, 192.168.3.0/24, 127.0.0.0/8

再把他加到 smtpd_sender_restrictions 裡,配合 reject_unknown_client 一起使用。
smtpd_sender_restrictions =
     permit_mynetworks
     reject_unknown_client

因為 permit 的項目如果驗證通過,就會離開整個 smtpd_sender_restrictions 的規則,所以當使用者從 11.22.33.44 連上來的時候,就會被視為合合的來源,而不會被 reject_unknown_client 所過濾。
DNS & Mail

在防堵別人的 mail 之前,一定要把自家的設定都弄得很完善才行,如此才可以跟對方說“那是你的問題”尤其是在 DNS 方面。

DNS 裡必需指定最少一個 MX record 到你正解設定,如:
abc.com.             IN MX      10      mail.abc.com
mail.abc.com.     IN A                   11.22.33.44

這樣,才算遵守規則。在反解方面,也必需設定完全。
44          IN PTR          mail.abc.com.

做測試

    查 MX record
    # host -t mx abc.com
    abc.com mail is handled by 10 mail.abc.com.

    查 mail.abc.com 正解
    # host mail.abc.com
    mail.abc.com has address 11.22.33.44

    查反解
    #host 11.22.33.44
    44.33.22.11.in-addr.arpa domain name pointer mail.abc.com.

以上,如果在手工測試 OK 之後都有結果,那麼就可以確定你的 DNS 致少是好的。

很多機關已把垃圾信的過濾規則定得相當嚴僅,比如出現三個驚嘆號 (!!!) 就馬上退信,當然在一般的做法上是不用如此的嚴格,選出適用的條件既可。

反解問題在大陸實在是醜事,所以不要用反解來檢查較好,sendmail 中若要做只要在
hosts.deny 中設像
sendmail: unknown
即可

论坛徽章:
0
3 [报告]
发表于 2006-08-30 17:34 |只看该作者
我不知道 postfix 是在做什麼檢查,所以提不出來 sendmail 做法   

postfix是在做邮件头和body得检查        头好作    会点正则表达式就可以写了      body 慎重    因为要占用大量的机器资源了  
  sendmail 中不開啟 accept_unresolvable_domains 即可,也就是 sendmail.mc 中要把
dnl # FEATURE(`accept_unresolvable_domains') 註解掉
  
现在的免费域名注册满天飞      加了估计作用不大  但比没有要好些(?)
反解問題在大陸實在是醜事,所以不要用反解來檢查較好   
是啊   我昨天还发帖子问这个问题       今天自己解析 反解析了几个域名      太多的问题了     自己的域名都无法反解 。。。复旦的也是       sign        还大言不愧的限制别人啊   


有兄弟在弄这个 postfix现有规则抵挡垃圾mail的么    大家一起研究研究吧

[ 本帖最后由 gunguymadman 于 2006-8-30 17:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP