Nếu bạn đang quản lý VPS chạy WordPress thì ClamAV là một trong những công cụ bảo mật mà mình nghĩ bạn không nên bỏ qua. Rất nhiều bạn cài Fail2Ban, cấu hình tường lửa xong rồi nghĩ đã an toàn. Nhưng thực tế, mã độc có thể xâm nhập qua nhiều con đường: plugin bị lỗ hổng, theme nulled, hoặc thậm chí qua lỗ hổng trong code mà bạn không ngờ tới. ClamAV sẽ giúp bạn phát hiện malware trước khi nó kịp gây hại.
Trong bài này, mình sẽ hướng dẫn bạn cài đặt ClamAV trên VPS Ubuntu, cấu hình quét malware tự động cho thư mục WordPress, và thiết lập cảnh báo qua email khi phát hiện file nghi ngờ. Mình đã áp dụng cấu hình này trên VPS của mình nhiều tháng nay nên mọi bước đều đã được test thực tế.
ClamAV là gi va tai sao WordPress can no?
ClamAV la mot open-source antivirus engine thiet ke rieng cho may chu Linux. Khac voi phan mem diet virus tren Windows, ClamAV tap trung vao viec phat hien web shell, PHP malware, trojan, va backdoor – nhung kieu tan cong pho bien nhat danh vao server WordPress.
Nhieu nguoi nghi rang server Linux khong bi virus. Day la sai lam nguy hiem. WordPress dac biet de bi nhung file PHP malicious duoc upload len thong qua lop hong plugin hoac theme. Mot khi file do len duoc server, hacker co the dieu khien toan bo site cua ban. ClamAV quet file dua tren database voi hon 3 trieu malware signatures, cap nhat moi ngay.
Cai dat ClamAV tren VPS Ubuntu nhu the nao?
Ban lam theo 3 buoc sau la xong. Bat dau bang viec cap nhat server truoc khi cai bat ky thu gi.
Buoc 1: Cap nhat package va cai ClamAV
sudo apt update && sudo apt upgrade -y
sudo apt install clamav clamav-daemon -ySau khi cai xong, ClamAV daemon se tu khoi dong. Ban kiem tra trang thai de chac chan:
sudo systemctl status clamav-daemonNeu trang thai la active (running) la on. Neu chua, ban chay:
sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemonBuoc 2: Cap nhat virus database
ClamAV chi hieu qua khi database signature duoc cap nhat. Ban dung freshclam de cap nhat thu cong lan dau:
sudo systemctl stop clamav-daemon
sudo freshclam
sudo systemctl start clamav-daemonLuu y: ban can dung daemon truoc khi chay freshclam, neu khong se bi loi “database lock”. Sau khi cap nhat xong, khoi dong lai daemon. De tu dong cap nhat moi ngay, ban dam bao service freshclam dang chay:
sudo systemctl enable clamav-freshclam
sudo systemctl start clamav-freshclamBuoc 3: Kiem tra cai dat
clamscan --versionNeu hien ra phien ban ClamAV (vi du ClamAV 1.4) la ban da cai thanh cong.
Cau hinh ClamAV toiu uu cho WordPress nhu the nao?
Mac dinh ClamAV hoat dong on, nhung voi WordPress ban can chinh mot vai thong so de quet nhanh hon va ton it RAM hon. Mo file cau hinh:
sudo nano /etc/clamav/clamd.confChinh hoac them cac dong sau:
# Gioi han RAM su dung (256MB du cho VPS 2GB)
MaxFileSize 100M
MaxScanSize 200M
MaxRecursion 16
MaxFiles 15000
# Bo qua file lon hon 100MB (thuong la backup, anh)
AlertEncryptedArchive false
AlertEncryptedDoc false
# Bat dai log
LogVerbose yes
LogTime yes
LogFile /var/log/clamav/clamav.log
LogFileMaxSize 10MLuu file va khoi dong lai daemon:
sudo systemctl restart clamav-daemonCach quet thu muc WordPress bang ClamAV
Bay gio la phan quan trong nhat. De quet toan bo thu muc WordPress, ban chay lenh sau. Gia su website cua ban nam tai /var/www/thienlv.com/public_html:
Quet co ban
sudo clamscan -r -i /var/www/thienlv.com/public_htmlTrong do:
-r: quet de quy (tat ca thu muc con)-i: chi hien ra file bi nhiem
Quet va di chuyen file nhiem vao khu cach ly
Minh khuyen ban dung cach nay thay vi xoa ngay. Don gian la tao mot thu muc quarantine truoc:
sudo mkdir -p /var/quarantine
sudo clamscan -r --move=/var/quarantine /var/www/thienlv.com/public_htmlNhu vay, file bi nghi nhiem se duoc chuyen sang /var/quarantine/ thay vi bi xoa. Ban co the kiem tra lai truoc khi quyet dinh xoa. Dieu nay rat quan trong vi ClamAV co the bao sai duong (false positive) voi mot so file PHP hop le.
Luu y: dung khoan dung --remove de xoa ngay. Nhieu ban chay lenh nay roi mat luon code. Hoan toan khong the phuc hoi neu khong co backup. Chon --move luon an toan hon.
Thiet lap quet tu dong bang cron nhu the nao?
Quet thu cong thi ban se quen. Min se huong dan ban tao cron job chay moi dem luc 2h sang, khi traffic thap nhat. Dong thoi gui email canh bao neu phat hien malware.
Dau tien, tao script quet:
sudo nano /usr/local/bin/clamav-scan-wp.shThem noi dung sau:
#!/bin/bash
# Cau hinh
WP_PATH="/var/www/thienlv.com/public_html"
QUARANTINE="/var/quarantine"
LOG_FILE="/var/log/clamav/daily-scan.log"
EMAIL="[email protected]"
# Tao thu mục quarantine neu chua co
mkdir -p "$QUARANTINE"
# Thoi gian bat dau
echo "========================================" >> "$LOG_FILE"
echo "Scan started: $(date)" >> "$LOG_FILE"
# Quet va di chuyen file nhiem
clamscan -r --move="$QUARANTINE" \
--log="$LOG_FILE" \
"$WP_PATH"
# Kiểm tra kết quả
INFECTED=$(grep "Infected files:" "$LOG_FILE" | tail -1 | awk '{print $NF}')
if [ "$INFECTED" != "0" ]; then
echo "CANH BAO: Phat hien $INFECTED file nhiem!" >> "$LOG_FILE"
echo "Da chuyen sang $QUARANTINE de kiem tra" >> "$LOG_FILE"
# Gui email canh bao
mail -s "[CANH BAO] ClamAV phat hien malware tren server" "$EMAIL" <<EOF
ClamAV da quet va phat hien $INFECTED file nhiem malware.
File da duoc chuyen sang: $QUARANTINE
Vui long kiem tra ngay: $(hostname)
Thoi gian: $(date)
Chi tiet log: $LOG_FILE
EOF
fi
echo "Scan finished: $(date)" >> "$LOG_FILE"
echo "========================================" >> "$LOG_FILE"Phan quyen va tao cron job:
sudo chmod +x /usr/local/bin/clamav-scan-wp.sh
# Tao cron job chay moi ngay luc 2h sang
sudo crontab -e
# Them dong nay vao cuoi
0 2 * * * /usr/local/bin/clamav-scan-wp.sh >/dev/null 2>&1Nhu vay, moi dem luc 2h sang, ClamAV se tu dong quet toan bo thu muc WordPress. Neu phat hien malware, no se chuyen file vao khu cach ly va gui email canh bao cho ban. Ban chi can check email la biet ngay co van de hay khong.
Truy van va phan tich file bi danh dau la malware nhu the nao?
Khi ClamAV phat hien file nghi van, ban can xem xet truoc khi xoa. Vao thu muc quarantine va xem danh sach:
ls -la /var/quarantine/
cat /var/log/clamav/daily-scan.log | grep "FOUND"File trong quarantine se giu nguyen ten, ban co the xem noi dung bang cat hoac nano. Mot so file PHP thuong bi bao nham la:
- File license cua plugin thuong mai (ionCube encoded)
- File minify CSS/JS nen bi danh dau sai
- File backup co chua code cu
Neu xac dinh la false positive, ban chuyen file tro lai thu muc goc:
sudo mv /var/quarantine/file-ten.php /var/www/thienlv.com/public_html/wp-content/...Neu dung la malware, phan tich xem no da lam gi, kiem tra access log de biet hacker da xam nhap tu dau. Tich hop voi Fail2Ban ma minh da huong dan o bai truoc se giup ban khoa IP tan cong ngay lap tuc.
ClamAV ton bao nhieu RAM va anh huong server nhu the nao?
Day la cau hoi minh hay nhan duoc. ClamAV daemon an khoang 150-300MB RAM trong luc ranh roi. Khi quet, CPU se tang len nhưng vi minh chay vao luc 2h sang nen khong anh huong den nguoi dung. Tren VPS 2GB RAM, ban can chu y:
- Neu RAM thap hon 1GB, ban nen tat ClamAV daemon khi khong quet, chi bat len khi can
- File log co the lon neu ban khong gioi han LogFileMaxSize
- Toc do quet thu muc WordPress khoang 500-1000 file/giay, mat 30-60 giay cho site vua
5 loi thuong gap khi cai ClamAV va cach khac phuc
Minh da gap qua tat ca cac loi nay trong qua trinh cai dat, day la cach xu ly:
Loi 1: freshclam bao “database lock”
Nguyen nhan la clamav-daemon dang chay va khoa database. Ban dung daemon truoc: sudo systemctl stop clamav-daemon && sudo freshclam && sudo systemctl start clamav-daemon
Loi 2: clamscan bao “command not found”
Ban chua cai package clamav. Chay: sudo apt install clamav -y
Loi 3: quet rat cham, CPU 100%
Ban co the dang quet ca thu muc backup. Loai tru thu muc backup bang tham so --exclude-dir: clamscan -r --exclude-dir="^/var/www/.*/backups" /var/www/
Loi 4: email khong duoc gui
Server chua cai mail utils. Chay: sudo apt install mailutils -y roi cau hinh SMTP hoac dung msmtp thay the.
Loi 5: RAM khong du, ClamAV bi kill
Giam MaxFileSize xuong 50M va MaxScanSize xuong 100M trong clamd.conf. Hoac dang ky swap 1GB de cho ClamAV them khong gian.
Ket hop ClamAV voi cong cu bao mat khac nhu the nao?
ClamAV khong the dok doc dao. Ban can ket hop voi nhieu lop bao ve khac de tao he thong phong thu da tang. Day la cach minh sap xep tren VPS cua minh:
Lop 1 – Mang: UFW firewall chi mo port 22, 80, 443. Fail2Ban chan IP thu brute force SSH va wp-login.php. Min da huong dan chi tiet o bai Fail2Ban bao ve WordPress va SSH.
Lop 2 – Ung dung: WordPress 7.0 voi Protect The Shire bat, wp-config.php duoc bao mat 12 tang, chi dung plugin tu wordpress.org.
Lop 3 – File system: ClamAV quet malware moi dem. Wordfence CLI quet checksum plugin cuoi tuan. Backup hang ngay voi rotating 30 ngay.
Lop 4 – Giám sat: Logwatch gui bao cao log hang ngay. Uptime Robot canh bao khi site down. ClamAV email canh bao khi phat hien malware.
Ban khong can lam het ngay. Bat dau voi ClamAV o lop 3, sau do dan them cac lop khac. Quan trong la moi lop deu phai co, vi khong co bat ky cong cu nao bao ve ban 100%.
Should you use ClamAV daemon hay CLI mode?
ClamAV co hai che do: daemon (clamd) va CLI (clamscan). Che do daemon giu engine trong RAM nen quet nhanh hon 3-5 lan, nhung an RAM luon. Che do CLI chi an RAM khi quet, xong la giai phong. Neu VPS cua ban co 2GB+ RAM, dung daemon. Neu VPS 1GB, dung CLI voi cron job la du.
De chuyen sang che do daemon, ban dung clamdscan thay vi clamscan. Lenh se nhu sau:
sudo clamdscan --fdpass -r /var/www/thienlv.com/public_html--fdpass can thiet vi clamd chay voi user clamav, khong co quyen doc file cua www-data neu khong truyen pass.
Co can cai Wordfence hay ClamAV la du?
Ca hai deu can, vi chung lam viec o tang khac nhau. Wordfence la WordPress plugin, quet bat thuong voi WordPress core, theme, plugin. ClamAV o tang server, quet toan bo file system bao gom ca nhung file ngoai WordPress. Min da gap truong hop hacker dat web shell o thu muc /tmp, ngoai thu muc WordPress. Wordfence khong nhin thay, nhung ClamAV phat hien duoc.
Neu phai chon mot cai truoc, hay bat dau voi ClamAV vi no bao ve toan bo server, khong chi WordPress. Sau do them Wordfence hoac plugin bao mat khac o tang ung dung.
Ban co the doc them ve bao ve WordPress khoi supply chain attack de hieu ro hon tai sao can nhieu lop bao mat.
Tong ket
ClamAV la mot cong cu bao mat vao tuan ma bat ky ai quan ly VPS WordPress nao cung nen cai. No mien phi, open-source, va hoat dong on dinh. Ban can lam:
- Cai ClamAV va clamav-daemon
- Cap nhat virus database voi freshclam
- Tao cron job quet tu dong moi dem
- Cau hinh email canh bao khi phat hien malware
- Ket hop voi Fail2Ban, firewall, va backup de tao he thong bao mat da tang
Mat khoang 30 phut de cai dat va cau hinh. Sau do no se chay tu dong, ban chi can check email khi co canh bao. Don gian ma hieu qua. Neu ban gap loi nao trong qua trinh cai dat, cu de lai comment, minh se giup.
