ติดตั้ง ClamAV ป้องกันไวรัสบน VPS Linux

ติดตั้ง ClamAV ป้องกันไวรัสบน VPS Linux

มิถุนายน 2026 · อ่าน 8 นาที

ClamAV เป็น antivirus ฟรีและเปิดซอร์สที่ได้รับความนิยมสูงสำหรับ Linux servers โปรแกรมนี้ออกแบบมาเพื่อตรวจจับไวรัส trojan malware และอื่นๆ ด้วย signature database ที่อัพเดทอยู่เสมอ เหมาะสำหรับ VPS ที่ต้องการการป้องกันด้านความปลอดภัยระดับพื้นฐานแบบ lightweight โดยไม่ใช้ resources มากนัก

ความต้องการพื้นฐาน

ก่อนติดตั้ง ClamAV ให้แน่ใจว่ามี:

ขั้นตอนติดตั้ง ClamAV

เชื่อมต่อ SSH เข้า VPS แล้วเรียกใช้คำสั่งต่อไปนี้ตามระบบปฏิบัติการของคุณ:

สำหรับ Ubuntu/Debian:

sudo apt-get update
sudo apt-get install -y clamav clamav-daemon clamav-freshclam

สำหรับ CentOS/RHEL:

sudo yum install -y epel-release
sudo yum install -y clamav clamav-daemon clamav-update

หลังติดตั้งเสร็จ ให้อัพเดท virus signature database:

sudo freshclam

คำสั่งนี้จะดาวน์โหลด virus definitions ล่าสุด ซึ่งจำเป็นต่อการตรวจจับ malware ให้มีประสิทธิภาพ

การค่าเครื่อง ClamAV

ไฟล์การตั้งค่า ClamAV หลักอยู่ใน /etc/clamav/clamd.conf เปิดไฟล์แล้วปรับค่าเหล่านี้:

sudo nano /etc/clamav/clamd.conf

ค้นหาและแก้ไขบรรทัดต่อไปนี้:

LogFile /var/log/clamav/clamd.log
LogFileUnlock yes
MaxThreads 4
ScanMail yes
ScanArchive yes
ArchiveMaxRecursion 10

ประมาณหรือเพิ่มเติมขึ้นอยู่กับกำลัง CPU ของ VPS ถ้ามี 2 cores ให้ตั้ง MaxThreads เป็น 2 ถ้ามี 4 cores ก็ตั้ง 4 ตามนั้น

การรัน Manual Scan

ก่อนตั้ง cron jobs อัตโนมัติ ให้ทดสอบสแกนด้วยตนเองก่อน:

clamscan -r /var/www/html

คำสั่งนี้จะสแกนไฟล์ทั้งหมดในโฟลเดอร์ /var/www/html (หรือโฟลเดอร์เว็บไซต์ของคุณ) ในโหมด recursive (ลึกถึงโฟลเดอร์ย่อย)

เพื่อให้ scan เร็วขึ้นและข้อมูลอัปเดต ใช้ daemon mode:

sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
clamdscan -r /var/www/html

Clamdscan ใช้ daemon ที่ทำงานอยู่แล้ว ทำให้สแกนเร็วกว่า clamscan ประมาณ 3-5 เท่า

ตั้งค่า Cron Scan อัตโนมัติ

เพื่อให้ VPS สแกนไฟล์อัตโนมัติทุกวัน ให้สร้าง cron job:

sudo crontab -e

เพิ่มบรรทัดต่อไปนี้ (สแกนทุกวันเวลา 2:00 AM):

0 2 * * * clamscan -r -i /var/www/html 2>&1 | mail -s "ClamAV Scan Report" [email protected]

Flag -i หมายถึง "infected only" ซึ่งจะรายงานเฉพาะไฟล์ที่พบปัญหา จะป้องกันการส่งเมล report ยาวเกิน

ถ้าต้องการตรวจจับทั้งหมดรวมถึงไฟล์ที่ปลอดภัย นำออก flag -i:

0 2 * * * clamscan -r /var/www/html 2>&1 | mail -s "ClamAV Full Scan" [email protected]

สำหรับ CentOS ให้สร้างไฟล์ cron script แทน:

