精華區beta SetupBBS 關於我們 聯絡資訊
簡單整理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