開源網站雲查殺方案,搭建自己的雲殺毒
搭建ClamAV服務器
1 前言:
在上一篇我們已經演示了整個方案,傳送門《開源網站雲查殺方案,搭建自己的雲殺毒》:https://www.cnblogs.com/dengjiahai/p/12437360.html#4514940。接着我就寫一個文章來演示如何搭建ClamAV服務器,開始之前,我先說說關於陸陸續續收到一些同行的交流對話和疑問的這個問題,發表一些我個人的見解和看法:
- 在服務器安裝殺軟它不香嘛?為甚搞那么復雜?
答:的確,在服務器直接安裝殺軟也是一種防護方案。我們之所以弄了這個東西,肯定是因為殺軟有一些地方滿足不了我們的要求。我簡單的說說我們能想到的應用情形。如果你看完了,覺得該方案對你有幫助,那么你可以繼續往下探討,如果你覺得毫無意義。那么說明這個東西滿足不了你們,可以不用往下看了。
首先,來個簡單的例子說明我們應用的情形。我們要做的其實就是類似VirSCAN這個網站的一些功能:傳送門:https://www.virscan.org/antivirusvendor/clamav
我們要主要是考慮到一下幾個方面,所以做出了這個選擇。
• 我們主要是掃描,而不是為了殺毒,簡單的說,我們是想從源頭上面去防護。而不是等病毒入侵了,我們才去殺毒。你要知道,我們這個方案是不殺毒的,只是掃描病毒。根據clamav的解釋,殺毒對於上傳附件來說是毫無意義的,因為它既然檢查出來病毒,把一些關鍵的文件殺掉了,剩下的文件應該也不能用了,即使能用,你信得過嘛?
• 我們在實驗中發現,部分壓縮包病毒下載到服務器,殺軟居然不去掃描,手動一掃,病毒就出來了,具體什么原因我也不了解,當然不排除我設置的不對,但是我都安裝的時候都是直接默認的。還有就是殺軟往往清楚病毒還要重啟才能清楚干凈,很多時候,你體檢電腦完了,殺軟是不是提醒你重啟電腦?
•有密碼的壓縮包應該是沒有辦法掃描的,但是我們上傳附件的時候,我們是在流文件里面用密碼打開壓縮包,然后去掃描,是不是安全很多。而不是等用戶直接在服務器解壓到本地才觸發殺軟。
• 還有就是,殺軟無法即使把殺毒情況反饋給用戶,我們考慮這個方案的時候,主要是考慮附件上傳的情況,如果說我是用戶,並且我是無意去攻擊的,然后我卻發現,我上傳了附件之后,系統提示我成功了,好,然后我安心的去干其他事情了,然后服務器才會去殺毒。把文件干掉。這個時侯用戶完全不知情啊。我的東西為什么沒了呢,你看像很多郵箱上傳附件,都會立即查殺,並告知你結果,如果查殺不通過,不會給你發送的。
• 殺軟還有一個局限是必須安裝在本地服務器,假如服務器壓力很大,殺毒掃描據我所知也比較耗費性能,據我以前的舊電腦的體驗,特別是內存不是很足的時候,在線看視頻,電腦很卡,把殺軟推出后,居然快了很多。所以我們就用這個分布式部署的方案,單獨一個服務器掃描。
• ClamAV的®是郵件網關掃描軟件的開源標准。
• 高性能,ClamAV包括一個多線程掃描程序守護程序,用於按需文件掃描和自動簽名更新的命令行實用程序。
• ClamAV支持多種文件格式,文件和存檔解壓縮以及多種簽名語言。
• 開源
我們主要是考慮以上情形。工作原理我們主要是
如果看完了上邊的,你覺得該方案對你有用,那么你可以繼續關注,倘若該方案對你而言毫無意義。那么你可以無需看后面的了。
2 准備工作
ClamAV官網:https://www.clamav.net/
ClamAV文檔:https://www.clamav.net/documents/clam-antivirus-user-manual
ClamAV 源碼:https://github.com/Cisco-Talos/clamav-devel
目前最新版是0.102.2.我關注過官方,最近一直有更新維護的,而且挺頻繁的。
2.1 ClamAV服務器要求
操作系統:我演示使用的是windows 10.(官方支持很多系統Unix / Linux / macOS/ Debian/ Ubuntu/Redhat/CentOS)等,源碼是開源的,如果不支持,自行編譯。
硬件配置:要求很低,感覺絕大部分電腦都能支持,至於在生產環境,則要根據自己的使用情況具體分配資源。
3 安裝服務
官方文檔應該自己看一遍,有個整體了解。
第一步,我們先去官網下載安裝包或者壓縮包。如果是下載安裝包,則界面安裝的方式安裝。如果是壓縮包,則解壓到響應的目錄即可。我演示的是使用ClamAV Windows Installer進行安裝。首先下載安裝包,下載地址: http : //www.clamav.net/downloads/production/ClamAV-0.102.1.exe。可能網絡比較慢,如果網絡太慢可能需要跳板下載。我公司的測試網絡還是可以的。
右鍵單擊ClamAV-0.102.1.exe並選擇以管理員身份運行,切記要用管理員身份,否則可能安裝失敗,或者運行不正常。您可能會收到“ Windows保護您的PC”的警告消息。選擇更多信息,然后選擇總是允許。
選擇I accept the agreement並單擊Next。
Next再點擊一次。如果您刪除了以前安裝的ClamAV,則可能會收到提示“文件夾...已存在...”。如果這樣做,請選擇Yes。點擊Install。就開始安裝。
到此,ClamAV服務器就安裝完成了。
4 配置
首先我們要把conf_examples文件夾里面的clamd.conf.sample和freshclam.conf.sample兩個文件復制到根目錄外面,並用記事本或者文本編輯工具打開配置文件。
首先看clamd.conf文件
找到Example 這一行。把它注釋掉。否則運行會報錯。
接着找到以下幾行,把前面的注釋(#)去掉
#LogFile "C:\Program Files\ClamAV\clamd.log"
#PidFile "C:\Program Files\ClamAV\clamd.pid"
配置數據庫,我這里是默認路徑,如果你需要更高數據庫路徑自行設置對應的盤符目錄。后面需要把病毒庫放在這里。
#DatabaseDirectory "C:\Program Files\ClamAV\database"
設置服務器端口,默認3310端口
#TCPSocket 3310
設置監聽地址,可以設置多個地址。支持IPv6
#TCPAddr 127.0.0.1
這些是必須的配置,更多其他配置請自己根據配置文件的說明,按需開啟。
接着配置freshclam.conf,這個主要是對病毒庫的更新。
#注銷Example 一行
#DatabaseDirectory "C:\Program Files\ClamAV\database"
#UpdateLogFile "C:\Program Files\ClamAV\freshclam.log"
#DatabaseMirror database.clamav.net
#PidFile "C:\Program Files\ClamAV\freshclam.pid"
病毒庫地址,如果自己搭建鏡像,則可以使用自己的鏡像。
#DatabaseCustomURL http://myserver.example.com/mysigs.ndb
其他配置請自己按需開啟。注意最好能及時的更新病毒庫,否則新型病毒無法掃描出來。
5 使用
5.1 安裝病毒庫
在服務安裝目錄下面按ctrl +鼠標右鍵,在此處打開命令窗口,主要要用管理員打開,如果你打開的不是管理員身份,可以通過windows鍵,查找cmd,然后右鍵->管理員身份運行。進入到服務安裝目錄,執行 freshclam.exe.等待安裝完成。
安裝完成打開database文件夾。會看到三個病毒庫。
如果你的服務器網絡不通,可以自己搭建鏡像,亦或自己手動下載病毒庫。地址:https://www.clamav.net/downloads#collapseCVD
下載完成放到database里面去。
病毒庫默認12小時更新一次,如果需要更改,自行更改配置文件。
5.2 使用服務
Clamscan
掃描指定位置的文件。如下是掃描了一個a.zip 文件。發現了一個病毒
有太多選項無法在此處列出所有選項。因此,我們將僅介紹一些常見且更有趣的內容:
--log=FILE -將掃描報告保存到FILE
--database=FILE/DIR -從FILE加載病毒數據庫或從DIR加載所有受支持的db文件
--official-db-only[=yes/no(*)] -僅加載官方簽名
--max-filesize=#n -大於此大小的文件將被跳過並認為是干凈的
--max-scansize=#n -每個容器文件要掃描的最大數據量
--leave-temps[=yes/no(*)]-不要刪除臨時文件
--file-list=FILE -從FILE掃描文件
--quiet -僅輸出錯誤消息
--bell -檢測病毒的聲音
--cross-fs[=yes(*)/no] -掃描其他文件系統上的文件和目錄
--move=DIRECTORY -將受感染的文件移至目錄
--copy=DIRECTORY -將受感染的文件復制到目錄中
--bytecode-timeout=N -設置字節碼超時(以毫秒為單位)
--heuristic-alerts[=yes(*)/no] -切換啟發式警報
--alert-encrypted[=yes/no(*)] -提醒加密的檔案和文件
--nocerts -在PE文件中禁用Authenticode證書鏈驗證
--disable-cache -禁用對掃描文件的哈希和進行緩存和緩存檢查
Clamdscan
需要啟動clamd服務,掃描速度快;
若不使用-r 參數指定路徑,默認遞歸掃描子目錄;
定時殺毒
#定制任務計划,凌晨3:00開始更新病毒庫,3:30開始殺毒,掃描/home目錄以及子目錄文件,將掃描出來的病毒文件直接刪除,並保存殺毒日志
簽名測試與管理
許多工具可用於測試和管理簽名。值得注意的是以下內容:
clambc -專門用於測試字節碼
sigtool -用於一般簽名測試和分析
freshclam -用於將簽名數據庫集更新為最新版本
還有更多的更能就不一一列舉,如果我都全部列舉了,那么跟翻譯官方文檔有什么區別。而且不是我們本文的關鍵。
如果上面的用法你都不會,那么沒關系,我們都可以不用,但是,下面的用法一定要會,因為直接決定我們的方案成功與否
clamd是一個多線程守護程序,它使用libclamav掃描文件中的病毒。可以通過修改將掃描行為完全配置為適合大多數需求clamd.conf。
由於clamd需要一個病毒庫運行,我們建議運行之前設置的ClamAV的官方簽名clamd使用freshclam。
該守護程序通過偵聽在中指定的套接字上的命令來工作clamd.conf。Unix本地套接字和TCP套接字都支持偵聽。
重要說明: clamd當前不保護或認證通過TCP套接字的通信,這意味着它將接受來自任何來源的任何以下所有命令。因此,我們強烈建議您在設置clamd實例時遵循最佳聯網實踐。即不要將您的TCP套接字暴露給Internet。
這是clamd套接字接受的命令的快速列表。
PING
VERSION
RELOAD
SHUTDOWN
SCAN 文件/目錄
RAWSCAN 文件/目錄
CONTSCAN 文件/目錄
MULTISCAN 文件/目錄
ALLMATCHSCAN 文件/目錄
INSTREAM
FILDES
STATS
IDSESSION, END
與大多數ClamAV工具一樣,您可以通過調用以下命令來查找有關這些工具的更多信息:
上面一段是直接翻譯官方的,是不是看的蒙?看不懂也沒關系。你只要會一句命令就行了。
Clamd
在服務根目錄用管理員打開cmd,輸入Clamd.exe或者Clamd
如圖所示就是已經成功啟動服務了,然后就可以去我們的代碼調試了。通過WebAPI,我們可以看到ClamAV 的版本。這就說明方案也使用成功了。然后你就可以愉快的實現自己的雲殺毒業務了。
6 常見問題排查
- 啟動服務失敗?防火牆是不是禁止端口?
- 啟動服務失敗?是否用管理員安裝?
- 掃描病毒文件總是提示沒有病毒?可能改病毒沒有錄入,也有可能你沒有拉病毒庫?
- 啟動服務失敗?配置文件是否配置好?
- 程序連接不上殺毒服務器?IP和端口是否一致?
代碼已經開源,代碼托管到Gitee。傳送門:https://gitee.com/Jesai/JESAI.ClamAV.NetScanner.git