sudo nano /etc/cron.daily/clamav-scan

เพิ่มเนื้อหาต่อไปนี้:

#!/bin/bash
LOGDIR="/var/log/clamav"
LOG="$LOGDIR/daily-scan-$(date +\%Y\%m\%d).log"
mkdir -p $LOGDIR
clamscan -r -i /var/www/html > $LOG 2>&1
if [ -s $LOG ]; then
  mail -s "ClamAV Alert - Infected Files Found" [email protected] < $LOG
fi

บันทึกไฟล์แล้วทำให้ executable:

sudo chmod +x /etc/cron.daily/clamav-scan

การแจ้งเตือนผ่าน Email

เพื่อให้ได้รับการแจ้งเตือนทันทีเมื่อพบ malware ให้สร้าง script advanced:

sudo nano /usr/local/bin/clamav-notify.sh

เพิ่มสคริปต์นี้:

#!/bin/bash
SCAN_DIR="/var/www/html"
EMAIL="[email protected]"
HOSTNAME=$(hostname)
DATE=$(date '+%Y-%m-%d %H:%M:%S')
LOG_FILE="/tmp/clamav-scan-$$.log"

# Run scan
clamscan -r $SCAN_DIR > $LOG_FILE 2>&1

# Check if infected files found
if grep -q "Infected files:" $LOG_FILE; then
  INFECTED=$(grep "Infected files:" $LOG_FILE)
  SUMMARY=$(tail -5 $LOG_FILE)

  {
    echo "ALERT: Malware detected on $HOSTNAME"
    echo "Time: $DATE"
    echo "Scan Directory: $SCAN_DIR"
    echo ""
    echo "$INFECTED"
    echo ""
    echo "Summary:"
    echo "$SUMMARY"
  } | mail -s "CRITICAL: Malware Found on $HOSTNAME" $EMAIL
fi

rm -f $LOG_FILE

ทำให้ script executable:

sudo chmod +x /usr/local/bin/clamav-notify.sh

เพิ่มใน crontab:

0 */6 * * * /usr/local/bin/clamav-notify.sh

script นี้จะสแกนทุก 6 ชั่วโมงและส่ง email alert ถ้าพบไวรัส

Integration กับ FTP Server

เพื่อตรวจสอบไฟล์ FTP อัพโหลดใหม่ ให้เพิ่มสคริปต์ใน FTP upload handler:

sudo nano /usr/local/bin/ftp-scan.sh
#!/bin/bash
UPLOAD_DIR=$1
EMAIL="[email protected]"

clamscan -r "$UPLOAD_DIR" 2>&1 | tee /tmp/ftp-scan.log

if grep -q "Infected files:" /tmp/ftp-scan.log; then
  INFECTED=$(grep "Infected" /tmp/ftp-scan.log | head -5)

  {
    echo "FTP Upload Scan Alert"
    echo "Directory: $UPLOAD_DIR"
    echo ""
    echo "$INFECTED"
  } | mail -s "Malware in FTP Upload" $EMAIL

  # Optional: Remove infected file
  # find "$UPLOAD_DIR" -type f -name "*.php" -o -name "*.exe" | xargs clamscan | grep FOUND | cut -d: -f1 | xargs rm -f
  exit 1
fi
exit 0

ทำให้ executable:

sudo chmod +x /usr/local/bin/ftp-scan.sh

สำหรับ ProFTPD เพิ่มใน /etc/proftpd/proftpd.conf:

ScriptEngine on
ScriptLog /var/log/proftpd/script.log
ExecOnExit CDUP /usr/local/bin/ftp-scan.sh %p

ตรวจสอบว่า ClamAV ทำงานถูกต้อง

ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่า ClamAV ติดตั้งและทำงานอยู่:

# ตรวจสอบเวอร์ชัน
clamscan --version

# ตรวจสอบ daemon status
sudo systemctl status clamav-daemon

# ตรวจสอบ freshclam status
sudo systemctl status clamav-freshclam

# ดูจำนวน virus signatures
clamscan --version | grep -i "virus"

