Cài đặt và quét virus với Clam AntiVirus (ClamAV) trên DirectAdmin/CentOS

Clam AntiVirus là bộ công cụ chống virút mã nguồn mở (GPL) phổ biến cho UNIX, được thiết kế để quét email trên các cổng thư.
Nó cung cấp một trình quét đa luồng linh hoạt và có thể mở rộng, trình quét dòng lệnh và nó có thể phát hiện Trojan horses, virus, phần mềm độc hại và các mối đe dọa độc hại khác. Nó cũng đi kèm với một công cụ tiên tiến để cập nhật cơ sở dữ liệu tự động qua Internet.

Bài viết này sẽ hướng dẫn bạn cài đặt và cấu hình ClamAV trên máy chủ web dựa trên DirectAdmin.

Lưu ý: Hướng dẫn này giả định rằng bạn đã quen với SSH và điều hướng dòng lệnh cơ bản. Các hướng dẫn này áp dụng cho các quản trị viên vận hành Máy chủ riêng ảo hoặc Máy chủ chuyên dụng.

Lưu ý: Cần có quyền truy cập cấp root, nếu không bạn sẽ không thể thực hiện các lệnh bên dưới

1. Cài đặt Clamav

Đăng nhập với quyền root và nhập các lệnh sau. Điều này sẽ bao gồm ClamAV trong cấu hình CustomBuild và biên dịch ClamAV:

# cd /usr/local/directadmin/custombuild
./build update

./build set clamav yes
./build set clamav_exim yes
./build set exim yes
./build set eximconf yes
./build set eximconf_release 4.5

./build clamav
./build exim
./build exim_conf

 

Trong trường hợp bạn gặp lỗi sau khi thử khởi động ClamAV:

[root@server ~]# /etc/init.d/clamd start
Starting clamd: LibClamAV Error: cli_loaddb(): No supported database files found in /usr/share/clamav
ERROR: Can't open file or directory
                                                          [FAILED]

 

hoặc một lỗi liên quan khác:

LibClamAV Error: cl_load(): Can't get status of /usr/share/clamav

 

Lỗi này đơn giản là cơ sở dữ liệu virus không thể được tìm thấy. Bạn có thể xây dựng lại cơ sở dữ liệu bằng cách sử dụng:

cd /usr/share
mkdir -p clamav
chown clamav:clamav clamav
freshclam -v

 

2. Cấu hình Clamav

Chỉnh sửa exim.conf và thêm vào sau "primary_hostname =":

av_scanner = clamd:127.0.0.1 3310

Bỏ qua bước trên nếu bạn đang chạy CustomBuild 2.0, vì nó bổ sung điều này cho bạn trong tệp sau: /etc/exim.clamav.load.conf

 

Trong exim.conf tìm "check_message:", và sao chép trên dòng tiếp theo các chỉ thị ClamAV bên dưới:

deny message = This message contains malformed MIME ($demime_reason)
demime = *
condition = ${if >{$demime_errorlevel}{2}{1}{0}}
deny message = This message contains a virus or other harmful content ($malware_name)
demime = *
malware = */defer_ok
deny message = This message contains an attachment of a type which we  do not accept (.$found_extension)
demime = bat:com:pif:prf:scr:vbs
warn message = X-Antivirus-Scanner: Clean mail though you should still use an Antivirus

 

Khởi động lại exim:

/etc/init.d/exim restart

 

Bắt đầu ClamAV daemon lần đầu tiên

service clamd start (stop / restart)

 

Kiểm tra xem Clamd có chạy không:

netstat -tap | grep clamd

 

Mà sẽ cho một đầu ra tương tự như thế này:

tcp        0      0 localhost.local:dyna-access *:*                         LISTEN      4405/clamd

 

3. Kiểm tra Clamav

Đôi khi, cơ sở dữ liệu virus ClamAV bị hỏng sau khi cập nhật. Điều này ngăn daemon ClamAV chạy. Kịch bản tùy chọn bên dưới đảm bảo rằng:

  1. Daemon ClamAV đang chạy
  2. Trong trường hợp không, cố gắng thử khởi động lại daemon
  3. Nếu daemon không hoạt động, nó sẽ xóa cơ sở dữ liệu virus và tải xuống cơ sở dữ liệu mới.
  4. Thử khởi động lại daemon
  5. Nếu tất cả đều không thành công, một email sẽ được gửi đến địa chỉ email được cung cấp trong tập lệnh

 

1. Tạo tập tin thử nghiệm

Đầu tiên, tạo một tập tin thử nghiệm giả. Đây là một tệp trống mà clamd sẽ sử dụng để quét trong quá trình kiểm tra:

