Windows的免費hMailServer搭配SpamAssassin過濾垃圾郵件:安裝與設定
為了解決垃圾信泛濫的狀況,這兩天「跨界」測試了運行在Windows上的免費Mail server:hMailServer,它內建了與垃圾郵件過濾軟體SpamAssassin的連結,也能透過ClamWin來進行病毒掃描。這些軟體全部是自由使用的,不花一毛錢就能在Windows平台上建立電子郵件環境。不過,在SpamAssassin的使用上卻遭遇許多困難,網路上的資料泰半都是Linux的操作方法,教導Windows版本的資料非常稀少,或許本篇測試能為大家提供一些參考。
為了避免資料夾名稱問題造成狀況,建議將這些軟體都安裝在不含空白字元的資料夾裡,如c:\hMailServer、c:\SpamAssassin等。
下載並安裝
下載路徑如下,自行下載並依指示安裝。
設定hMailServer
hMailServer需要使用資料庫,預設是使用SQL Server Compact 3.5,若安裝的主機沒有安裝的話,hMailServer的安裝程式會自動下載並安裝。 簡述其他設定的幾個重點:
- 新增Domain,記得防火牆要開啟
- 新增Domain後,由其內的Accounts新增帳號,用其右鍵功能表的Add AD account就能匯入Windows AD帳號進來
- 點擊【Utilities→Diagnostics】並選擇Domain後測試,全部綠燈表示一切正常
- 為了方便觀察與除錯,將【Settings→Logging】裡的各式訊息等級都勾選,爾後就能在c:\hMailServer\Logs裡檢視Log檔
- 【Settings→Anti-spam】待SAwin32設置後再來設定
執行SAwin32的spamd
SAwin32裡我們主要用來處理過濾功能的是spamd.exe(Spam Daemon),spamd的參數不少,完整的指令可以參考spamassassin.apache.org上的說明。我們只使用兩參數:
- --syslog:將執行過程輸出到指定的Log檔
- -D:產生除錯訊息
c:\SpamAssassin\spamd --syslog="c:\SpamAssassin\spamd.log" -D
spamd.exe以背景方式執行,可透過工作管理員來終結它。執行的過程只能經由觀察spamd.log來確認。
設定hMailServer與SAwin32的連結
只要勾選【Settings→Anti-spam→SpamAssassin頁籤→Use SpamAssassin】就可以了,勾選後每個hMailServer收到的mail就會丟給spamd做運算與處理,當spamd計算某信件的分數超過5時,就判定為垃圾郵件,接著spamd在mail主旨開頭插入[SPAM]或**SPAM**等字串,再給你使用的mail client收信,我們只要再建立郵件規則來過濾主旨含有SPAM字串的信件,自動做刪除即可。當正確率到達較高的程度時,就可以考慮在Mail server上直接把垃圾郵件刪掉。
最後記得將【Settings→Anti-spam】裡的DNS blacklist與SURLBL Servers都Enable,這樣應該能過濾一大半的垃圾郵件。
如何讓SpamAssassin自動學習
SpamAssassin是使用貝氏運算來逐步增加垃圾郵件的判斷正確率,SA-learn.exe就是能用來學習的指令,我們以下列幾個步驟來達成自動學習的處理:
- 新增一個專門存放垃圾郵件的帳號,如spam@你的domain
- 變更mail client處理SPAM字串的規則,增加轉寄到 spam@你的domain 的處理,亦即當主旨帶有[SPAM]或**SPAM**時,除了刪除mail client收信匣裡的該信件外,同時轉寄給 spam 帳號
- hMailServer spam帳號的收件資料夾是c:\hMailServer\Data\你的Domain\spam\,每封存入的信件會產生成一組十六進位數字組成的檔名,並以數字開頭兩碼為子資料名,例如下圖是在08資料夾裡有兩個以{08開頭的垃圾郵件:
目錄: C:\hMailServer\Data\你的Domain\spam\08 2010/04/23 11:23p
. 2010/04/23 11:23p .. 2010/04/23 03:27p 7,382 {086300AB-29A4-45EF-B0DA-CD1CAE7016A5}.eml 2010/04/23 05:07p 7,748 {08D474C0-F05C-491C-8CC9-1ECB5EFCEA33}.eml 3 個檔案 15,130 位元組 2 個目錄 17,234,300,928 位元組可用 - 將所有c:\hMailServer\Data\你的Domain\spam\裡的資料夾寫入c:\SpamAssassin\spam-dir.lst,例如:
c:\hMailServer\Data\你的Domain\spam\08 c:\hMailServer\Data\你的Domain\spam\2A c:\hMailServer\Data\你的Domain\spam\2C ... c:\hMailServer\Data\你的Domain\spam\FE c:\hMailServer\spam-dir
spam-dir.lst的最後一行c:\hMailServer\spam-dir是存放垃圾郵件檔案(*.eml)的資料夾,系統管理人員也可以把垃圾信存成.eml放入這個資料夾讓SA-learn.exe來讀取。
將以下指令存成learn-spam.bat:
@echo off echo start %DATE% %TIME% > learn-spam.log c:\SpamAssassin\sa-learn.exe --spam --folders="c:\SpamAssassin\spam-dir.lst" >> learn-spam.log echo end %DATE% %TIME% >> learn-spam.log
執行sa-learn.exe時會讀取列在spam-dir.lst裡的每個資料夾裡的每封信件,解析、記錄這些垃圾郵件的特徵。
- 另外也新增 nospam@你的Domain 帳號,用來存放誤放到 spam 的信件,也建立nospam-dir.lst與nospam-dir資料夾,最後同樣建立批次檔learn-nospam.bat,讓sa-learn.exe學習這些是非垃圾信:
@echo off echo start %DATE% %TIME% > learn-nospam.log c:\SpamAssassin\sa-learn.exe --ham --folders="c:\SpamAssassin\nospam-dir.lst" >> learn-ham.log echo end %DATE% %TIME% >> learn-ham.log
- 將上述的learn-spam.bat與learn-nospam.bat加到「控制台→排定的工作」裡,設定排程以自動執行,例如可以設定每兩個小時分別執行學習一次。
嗯,就這樣先運行看看,看執行狀況以後再持續報導吧。
##
您可能也會有興趣的類似文章
- Anti-Spam SMTP Proxy造成郵件主機異常?! (0則留言, 2010/08/04)
- 用反垃圾郵件代理程式Anti-Spam SMTP Proxy (ASSP)清除惱人的垃圾信 (18則留言, 2010/05/23)
- 透過ASSP的郵件介面自行控制白名單與黑名單 (0則留言, 2010/05/27)
- 火絨安全軟體使用紀錄 (0則留言, 2022/08/28)
- 攔截不請自來的廣告軟體防護者:Unchecky (0則留言, 2014/10/12)
- 將Outlook Express/Windows Mail的郵件上傳到Outlook.com的步驟 (3則留言, 2012/08/21)
- [Tools] Qm: The Quick Mailer (2則留言, 2005/07/04)
- 使用Gmail匯入Outlook.com的郵件 (0則留言, 2012/08/21)
- 如何快速寫出既專業又美觀的電子郵件? (0則留言, 2023/01/13)
- [Windows] 比對檔案時間並拷貝較新檔案的命令行作法 (0則留言, 2023/02/10)
- 定時刪除Gitea的SQLite3資料 (0則留言, 2024/01/01)
- [Batch#1] Windows批次檔-取得系統日期的簡單方法與環境變數字串操作 (初學者的命令行 #5) (2則留言, 2019/12/15)
- [Tools] 軟體KVM (15則留言, 2005/07/19)
- [轉貼ITHome] 今年Blog熱持續加溫 (0則留言, 2006/01/07)
- [Windows好用工具] 預約關機批次檔 (0則留言, 2016/06/25)
谢谢, 我是在vobx上测试. 刚才看了你另一个assp的文章. , 我也测试到了打开网站.有件事不明白. SpamAssassin可以在hmail里面选择,, assp那个是如何工作的呢.
ASSP好像是用Perl寫的,安裝後會連Perl核心一起安裝好。
你好.这几天折腾hmail 有个菜菜的问题啊.您上面的第4步骤將所有c:\hMailServer\Data\你的Domain\spam\裡的資料夾寫入c:\SpamAssassin\spam-dir.lst,例如:, 这个是怎么实现手动.还是.请赐教.
谢谢.麻烦em我.
試看看:
c:
cd c:\hMailServer\Data\你的Domain\spam\
dir > c:\SpamAssassin\spam-dir.lst
後來我改裝測試中的 5.4 – 1944 版,裡面有個選項可以記錄 smtp 的 log,看了 log 才發現對方的 server 要求 rdns 反查 @.@
接著就要問我的 dns 主機服務人員,要怎麼設 rdns record @.@
我記得試的時候很正常。抱歉沒辦法幫你試,後來沒有再用hMailServer,而是使用了Mail enabled。
我的 hmailserver 版本是 5.5.5-B1879,OS 是 window 7 專業板,防火牆的 25, 110, 143 都開了,還是不肯寄信 @.@
我也正在研究。安裝了 hMailServer 並設置好 dns,Utilities 的 Diagnostics 測試都是綠燈,寫程式用這台主機發 email 也沒有出現 exception,發給 gmail 與 yahoo mail 卻都收不到,連垃圾信箱都找不到,應該是信件沒發出?請問還有什麼方式可以檢測呢?
感謝~~
非常不错,支持!
Spam filter我後來是改用ASSP,Blog裡也有介紹請自行搜尋,我覺得更好用。