電子郵件防毒篇─ClamAV

来源:互联网 发布:vba编程代码大全 编辑:程序博客网 时间:2024/06/09 17:27
電子郵件防毒篇─ClamAV 2004/10/25 修改 

電子郵件已經成為電腦病毒散播的一個很重要的途徑,如果我們可以在使用者打開信箱之前或是信件還沒送出主機之前就攔阻下來,相信可以減輕很多系統管理的負擔。

可以完成這項工作的方案有很多,像是:

  • AMaViS ( http://www.amavis.org )
  • MailScanner ( http://www.sng.ecs.soton.ac.uk/mailscanner/ )
  • MIMEDefang ( http://www.roaringpenguin.com/penguin/open_source_mimedefang.php )
  • ......

如果只是想防毒,沒有防堵垃圾信的需求,利用 ClamAV ( Clam AntiVirus ) 套件所提供的工具即可達到我們的目標。

ClamAV ( http://www.clamav.net ) 是一個 GPL 的防毒套件,內建支援掃瞄壓縮檔 (RAR 2.0, Zip, Gzip, Bzip2),
電子郵件的部份可以直接掃瞄 Mbox , Maildir 和信件原始檔,另外,它有分佈在世界各地的病毒專家隨時在更新及維護病毒資料庫,有了這個開放原始碼又免費授權給大家使用的套件,造福了不少 Unix Like 的使用者。原本 ClamAV 是搭配前面提過的 AMaVis , MailScanner ...... 等掃瞄病毒的部份,ClamAV 的套件中提供了一個叫 clamav-milter 的 sendmail milter ,可以和 sendmail 結合在一起,由它來控制當發現病毒的處理動作,下面就來介紹如何利用 ClamAV 增強 sendmail 過濾電腦病毒的功能。

1 安裝 ClamAV

一般我們安裝 FreeBSD 的軟體,用 packages 當然是最快的,不過,因為網路上 ClamAV 的 packages 預設是沒有將我們要用的 clamav-milter 功能編譯進去,所以,我們只好自己用 prots 來安裝。

1-1 安裝相關的 packages

clamav 會使用到底下的 packages 來搭配掃瞄,主要都是解壓縮的工具:

arc, lha, unarj, unrar, unzip, zoo, libgmp, rc_subr

我們可以利用 pkg_add 來安裝,執行下面的指令:

setenv PACKAGESITE ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/
pkg_add -vr arc
pkg_add -vr lha
pkg_add -vr unarj
pkg_add -vr unrar
pkg_add -vr unzip
pkg_add -vr zoo
pkg_add -vr libgmp
pkg_add -vr rc_subr

說明:

1.第一行設定 packages 的來源,可以自行改為合適的 FTP 站。

2.不想這麼麻煩,可以先安裝網路上那個不含 clamav-milter 的 clamav packages,安裝時會因為相依性的關係,自動把前述所需的 packages 通通安裝好,這樣一行指令搞定所有相關軟體,然後再刪除不要的 clamav packages 即可繼續下一個步驟!例如,以 clamav-0.73 來說,就執行:

pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/clamav.tgz
pkg_delete -v clamav-0.73

呵~這是偷吃步的方法啦!

 

1-2 安裝 clamav ports

1-2-1 更新 ports tree

編譯 clamav ports 時,ports tree 至少要有以下的東西:

/usr/ports/
   ├Mk
   ├Templates
   ├Tools
   └security/clamav

當然,如果已經利用 cvsup 更新過整個 ports tree ( 更新的部份請參考 ports 的使用 ),就不用擔心少了什麼東西,不然,可以執行下面的指令手動建立及抓取 (本例利用 ncftpget,請自行使用慣用的工具):

mkdir -p /usr/ports/security
cd /usr/ports
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/Mk
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/Templates
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/Tools
cd /usr/ports/security
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/security/clamav

更新完檔案,我們就可以準備進行編譯了。

1-2-2 進行編譯

我們先切換到 clamav 的目錄,下個 make 即可進入編譯的程序,執行:

cd /usr/ports/security/clamav
make

接著,畫面會出現類似下面的畫面:

Options for clamav 0.73

[ ] MILTER Compile the milter interface

 

OK   Cancle

因為我們需要使用 clamav-milter ,所以先按一下空白鍵或是 Enter 鍵,讓 MILTER 前面變成 [X],然後按 Tab 鍵,讓游標移到 OK 鈕上,再按 Enter 確認,剩下的就交給 FreeBSD 來編譯囉!

如果嫌麻煩,也可以用下面這行代替前面的步驟:

make WITH_MILTER=yes BATCH=yes

差別在於:以選單的方式勾選 MILTER ,設定值會儲存在 /var/db/ports/clamav 中,下次重新編譯時會變成預設值,而用 WITH_MILTER=yes BATCH=yes 的方式則不儲存。這個對於只有一個選項的 clamav 來說沒什麼差別,但是,像 mod_php4 的選項有十來項,重選應該是很累的事吧!

1-2-3 進行安裝

如果編譯的程序沒有被中斷,我們就可以執行下面的指令,將編譯好的 clamav 安裝在系統中:

make install

安裝完後,/usr/local/etc/rc.d 中會多了三個啟動服務的 scripts:

  • /usr/local/etc/rc.d/clamav-freshclam.sh
  • /usr/local/etc/rc.d/clamav-clamd.sh
  • /usr/local/etc/rc.d/clamav-milter.sh


第一個是用來更新病毒資料庫的,第二個是掃毒服務的 daemon,第三個則是可以和 sendmail 搭配的 sendmail milter ,我們只要修改設定檔,並啟動服務後就可以針對有問題的信件做過濾。

2 修改設定

和本套件有關的設定檔有三個:

  • /usr/local/etc/clamav.conf
  • /usr/local/etc/freshclam.conf
  • /etc/rc.conf
  • /etc/mail/sendmai.cf

 

2-1 修改 clamav.conf

/usr/local/etc/clamav.conf 是給 clamd 這個 daemon 用的設定檔,要研究詳細的設定內容可以 man clamav.conf ,底下我們先針對要配合 clamav-milter 的部份來修改,執行:

chmod u+w /usr/local/etc/clamav.conf
ee /usr/local/etc/clamav.conf

開啟檔案以後先檢查 /usr/local/etc/clamav.conf 中,下面這三行,把這三行前面的註解符號─井字號去掉:

LocalSocket /var/run/clamav/clamd
StreamSaveToDisk
ScanMail

這樣 clamav-milter 才有辦法將掃毒的工作交給 clamd 來完成,修改完了就按 Esc Enter Enter 鍵儲存設定。

 

2-2 修改 /etc/rc.conf

ClamAV 的三個服務啟動檔 clamav-clamd.sh , clamav-milter.sh , clamav-freshclam.sh 都使用了 rc_subr,我們必須在 /etc/rc.conf 加入要啟動服務的設定,才可以利用前述三個 *.sh 來啟動 clamav 的相關程式,所以我們先要完成底下的修改步驟:

ee /etc/rc.conf

檔案開啟以後,在最後面放入下面幾行:

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_milter_enable="YES"

編輯完畢就按 Esc Enter Enter 鍵,將設定值儲存起來。

2-3 修改 sendmail 的設定

clamav-milter 是配合 sendmail 使用的,所以我們要修改 sendmail.cf ,讓 clamav-milter 成為 sendmail 設定檔案中的 NPUT_MAIL_FILTER。

2-3-1 修改 freebsd.mc

當我們要修改 sendmail.cf 時,並不是真的打開這個檔案加內容,直接修改它實在是太複雜了,我們利用 /etc/mail/freebsd.mc 可以避免很多出錯的機會:

ee /etc/mail/freebsd.mc

檔案開啟後,在最下面加入兩行:

INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock, F=, T=S:4m;R:4m')
define(`confINPUT_MAIL_FILTERS', `clmilter')

注意: ` 的符號別打成單引號 ' 了,最後面別多按空白鍵

編輯好了就按 Esc Enter Enter 鍵儲存設定。

2-3-2 重新產生 sendmail.cf

FreeBSD 提供一個滿好用的機置可以輕鬆地產生 sendmail 所需的各項設定檔,只要切換到 /etc/mail 下即可利用 make xxx 完成設定檔資料庫的轉換。

假設主機的名稱為 mail.test.tp.edu.tw,在 /etc/mail 中可能會有 mail.test.tp.edu.tw.* 的設定檔,我們先清除原有的設定後再重新產生:

cd /etc/mail
rm mail.test.tp.edu.tw.*

清除了原有的設定檔後,我們執行下面的指令產生新的設定:

make all
make install-cf

都完成後就可以準備啟動服務來測試了!

 

3 啟動掃毒服務

如果確認設定檔都改好了,我們就可以執行以下指令來啟動 ClamAV 套件的服務:

/usr/local/etc/rc.d/clamav-freshclam.sh start
/usr/local/etc/rc.d/clamav-clamd.sh start
/usr/local/etc/rc.d/clamav-milter.sh start

要確認各個程序是否在執行了,可以用 ps 查詢一下:

ps ax | grep clam

應該要有類似下面三個:

139 ?? Ss 0:06.83 /usr/local/sbin/clamd
261 ?? Is 0:00.06 /usr/local/bin/freshclam --pid=/var/run/clamav/freshc
464 ?? Ss 0:00.03 /usr/local/sbin/clamav-milter --noreject --quiet --po

最後再重新啟動 sendmail ,讓它讀取修改過的 sendmail.cf

cd /etc/mail
make restart

可以用 ps 確認一下 sendmail 是否啟動:

ps ax | grep sendmail

應該要有類似下面的訊息:

422 ?? Ss 0:00.10 sendmail: accepting connections (sendmail)

如果 sendmail 無法啟動就觀察一下 /var/log/maillog 中的訊息為何,多半是前面修改 sendmail 設定檔的步驟有問題了。

都沒問題就可以利用郵件軟體寄信測試囉!

小技巧:

前述的程序若已經在執行中就用 restart ,還沒執行才用 start,要停止就用 stop

 

4 FAQ

Q:當 clamav 掃瞄到信件中有病毒時,預設的處理動作拒絕 (rejects) 該信, sendmail 中的代碼為 550 或 554,想改為直接扔掉有毒的信怎麼辦?

A:修改 clamav-milter 的啟動參數即可。
在 FreeBSD ports 中 clamav-milter 預設的啟動參數是 --postmaster-only --local --outgoing --max-children=50,將它多加個 --norejec 即可,原來的參數設定是寫在 /usr/local/etc/rc.d/clamav-milter.sh 中,要自定參數時只要修改 /etc/rc.conf 即可:

ee /etc/rc.conf

在裡面加入底下這行:

clamav_milter_flags="--noreject --postmaster-only --local --outgoing --max-children=50"

修改以後重新啟動 clamav-milter ,執行 :

/usr/local/etc/rc.d/clamav-milter.sh restart

Q:當 clamav 掃瞄到有毒的信件時,root (postmaster) 就收到警示的信件,一段時間下來,累積了不少,
可以停發警示的件件嗎?

A:修改參數的方法類似前一個問題,只要把 clamav-milter 啟動參數中的 --postmaster-only 去掉,換成 --quiet 即可。

clamav-milter 常用的啟動參數:

--postmaster-only:如果沒有使用 --quiet 的參數,發現有毒的信件,發信通知管理員(postmaster)。
--local:掃瞄由區網送來的信件。
--outgoing:掃瞄由外面送進來的信件。
--max-children=50:可啟動掃毒程序數的上限,如果達上限時會停止一分鐘再繼續。
--noreject:掃瞄到有毒的信件時直接刪除 (discard)。
--quiet:不發出任何有毒的警示信件,這個選項會讓 --bounce 和 --postmaster-only 失效。

詳細的說明可以 man clamav-milter

Q:想要修改病毒資料庫的更新頻率及要透過 Proxy 來更新怎麼辦?

A:更新 ClamAV 病毒資料庫的工作是由 freshclam 來完成的,它的相關設定是放在 /usr/local/etc/freshclam.conf 中,修改裡面的:Checks , HTTPProxyServer , HTTPProxyPort 三個參數值即可。

例如:

Checks   12
HTTPProxyServer   proxy.tp.edu.tw
HTTPProxyPort   3128

上面三行代表每天檢查病毒碼 12 次 (也就是每二小時一次),使用 proxy.tp.edu.tw:3128 來當 proxy。

如果 proxy server 需要輸入帳號、密碼認證,可以再多加兩個參數:HTTPProxyUsername,HTTPProxyPassword 後面分別接帳號和密碼即可。

Q:為 clamav-milter 重建 sendmail.cf 後,啟動 sendmail 時出現下面的錯誤訊息:

Starting: sendmail-submit554 5.0.0 /etc/mail/sendmail.cf: line 79: unknown configuration line ""

A:sendmail.cf 格式很嚴謹,多個空白,少按個 Tab 鍵都可能造成無法正常啟動 sendmail,先查一下記錄檔 /var/log/maillog ,看看有沒有更進一步的訊息,例如:

xxx xx xx:xx:xx xxxx sm-mta[75536]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 79: unknown configuration line "/n"

檢查一下前面曾經修改過的 freebsd.mc ,看看每行的最後面是否加了不該加的空白。

 

from: http://mail.lsps.tp.edu.tw/~gsyan/freebsd2001/mail-clamav.htm

原创粉丝点击