cd /usr/local/directadmin/scripts/custom
echo "" > clamav.txt

 

2. Tạo kịch bản shell

Tạo một tập tin với tên "clamdcheck". Tập tin này sẽ chứa tập lệnh shell được sử dụng để kiểm tra ClamAV. Sử dụng: nano hoặc vi clamdcheck. Tập tin này nên được đặt trong /usr/local/directadmin/scripts/custom directory. Thêm tập lệnh bên dưới và lưu tệp khi hoàn tất:

#!/bin/sh

# path to an empty dummy test file
testfile="/usr/local/directadmin/scripts/custom/clamav.txt"

# path to the clamav database files without the ending "/"
dbfolder="/usr/share/clamav"

# path to the clamdscan executable
scan="/usr/bin/clamdscan"

# path to the freshclam executable
freshdb="/usr/bin/freshclam"

# number of times the script tries to kick start clamd
trial=10

# email of server administrator
email="user@domain.com"

# server hostname (no modification needed)
myhost=$(hostname)

# email alert subject on failure
subject="Clamd on ${myhost} is down!"

# email alert body message on failure
message="Clamd on ${myhost} is down!"

output=$($scan $testfile | grep "SCAN SUMMARY")

if [ -z "$output" ]; then
        echo "Clamd is not running!"
        echo "Now trying to start clamd..."
        for (( i=1; i<=$trial; i++ ))
        do
                echo "Trial $i..."
                /sbin/service clamd restart
                output=$($scan $testfile | grep "SCAN SUMMARY")
                if [ -n "$output" ]; then
                        break
                else
                        sleep 3
                fi
        done
        if [ -z "$output" ]; then
                echo "Clamd is still not running!"
                echo "Now trying to refresh clamav database..."
                rm -Rf $dbfolder/*
                $freshdb
                /sbin/service clamd restart
                output=$($scan $testfile | grep "SCAN SUMMARY")
                if [ -z "$output" ]; then
                        echo "Clamd is still not running!"
                        echo "$message" | mail -s "$subject" "$email"
                        echo "Giving up... email alert has been sent to administrator."
                else
                        echo "Clamd is running now!"
                fi
        else
                echo "Clamd is running now!"
        fi
else
        echo "Clamd is running!"
fi

Đảm bảo rằng các đường dẫn là chính xác và bạn đã đặt địa chỉ e-mail chính xác của mình để cảnh báo trong trường in đậm.

Đừng quên kiểm tra:

chmod 755 clamdcheck

 

3. Cài đặt Cronjob

Cron là một trình nền lập lịch biểu sẽ chạy các chương trình và tập lệnh vào các thời điểm hoặc khoảng thời gian tùy ý. Chúng tôi cần thiết lập một Cronjob để đảm bảo tập lệnh của chúng tôi chạy theo một khoảng thời gian định kỳ (đừng đặt nó quá thường xuyên vì một quy trình Freshclam hoàn chỉnh sẽ mất một thời gian để hoàn thành):

crontab -e

 

Điều này sẽ đưa bạn vào trình soạn thảo mặc định của bạn. Thêm cronjob:

15,45 * * * * /usr/local/directadmin/scripts/custom/clamdcheck > /dev/null 2>&1

 

Sử dụng các cài đặt này cứ sau nửa giờ thì cronjob chạy. Đảm bảo lưu tệp và thoát

Để hiển thị tất cả các cronjobs:

crontab -l

 

4. Cập nhật cơ sở dữ liệu virus cho Clamav tự động

Bạn có thể thêm một cronjob khác để cập nhật CSDL virus tự động:

crontab -e

 

Mã dưới đây đặt ví dụ cronjob để thực thi hàng ngày, vào lúc 5 giờ 38 phút sáng:

38 05 * * * sudo freshclam

 

5. Một số lệnh tùy chọn quét bằng tay

Để kiểm tra tất cả các tệp trên máy tính, hiển thị tên của từng tệp:

clamscan -r /

 

Để kiểm tra tất cả các tệp trên máy tính, nhưng chỉ hiển thị các tệp bị nhiễm và rung chuông khi tìm thấy:

clamscan -r --bell -i /

 

Để kiểm tra các tập tin trong tất cả các thư mục nhà của người dùng:

clamscan -r /home

 

Để kiểm tra các tệp trong thư mục nhà USER và di chuyển các tệp bị nhiễm sang thư mục khác:

clamscan -r --move=/home/USER/VIRUS /home/USER

 

Để kiểm tra các tệp trong thư mục chính của USER và xóa các tệp bị nhiễm (CẢNH BÁO: Các tệp đã biến mất.):

clamscan -r --remove /home/USER

 

sẽ quét thư mục nhà của người dùng và xuất kết quả ra tệp đã chỉ định. Tùy chọn -i được sử dụng để chỉ báo cáo các tệp bị nhiễm.

clamscan -ril /var/log/clamscan.log /home

 

Khi sử dụng --exclude setting bạn có thể loại trừ các thư mục con khỏi quá trình quét.

clamscan --exclude=maildirectory -i -r /home

 

Khi sử dụng --remove chuyển đổi bạn có thể loại bỏ các tập tin bị nhiễm bệnh.

clamscan -ril /var/log/clamscan.log --remove /home

 

6. Mẹo với screen session

Khi chạy quét chiều dài, rất thuận tiện để khởi động screen session. Một screen session có thể được khởi động lại trong trường hợp bạn mất kết nối SSH, do lỗi kết nối hoặc hết thời gian của phiên.

Để bắt đầu screen session, hãy nhập screen, theo sau là lệnh clamscan mà bạn yêu cầu (xem phần tùy chọn quét để biết cú pháp chính xác):

screen [clamscan...]

 

Bạn có thể tách ra và đính kèm phiên màn hình. Trong trường hợp bạn bị mất kết nối, bạn sử dụng các lệnh sau để kết nối lại.

 

Liệt kê các phiên màn hình có sẵn.

screen -ls

 

Bây giờ bạn có thể đính kèm bằng cách sử dụng sau đây.

screen -r sessionname

hoặc

screen -rx

 

Bạn sẽ nhận được kết quả quét vào cuối. Chỉ các tập tin bị nhiễm sẽ được liệt kê. Bạn có thể tìm thấy các tập tin trong tập tin /var/log/clamscan.log. (grep từ FOUND) Bạn có thể xóa hoặc sửa các tệp này theo cách thủ công hoặc nếu không thì chạy lệnh bên dưới sẽ xóa vĩnh viễn tất cả các tệp bị nhiễm trong hệ thống của bạn (Đảm bảo chạy trong phiên màn hình)

 

7. Trợ giúp cho một số tùy chọn của clamav

clamscan --help
-h, --help Print help information and exit.
-V, --version Print version number and exit.
-v, --verbose Be verbose.
-l FILE, --log=FILE Save scan report to FILE.
-f FILE, --file-list=FILE Scan files listed line by line in FILE.
-r, --recursive Scan directories recursively. All the subdirectories in the given directory will be scanned.
These options can be used multiple times.
-i, --infected Only print infected files.
--remove[=yes/no(*)] Remove infected files. Be careful.
--move=DIRECTORY Move infected files into DIRECTORY. Directory must be writable for the '' user or unprivileged user running clamscan.
--copy=DIRECTORY Copy infected files into DIRECTORY. Directory must be writable for the '' user or unprivileged user running clamscan.

 

8. Sử dụng thành phần mở rộng cho clamAV

Bạn có khả năng sử dụng cơ sở dữ liệu malware/virus được biên dịch từ bên thứ 3 để mở rộng cơ sở dữ liệu quét của ClamAV. Một số nguồn bổ sung đáng tin cậy từ

Thêm các dòng cơ sở dữ liệu sau vào /etc/freshclam.conf ở dưới cùng của tập tin:

#Malware Experts
DatabaseCustomURL http://cdn.malware.expert/malware.expert.ndb
DatabaseCustomURL http://cdn.malware.expert/malware.expert.hdb
DatabaseCustomURL http://cdn.malware.expert/malware.expert.ldb
DatabaseCustomURL http://cdn.malware.expert/malware.expert.fp
#Linux Malware Detect
DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.ndb
DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.hdb
#interserver.net
DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
DatabaseCustomURL http://sigs.interserver.net/interservertopline.db
DatabaseCustomURL http://sigs.interserver.net/shell.ldb
DatabaseCustomURL http://sigs.interserver.net/whitelist.fp

malware.expert.ndb is a Generic Hex pattern PHP malware, which can cause false positive alarms, because there are generic eval, base64 and other hex pattern signatures (very low false positive rate). We want to scan all .php files and check the false positives manually for malware. If some signature causes to you problems, you can whitelist them. It may contain false positive alerts due to normal PHP code having legit use for specific PHP patterns i.e. eval/base64. You may need to manually inspect files that are reported as malware.

malware.expert.hdb is statics MD5 pattern for files, and there are no false positive.

malware.expert.ldb is LDB signatures(read more), which use multi-words search for malware in files.

malware.expert.fp is whitelisted, what we found is that cause false positive malware.

interserver256.hdb 100% known malware sha256 format

interservertopline.db inserts into files, manual cleaning HEX

shell.ldb 99.9% known malware using logical signatures

whitelist.fp MD5 checksums of false positives or common files