# ทดสอบกับไฟล์ test EICAR (ไฟล์ทดสอบปลอดภัยเสมือนเป็นไวรัส)
echo "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" > /tmp/eicar.txt
clamscan /tmp/eicar.txt
Tip: ถ้า daemon ไม่ทำงาน ให้รีสตาร์ท freshclam ก่อน (อัพเดท signature) แล้วค่อย restart daemon ทีหลัง บางครั้งไฟล์ lock ใน /var/run/clamav/ อาจทำให้มีปัญหา ให้ลบ .pid ไฟล์ก่อนรีสตาร์ท

แก้ปัญหาที่พบบ่อย

Error: "Can't create temporary directory"

สาเหตุ: โฟลเดอร์ temp ของ clamav ไม่มีสิทธิ์เขียนข้อมูล

วิธีแก้:

sudo mkdir -p /var/tmp/clamav
sudo chown clamav:clamav /var/tmp/clamav
sudo chmod 755 /var/tmp/clamav

Error: "Socket file missing" เมื่อใช้ clamdscan

สาเหตุ: daemon ไม่ได้รันหรือ socket ไฟล์ถูกลบ

วิธีแก้:

sudo rm -f /var/run/clamav/clamd.ctl
sudo systemctl restart clamav-daemon
sleep 2
clamdscan -r /var/www/html

Error: "freshclam: Connection timeout" หรือ "Can't connect to ClamAV"

สาเหตุ: firewall บล็อก port หรือ network ไม่เสถียร

วิธีแก้:

# ตรวจสอบ network connectivity
ping -c 3 8.8.8.8

# ลองทีหลังอีกครั้ง
sudo systemctl restart clamav-freshclam
sleep 5
sudo freshclam

# ถ้ายังติด ให้แก้ mirror server
sudo nano /etc/clamav/freshclam.conf
# ค้นหา DatabaseMirror และเปลี่ยนเป็น:
# DatabaseMirror clamav.net
# DatabaseMirror database.clamav.net

Scan ช้ามากหรือใช้ CPU 100%

สาเหตุ: MaxThreads ตั้งสูงเกินไป หรือ scan directory มีไฟล์ขนาดใหญ่มากมาย

วิธีแก้:

# ลดจำนวน threads
sudo nano /etc/clamav/clamd.conf
# เปลี่ยน MaxThreads เป็น 2 (สำหรับ CPU 2 cores)

# สแกนเฉพาะไฟล์ที่สำคัญเท่านั้น
clamscan -r --exclude-dir='^/sys' --exclude-dir='^/proc' /var/www/html

# restart daemon
sudo systemctl restart clamav-daemon

คำถามที่พบบ่อย

ClamAV ใช้เนื้อที่ว่างเท่าไหร่?

Virus database เบื้องต้นประมาณ 100-150MB และเพิ่มขึ้นเรื่อยๆ (อัพเดททุกวัน) Log files สามารถใช้เนื้อที่ได้ 1-2GB ต่อเดือนหากสแกนบ่อยครั้ง ควรตั้ง log rotation เพื่อเก็บเฉพาะ 7-14 วันล่าสุดเท่านั้น

ควรสแกนบ่อยแค่ไหน?

สำหรับเว็บไซต์ที่มีการอัพโหลดรูป/ไฟล์บ่อยๆ ควรสแกนทุกวัน (หรือทุก 12 ชั่วโมง) สำหรับเว็บไซต์ static ที่ไม่มีการเปลี่ยนแปลง สแกน 1-2 ครั้งต่อสัปดาห์ก็พอ ส่วน FTP uploads ควรสแกนทันทีเมื่ออัพโหลด (real-time) เพื่อขัดขวาง malware ตั้งแต่ต้น

ClamAV สามารถลบไฟล์ infected อัตโนมัติได้หรือ?

ได้ ใช้ flag --remove ในคำสั่ง clamscan ตัวอย่าง: clamscan -r --remove /var/www/html อย่างไรก็ตาม ขอแนะนำให้ quarantine (ย้ายไฟล์เข้า folder แยก) แทนการลบ เพื่อศึกษาและ manual review ก่อนลบ ใช้ flag --move=/var/quarantine แทนนั้น