簡單整理BBS減少廣告信的常見方法
學術網路BBS上的廣告信橫流,浪費網路資源和破壞其他使
用者的網路權益,除了目前遙遙無期的立法根治外,可能只好自己
先做些動作抑制一下BBS上的廣告信成長。小弟簡單整理一些大
大提出的方法;並在使用之後提出一點參考想法,希望拋磚引玉,
有大大們發展更漂亮的方法來解決、再次造福大家。小弟疏漏荒謬
之處請不吝指正、謝謝。
-- benyx 蕭還
廣告信大致上分成兩種,一種是直接寄進BBS使用者信箱的
另一種是貼在NEWS群組,透過轉信機制散佈的。其他的通路雖然也
有但是較少見。
一、直接寄進BBS使用者信箱之廣告信處理
直接寄進BBS使用者信箱的的廣告信要減少;可以從 SMTP Port
接到廣告信開始下手,通常這時 Listen 的是 Sendmail Daemon。
這時此 Daemon 會對收到的開始做處理,如 Sendmail 會根據設定的
RULES 做處理。通常 Maple 系的主機會把 user.bbs 的 Mail Deliver
設成 /home/bbs/bin/bbsmail ; bbsmail 會從 stdin 讀取信件內容
轉換信件格式並且送到BBS使用者信箱。
一般而言可以減少這些信的切入點有:
1. tcp_wrappers ; 在 SMTP Port 就檢查連線處
2. Sendmail 或是 qmail 等
3. 傳進BBS用 Mailer 時; 如 Maple 2.x 系使用 bbsmail mailpost
4. BBS系統 Check User Home Mail 砍掉廣告信時
(1)
tcp_wrappers 的用法小弟只會一點點;它是能直接 band
掉某些 host、domain 的利器。如果您已經安裝好了 tcp_wrappers
可修改 /etc/hosts.allow 和 /etc/hosts.deny 以配合所需。
但是想擋掉某些 host 的所有SMTP連線,可以參考楓橋 Soc 大大寫的這篇:
(引用可能多有疏漏;詳細處請多參考原版文件)
---------------------------------------------------------------
發信人: SoC.bbs@bbs.cs.nthu.edu.tw (牽線人), 看板: Plan
標 題: sendmail-8.8.x 跟 tcp_wrappers 的結合
發信站: 清華資訊(楓橋驛站) (Sun Jan 12 23:45:52 1997)
.....................................................
這次的 Email 風暴相信另許多 BBS 站擋不勝擋.
配合 sendmail-8.8.x 的 check_mail 這個 ruleset,
對這次 email storm 的抵抗力
還是有限的, 因為信件的 "mail from:" 並不是固定的, 以這次的事件為例:
.....................................................
無謂的風暴是我們所關心的. 或許在兵荒馬亂之際,我們可以用 sendmail-8.8.x
配合 tcp_wrappers 來把傷害減低些.
用 sendmail-8.8.x 配合 tcp_wrappers 的作法或許是: 兩權相害取其輕 吧.
如何把 tcp_wrappers 加入到 sendmail-8.8.x ?? (以 SunOS 為例)
1. 先把 tcp_wrappers_7.4.tar.gz 抓來, 然後 make.
對 sendmail-8.8.x 而言, 需要有 libwrap.a 跟 tcpd.h 這兩的檔案.
為了方便起見, 可以把 libwarp.a 放 /usr/lib, 把 tcpd.h 放到
/usr/include
2. 修改 src/Makefiles/Makefile.SunOS, 把 -DTCPWRAPPERS 加到
ENVDEF 中 (例如: ENVDEF=-DTCPWRAPPERS)
3. 重新 make 一個新的 sendmail, 並安裝, 重新啟動 sendmail.
4. 編輯 /etc/hosts.allow 和 /etc/hosts.deny 以配合所需.
變更後的內容會立即生效.
例如: 想把來自 ms2.hinet.net 的 SMTP 連線擋掉, 可以在
hosts.allow 中加一行:
sendmail: ALL except ms2.hinet.net
則如此當有來自 ms2.hinet.net 的 SMTP 連線時, 會傳回
550 Access denied 的訊息, 所產生的退信是 Service unavailable.
---------------------------------------------------------------
(2)
Sendmail Ruleset 的設定小弟不敢說明:有需要請務必詳細參考原版
或是網路上各位大大的文件。小弟自己亂改也就罷了;不要害到人啦 :)
主要有配合使用 regular expression 擋 mail from 和 relay
您或許可以參考:
gopher://freebsd.ee.ttit.edu.tw 的以 FreeBSD 為主的文件
http://www.sendmail.org/antispam.html
bbs 有 bbs.cs.nthu.edu.tw 、 bbs.nchu.edu.tw 、等
找討論BBS的版齊一點的站或許就會有比較豐富的資料。
聽說還有 sendmail + spamcan 等用法;小弟沒用過。
woju大大強力推薦的 qmail 也很好;文件也很多。
再引一篇楓橋 Soc 大大寫的參考:
---------------------------------------------------------------
發信人: SoC.bbs@bbs.cs.nthu.edu.tw (牽線人), 看板: Plan
標 題: Re: 請問一個有關sendmail.8.8.2的問題
發信站: 清華資訊(楓橋驛站) (Fri Nov 15 18:25:33 1996)
......
sendmail-8.8.x 可以用 check_mail 這個 ruleset 來拒收來自
某個 domain 或 某個 user 的信.
舉個例子:
在 sendmail.cf 中的 local info 的 section 加入下列兩行:
F{BU} /etc/sendmail.baduser
F{BD} /etc/sendmail.baddomain
然後, 在 ruleset 98 的最後, 加入 check_mail 這個 ruleset:
Scheck_mail
# reject spam user
R<$={BU}> $#error $@ 5.7.1 $: "571 we don't accept junk mail"
R$={BU} $#error $@ 5.7.1 $: "571 we don't accept junk mail"
# reject spam domain
R$* $: $>3 $1
R$*<@$={BD}.>$* $#error $@ 5.7.1 $: "571 we don't accept junk mail"
R$*<@$={BD}>$* $#error $@ 5.7.1 $: "571 we don't accept junk mail"
# reject subdomain of bad domain
R$*<@$*.$={BD}.>$* $#error $@ 5.7.1 $: "571 we don't accept junk mail"
R$*<@$*.$={BD}>$* $#error $@ 5.7.1 $: "571 we don't accept junk mail"
(ps. 廢話一下, ruleset 的 LHS 跟 RHS 是用 [Tab] 隔開的)
假設不想收來自 joe@foo.bar 的信, 就可以把 joe@foo.bar
放入 /etc/sendmail.baduser 檔中:
%cat /etc/sendmail.baduser
joe@foo.bar
假設不想收來自 foo.bar 這個 domain 的信, 就把 foo.bar 放
入 /etc/sendmail.baddomain 檔中:
%cat /etc/sendmail.baddomain
foo.bar
每改完 /etc/sendmail.bad* , 把 sendmail 重叫, 那新進來的連線
就會受到影響了.
要說明一下的是, 這邊 check 的 from 是 SMTP 的 "mail from: "
所看到的 (有的 OS 在 /var/log/syslog 中有記載), 並非信中
的 "From: " 的內容. 擋錯了就沒效了.
資料來源: http://www.informatik.uni-kiel.de/%7Eca/email/check.html
------------------------------------------------------------
--
映千江月 還天地心
-- benyx 蕭還
benyx@star.ee.ttit.edu.tw
--
●無限星雲● ※,緣起※, (star.ee.ttit.edu.tw)
★ Post From ~\ ~\ star.ee.ttit.edu.tw ★