| 在常見的 usenet
討論區之中,廣告或垃圾文章的流竄是一直另人困擾的一個問題,該如何去面對或是解決這樣的問題是大多數
news server的管理者都想要得到的答案,我們暫且不論有關這方面的政策性問題,單從技術方面來看,在這裡提供一些有關從
news server 反制 spam 的作法與小小的心得給大家參考。 一般來說在處理
spam 常採用的方法有兩種,一種是發現 spam 的情況後再發出 cancel
message 去刪除存在 server 上的文章,雖然這樣做能夠減少某些的 spam,但是運用這種作法而產生的流量增加和硬碟的儲存也是可以預見的,因為一旦發現一篇
spam 之後, 我們就得發出一篇 cancel message,這個 cancel message
在網路上必然會傳送經過某些區域,也會被某些的server儲存下來,當spam的情況越來越多,我們所需要發出的
cancel message 也跟著增多,當這些 cancel message
加起來所製造的流量將也是一筆可觀的數字。
目前,則有一種較有效率的做法,簡單的來說就是從 news server
部份過濾掉我們認為是 spam
的文章,這些文章將會如同掉如無底洞一般,既不會儲存下來也不會送給其他的
server,這樣的作法除了減少流量之外,所有的處理均在 memory
中處理完畢,以減少 disk I/O 的次數,這些好處是對單一的 server
而言,另外,更重要的是如果能夠從 news server
上做這樣的處理,對整個網路和其他的 server 也是有幫助的;有了news server在第一線的處理,不但減輕自己的負擔,也降低網路資源的浪費,底下將以
inn-1.7.2/insync1.1d 配合 clean feed 0.95.3 來介紹詳細的作法。
首先先提一下 filter 的運作原理,目前inn提供的 filter 可以用 perl
和 tcl兩種語言來寫﹝不過我沒試過 tcl﹞;inn 利用 perl 附的 library
製造出一個 associative array 來供給 filter 使用,利用這個 array
就可以將每篇文章的 header 資料傳給 filter 處理,因此,innd
在收到每篇文章時就把這些資料傳給 filter,讓 filter 判斷,並按照
filter 傳回的值來決定是否要收下這篇文章;目前 inn 提供了 innd 和
nnrpd 的 filter,這些 filter
都已經有現成的範例可看,當然也可以配合自己的情況來設計 filter。﹝現成的範例在安裝inn時就有,它是放在
inn-1.7.2/samples/filter_innd.pl﹞ |