2014年3月4日

ClamAV 防毒筆記

安裝

CentOS 可透過 rpmforge 套件庫安裝, 但想要持續更新主程式的話, 用 tarball 編譯安裝會比較好處理, 所以我決定採用編譯安裝的方式進行。

下載最新穩定版 http://www.clamav.net/lang/en/download/sources/
編譯需求: pcre-devel, bzip2-devel, zlib-devel, openssl-devel, libxml2-devel, libcurl-devel, make, gcc

建立 clamav 帳號及群組
shell>#groupadd clamav
shell>#useradd -g clamav -M -s /sbin/nologin -c "ClamAV anti virus" clamav

解壓縮然後編譯
shell># tar xzvf clamav-x.y.z.tar.gz
shell># cd clamav-x.y.z
shell># ./configure --prefix=/usr/local/clamav --with-libbz2-prefix=/usr --with-libcurl=/usr --with-iconv --with-user=clamav --with-group=clamav  --with-zlib=/usr --with-pcre  --with-xml=/usr
shell># make && make install

※ 在 clamav 手冊裡面有提到 on-access scaning 的功能, 但不建議安裝在 production 環境, 且看 Dazuko 網站目前沒有維護人員, 所以不建議安裝。

※ clamav 帳號必須有權限掃描目標檔案


設定

freshclam

使用 freshclam 程式更新病毒碼, 更新病毒碼可以利用 crond 排程執行 freshclam 指令, 或者將 freshclam 設定為 daemon 執行, 以下是採用 daemon 方式。

新增 log 檔及 pid 目錄
shell># touch /var/log/freshclam.log
shell># chown clamav /var/log/freshclam.log; chmod 600 /var/log/freshclam.log
shell># mkdir /var/run/clamav; chown clamav /var/run/clamav
shell># mkdir /var/lib/clamav; chown clamav /var/lib/clamav

設定 freshclam.conf
shell># cp /usr/local/clamav/etc/freshclam.conf.sample /usr/local/clamav/etc/freshclam.conf
shell># vim /usr/local/clamav/etc/freshclam.conf
將第8行 Example 改為 #Example
將第13行 #DatabaseDirectory /var/lib/clamav 改為 DatabaseDirectory /var/lib/clamav
將第17行 #UpdateLogFile /var/log/freshclam.log 改為 UpdateLogFile /var/log/clamav/freshclam.log
將第26行 #LogFileMaxSize 1M 改為 LogFileMaxSize 10M
將第47行 #LogRotate yes 改為 LogRotate yes
將第51行 #PidFile /var/run/freshclam.pid 改為 PidFile /var/run/clamav/freshclam.pid

執行 freshclam daemon, 若成功的話可以在 /var/log/freshclam.log 看到啟動訊息
shell># /usr/local/clamav/bin/freshclam -d

設定開機啟動 freshclam daemon
echo "/usr/local/clamav/bin/freshclam -d" >> /etc/rc.local

若要馬上掃毒的話, 先執行一次freshclam
shell># /usr/local/clamav/bin/freshclam

停止 freshclam
shell># killall freshclam

若要採用 crond 更新, 新增以下參數到 crontab 即可, 建議 N 不要使用 10 的倍數
N * * * * /usr/local/clamav/bin/freshclam --quiet

clamscan

clamscan 是指令模式的 scanner,  由於沒有 on-access scan, 所以記得要排程掃毒, 常用的參數如下

-i 只回報受感染的檔案
-l  FILE 儲存掃描報告
-r 遞迴掃描 (掃子目錄下的檔案)
--exclude-dir=REGEX  列外目錄
--move=DIRECTORY  將受感染的檔案移動到其他目錄下

Example:
shell># cd /; /usr/local/clamav/bin/clamscan -r -l  report.txt --exclude-dir=^/{proc,dev,sys} -i

clamd

clamd 是 clam antivirus daemon, 可監聽 TCP 或 Unix Socket, 並使用 clamdscan 來執行掃毒, 在使用前請先設定 clamd.conf 設定檔。

※若沒有範例檔時, 可利用以下指令產生, NAME 可為 clamd.conf freshclam.conf clamav-milter.conf
Example:
shell># /usr/local/clamav/bin/clamconf --generate-config=clamd.conf > /usr/local/clamav/etc/clamd.conf

設定 clamd.conf
shell># vim /usr/local/clamav/conf/clamd.conf
將第8行 Example 改為 #Example
將第14行 #LogFile /var/log/clamd.log 改為 LogFile /var/log/clamd.log
將第35行 #LogTime yes 改為 LogTime yes
將第57行 #LogRotate yes 改為 LogRotate yes
將第66行 #PidFile /var/run/clamav/clamd.pid 改為 PidFile /var/run/clamav/clamd.pid
將第74行 #DatabaseDirectory /var/lib/clamav 改為 DatabaseDirectory /var/lib/clamav
將第85行 #LocalSocket /tmp/clamd.socket 改為 LocalSocket /tmp/clamd.socket
將第164行 #ExcludePath ^/proc/ 改為 ExcludePath ^/proc/
將第165行 #ExcludePath ^/sys/ 改為 ExcludePath ^/sys/

檢視 clamd.conf 結果
shell># /usr/local/clamav/bin/clamconf

執行 clamd
shell># /usr/local/clamav/sbin/clamd

停止 clamd
shell># killall clamd

設定開機啟動
shell># echo "/usr/local/clamav/sbin/clamd" >> /etc/rc.local

clamdscan

為 clamd  client 程式, 必須在 clamd 啟動時使用, 其使用參數與 clamscan 雷同, 由於沒有 on-access scan, 所以一樣要排程掃毒

Example:
shell># /usr/local/clamav/bin/clamdscan --multiscan -i  -l report.txt --move=/tmp/infected

問題紀錄

  1. 在 0.95.1 以前版本,  /usr/local/clamav/share 下會有一堆以 clamav- 開頭的目錄, 這些是 freshclam 的暫存檔, 可以放心的刪除


參考文獻

沒有留言:

張貼留言