« PHP@Linux vs MS-SQL Server database (using FreeTDS) | 首頁 | 我們這一家 (あたしンち) 片尾曲 ~ 大好き!! ^^ »

2005年01月23日

Sendmail + MailScanner + ClamAV 安裝實錄

電子郵件已成為電腦病毒散播的捷逕, 而廣告信亦是網際網路最頭痛的問題; 微軟創辦人比爾蓋茲甚至成立了一個部門, 專門替他從每天超過四百萬封的信件中, 剔除絕大多數的垃圾信...
MailScanner 是著名的郵件掃毒、防止廣告信的自由軟體, 它可支援多種防毒軟體與 MTA (參見: MailScanner@FSF), 以下是在 Linux 系統裝設 MailScanner 的步驟:

安裝環境: Fedora Core 1 (使用 Sendmail)

安裝

Step 1. 安裝 MailScanner

官方網站: http://www.sng.ecs.soton.ac.uk/mailscanner/

下載 Stable → Version xxx for RedHat and Mandrake Linux (and other RPM-based Linux distributions)

安裝後, 修改 /etc/MailScanner/MailScanner.conf:

Max Children = 5 設定 MailScanner 啟動時, 最多產生幾個子程序 (processing)
預設值 = 5 (主記憶體只有 64MB 時, 建議設定為 1)
Virus Scanning = yes 開啟病毒掃瞄功能
預設值 = yes
Virus Scanners = clamav 指定病毒掃瞄套件
可一次指定多個掃毒套件, 以空白字元分隔即可
預設值 = none
Use SpamAssassin = yes 設定是否使用 SpamAssassin 套件來偵測廣告信件
必須先安裝 SpamAssassin 套件才可正常使用
預設值 = no

Step 2. 安裝 Clam AntiVirus

官方網站: http://www.clamav.net/

安裝前須建立 clamav 帳號:

useradd -s /sbin/nologin -M clamav

安裝後, 修改以下檔案:

/usr/local/etc/clamd.conf

/usr/local/freshclam.conf

將 Example 加上井字號註解掉 → #Example

執行 /usr/local/bin/freshclam 測試是否能正常運作

Step 3. 重新啟動 MailScanner

service MailScanner stop

chkconfig sendmail off (以後就由 MailScanner 啟動 sendmail, 所以要禁止 sendmail service 於開機時自動啟用)

killall sendmail (有時候 sendmail process 會殘存在記憶體中, 在此將它一舉消滅)

service MailScanner start

※從此以後, 由 MailScanner 負責啟動 MTA (Sendmail), 所以取消 Sendmail 服務, 由 MailScanner 取代

防毒機制測試

http://www.eicar.org/anti_virus_test_file.htm 下載病毒檔, 透過剛剛裝上 MailScanner 的 Mail Server 進行病毒郵件發送測試, 成功的話會收到 Mail Server 攔截病毒郵件的通知郵件. (亦可 tail -f /var/log/maillog 監視 mail log 訊息)

讓 SpamAssassin 學習辨別垃圾郵件 - 資料夾方案

#建立垃圾郵件 (spam) 與非垃圾郵件 (ham) 目錄
mkdir /var/tmp/spam /var/tmp/ham

#設定目錄權限, 讓使用者可以將郵件儲存到目錄中
#以 NFS 或 Samba 分享這兩個目錄, 並教育使用者將垃圾郵件存入 spam 資料夾, 被系統誤判為垃圾郵件的非垃圾郵件存入 ham 資料夾, 讓系統自動學習黑白名單
chmod 1777 /var/tmp/spam /var/tmp/ham

vi /usr/local/bin/sa-learn.sh

#!/bin/bash

cd /var/tmp/spam

for i in *; do

sa-learn --no-sync --spam "$i" && rm -f "$i"

done

cd /var/tmp/ham

for i in *; do

sa-learn --no-sync --ham "$i" && rm -f "$i"

done

sa-learn --sync

chmod +x /usr/local/bin/sa-learn.sh

crontab -e

*/30 * * * * /usr/local/bin/sa-learn.sh

讓 SpamAssassin 學習辨別垃圾郵件 - IMAP 方案

useradd -s /sbin/nologin -M spam && passwd spam

useradd -s /sbin/nologin -M ham && passwd ham

於使用者電腦建立 IMAP 帳號, 以 Outlook Express 為例:

  • 顯示名稱: spam
  • 電子郵件地址: spam@your.company.com
  • 我的內送郵件伺服器是: IMAP
    內收郵件伺服器: your.imap.host
    外寄郵件伺服器: localhost (無需以此帳號寄送郵件)
  • 帳戶名稱: spam
    密碼: password_for_spam_account

建立帳號之後, 再點選 "內容" 進行細部設定 (非必要):

  • IMAP
    • 取消勾選 "檢查所有資料夾有無新郵件"
    • 取消勾選 "將特殊的資料夾儲存到 IMAP 伺服器"

以上是 spam 帳號的設定方式, ham 帳號依此類推

完成後教育使用者將垃圾郵件丟 (拖曳) 入  spam 收件夾, 被系統誤判為垃圾郵件的非垃圾郵件丟入 ham 收件夾, 讓系統自動學習黑白名單

最後於 mail server 建立 sa-learn.sh 自動學習黑白名單的 shell script:

vi /usr/local/bin/sa-learn.sh

#!/bin/bash

SPAM=/var/spool/mail/spam
HAM=/var/spool/mail/ham

sa-learn --sync --spam --mbox $SPAM && true > $SPAM

sa-learn --sync --ham --mbox $HAM && true > $HAM

chmod +x /usr/local/bin/sa-learn.sh

crontab -e

*/30 * * * * /usr/local/bin/sa-learn.sh


參考資料

Posted by Jamyy at 2005年01月23日 22:53

Trackback Pings

TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/40

Comments

謝謝你這篇心得

對我自己架postfix+spamassassin 幫助很大

再次感謝

Posted by: Kane at 2006年10月27日 11:34

大大您好
假如之前User寄垃圾信給系統學習時
已經直接轉寄原垃圾信給伺服器
而不是以附加檔案的方式寄給伺服器
是否會有影響
會無法學習
還是會讓User被系統認為寄信者(User)為垃圾信的寄件者
會有影響嗎
如果會有問題,請問一下我該如何補救呢

Posted by: akong at 2007年04月18日 18:10

老實說我也不太清楚會不會影響學習效果
不過寄件者是內部 user, 應該不至於會被判為 spammer
如果要讓系統重新學習, 只要執行 sa-learn --clear 就行了

Posted by: Jamyy at 2007年04月18日 20:59

ok,不错的教程,thanks

Posted by: 打包机 at 2007年08月15日 22:29

請教大哥一下
我用clamav 安裝進去
# useradd -M clamav
#./configure
但是並末看到make file
所以我無法安使用make && make install 指令
請問這是何原因造成的

Posted by: BREH at 2008年01月15日 00:49

BREH 您好,

請找出執行 ./configure 時出現的錯誤訊息才能追查原因喔!

Posted by: Jamyy at 2008年01月15日 09:12