適用系統版本:Ubuntu 24.04以上
本文Ivon將示範如何在Ubuntu安裝 ClamAV,設定防毒掃描與自動排程的作業。
Ubuntu需要防毒軟體嗎?雖然說Linux系統中毒機率不大,因為使用者多半使用自由軟體以及從信任的套件庫下載程式,且程式在沒有使用者同意下是不會自動執行的。但如果是對外網開放的電腦,或者是常常跟Windows電腦交換檔案,依然需要一個掃描可疑檔案的軟體,強化資安。
對於Admin來說,你不希望24小時無人監管的Linux伺服器隨時暴露在危險之中吧?所以最好讓ClamAV定期檢查。
ClamAV是Linux上最著名的防毒軟體,採用GPL授權釋出的自由軟體,能夠掃描受感染的檔案與郵件,並提供高自定義即時防護模式。
Linux大概也只有這一款軟體是開源免費的防毒軟體罷。病毒資料庫由社群以及許多開源公司維護。其他防毒軟體公司雖然有針對Linux開發,例如Microsoft Defender for Endpoint on Linux、ESET NOD32 for Linux,但他們推出的方案實在太高級了,咱一般人用不到,而且授權多半是專有軟體~況且如果防毒軟體本身不開源的話,又叫咱怎麼信任你呢?
ClamAV能夠以命令行模式默默在背景執行,排程自動掃描Linux伺服器的檔案。
也有人製作ClamAV的圖形化介面,讓Linux桌面使用者能夠一覽目前的系統狀態,達到類似Windows的殺毒體驗。當你對下載的檔案安全性存疑的時候,可以拖曳檔案到ClamAV界面,馬上就會產出分析報告。
1. 安裝ClamAV#
以Ubuntu & Debian系統為例,安裝以下套件:
sudo apt install clamav clamav-daemon
2. 安裝ClamAV-GUI圖形介面#
這個適合Linux桌面用戶使用,讓你不需要頻繁打指令。目前的圖形界面前端有ClamAV-GUI和ClamTK,後者已經停止維護。你不需要裝圖形介面也能使用ClamAV,這是方便查看狀況。
ClamAV-GUI是使用QT寫成的前端,現由UALinux公司維護,功能選單齊全。安心吧,這個GUI設計的樸實無華,沒有什麼「安全體檢」分數給你製造無謂的焦慮,只有實用的排程掃描按鈕。
- 到ClamAV-GUI官網下載.deb檔安裝。
sudo apt install ./clamav-gui_*-ualinux_amd64.deb
開啟後就可以單次掃描指定的目錄了
如果要排程掃描:首先在Profile Manager頁面建立設定檔,再到Scheduler頁面設定排程掃描作業,只要這個面板開著就會定時執行任務。
還有,點一下ClamAV-GUI的系統匣圖示,開啟DropZone功能,桌面會顯示一個蛤蜊圖示,將檔案拖曳進去就能進行掃描。
如果要設定開機自動開啟ClamAV-GUI,加入到XDG AutoStart:
cp /usr/share/applications/ClamAV-GUI.desktop ~/.config/autostart/
3. ClamAV單次掃描病毒指令#
- 初次執行,先更新病毒定義庫
sudo systemctl stop clamav-freshclam
sudo freshclam
- ClamAV單次掃描的指令如下,通常是掃描一個目錄或者單一檔案,例如這裡指定整個
/home
目錄。
clamscan --recursive --infected /home
- 我們可以下載歐洲反電腦病毒協會提供的範本病毒檔案,測試CalmAV是否能成功掃描到「病毒」,若成功會回報Known viruses。
curl https://secure.eicar.org/eicar.com.txt | clamscan -
4. 設定ClamAV排程掃描#
ClamAV並不會自動在背景掃描病毒檔案,需要使用者主動呼叫。這樣能夠防止防毒軟體胡亂佔用系統資源。不過這樣對一些使用者來說不夠放心,所以我們得手動透過Systemd Timer建立掃描作業, 定期進行掃描。
ClamAV有兩種掃描指令,一個是clamscan
,一個是clamdscan
,前者會一次性載入病毒資料庫,適合單次掃描使用。後者則是將病毒資料庫常駐在系統,隨時等待接受掃描呼叫。
- 首先,開啟FreshClam服務,讓它自動更新病毒資料庫
# 每2小時更新一次病毒庫定義
sudo systemctl enable --now clamav-freshclam.service
# 或者,一天更新一次,具體更新時間透過 systemctl edit clamav-freshclam-once.timer取得
sudo systemctl enable --now clamav-freshclam-once.timer
- 然後設定掃描病毒的作業,這裡使用的是
clamd
服務掃描,它會讀取/etc/clamav/clamd.conf
的設定檔等待掃描。
sudo systemctl enable --now clamav-daemon.service
- 然後,手動新增一個呼叫掃描作業的服務
sudo vim /etc/systemd/system/clamdscan@.service
- 填入以下內容,在這裡
%I
會讀取systemctl指令@
後面傳入的掃描路徑。
[Unit]
Description=ClamAV scan of %I using clamd
Requires=clamav-daemon.service
After=clamav-daemon.service
[Service]
Type=oneshot
ExecStart=/usr/bin/clamdscan --fdpass --multiscan /%I
User=root
Group=root
- 再建立一個Systemd Timer:
sudo vim /etc/systemd/system/clamdscan@.timer
- 設定排程掃描規則,設定為每日0:00開始掃描。
[Unit]
Description=Daily ClamAV scan of %I
[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true
[Install]
WantedBy=timers.target
- 啟用服務。
@
後面加上的是要掃描的路徑
sudo systemctl enable --now clamdscan@home.timer
- 如果要看掃描的日誌檔案,使用這個指令:
sudo journalctl -u clamdscan@home.service -n 50
- ClamAV並沒有找到病毒就自動寄Email通報使用者的功能,這需要自行串接額外服務。例如,在
/etc/clamav/clamd.conf
裡面,設定VirusEvent
的數值,決定偵測到病毒後要執行什麼程式。
5. 啟用即時防護#
除了設定clamd定期掃描檔案之外,我們還有即時防護模式 (OnAccessScan) 可以使用。OnAccessScan會透過Linux核心的fanotify功能,在檔案被程式存取(讀取或寫入)的時候自動掃描檔案,並在發現病毒的時候禁止行程存取。
- 開啟以下服務,啟動監控:
sudo systemctl enable --now clamav-daemon.service
sudo systemctl enable --now clamav-clamonacc.service
具體會掃描的檔案,在
/etc/clamav/clamd.conf
裡面的OnAccessIncludePath
設定。日誌檔案使用以下指令查看:
sudo journalctl -u clamonacc.service -f
其他防毒軟體補強方案#
光靠防毒軟體軟體不能一勞永逸,請考慮Linux系統是否已經做足以下設定:
- 給自己的使用者帳號設定難以猜到的強密碼
- 利用
fail2ban
或auditd
監控系統登入事件 - 檢查UFW防火牆規則,擋掉不用的通訊埠
- SSH關掉Root帳號登入
- 開啟AppArmor或是SELinux機制
- 如果要執行來路不明的軟體,可以放在VM或Container裡面測試