Linux病毒扫描工具ClamAV在Ubuntu20.04的安装使用

0 / 70

Linux 系统常作为服务器系统,以安全著称,但是随着市场占有量的增大,慢慢的 Linux 病毒也还是增多,而对于病毒,一般都是管理员手动分析进行查杀,除了手动分析查杀病毒外,还可以借助杀毒软件进行查杀,就像 windows 都有杀毒软件一样,liunx 的杀毒软件也是有的,但基本上都是开源的小工具,由于本身 Linux 服务器的病毒就较少,且相对 windows 更难以入侵,所以专门的 Linux 杀毒软件较少,专门研发 Linux 杀毒软件或病毒的人就更少了。

但是,随着 Linux 服务器在市场上的占用率的飙升,针对 Linux 系统的病毒也开始增加了,所以,我们还是使用更为专业的杀毒软件,这里选择开源的 ClamAV 杀毒软件。

  • 在 Ubuntu 安装 ClamAV
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install clamav clamav-daemon -y
  • 更新病毒库
sudo freshclam

病毒库保存位置:

/var/lib/clamav/daily.cvd 
/var/lib/clamav/main.cvd
  • 常用命令
##扫描文件
$ clamscan “目录或者文件名”

##递归扫描home目录,并且记录日志
$ clamscan -r  /home  -l /var/log/clamav.log

##递归扫描home目录,将病毒文件删除,并且记录日志
$ clamscan -r  /home  --remove  -l /var/log/clamav.log

##扫描指定目录,然后将感染文件移动到指定目录,并记录日志
$ clamscan -r  /home  --move=/tmp/clamav -l /var/log/clamav.log

说明:

-r  递归扫描目录
-i 只打印受感染的文件
-l 指定记录日志文件
--remove  删除病毒文件
--move  移动病毒到指定目录
--max-dir-recursion=#n  最大目录递归级别

1.重点扫描目录
clamscan -r  -i /etc --max-dir-recursion=5 -l /var/log/clamav-etc.log
 
clamscan -r  -i /bin --max-dir-recursion=5 -l /var/log/clamav-bin.log
 
clamscan -r  -i /usr --max-dir-recursion=5 -l /var/log/clamav-usr.log
 
clamscan -r  -i /var --max-dir-recursion=5 -l /var/log/clamav-var.log

2.扫描报告说明
----------- SCAN SUMMARY -----------
Known viruses: 8608049                  #已知病毒
Engine version: 0.103.5                 #软件版本
Scanned directories: 1                  #扫描目录
Scanned files: 15                       #扫描文件
Infected files: 0                       #感染文件!!!
Data scanned: 8.32 MB                   #扫描数据
Data read: 3.96 MB (ratio 2.10:1)       #数据读取
Time: 105.181 sec (1 m 45 s)            #扫描用时
Start Date: 2022:07:15 16:56:23         #扫描开始时间
End Date:   2022:07:15 16:58:08         #扫描结束时间

3.查看病毒文件
cat /var/log/clamav-bin.log | grep "FOUND"
  • 定时扫描(自动执行病毒查杀)
1. 启动clamav服务。
   $ sudo /etc/init.d/clamav-daemon start
2. 自动更新病毒库的。
   $ sudo /etc/init.d/clamav-freshclam start

我们可以编写计划任务,每天深夜进行病毒扫描,并打印日志,如果扫描到了病毒,就发送邮件给管理员,管理员手动进行一定的病毒分析然后再杀毒。

扫描脚本:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
import socket
import os
import re
 
class ClamAV(object):
    ## 这里填入自己的远程smtp服务。利用第三方smtp服务进行邮件发送。
    def __init__(self):
        self.HOST = "smtp.exmail.qq.com"  
        self.PORT = "465"
        self.USER = 'xxx@xxxx.com'
        self.PASSWD = 'xxxxxx'
        self.TO = "xxxxxxxxx@xx.com"
 
    def clamscan(self):
        os.system('freshclam')
        os.system('clamscan -ri /tmp > /tmp/clamscan.log')
        with open('/tmp/clamscan.log', 'r', encoding='utf-8') as f:
            a = f.read()
 
        result = re.findall('Infected files:.*', a)
        if result:
            number = result[0].split(':')[1].strip()
            if number != '0':
                self.sendmail('Infected files:%s。有文件感染,请手动检查,查杀病毒。' %number)
        else:
            self.sendmail('扫描脚本有误,请检查')
 
    def sendmail(self,content):
        ipaddr = socket.gethostbyname(socket.gethostname())
 
        smtp = smtplib.SMTP_SSL(self.HOST, self.PORT)
        smtp.ehlo()
        smtp.login(self.USER, self.PASSWD)
 
        TEXT = """IP: %s\nContent: %s""" %(ipaddr,content)
        message = MIMEText(TEXT, 'plain', 'utf-8')
        message['From'] = self.USER
        message['To'] = self.TO
        message['Subject'] = Header('Clamscan Result Warning', 'utf-8')
 
        smtp.sendmail(self.USER, self.TO, message.as_string())
        smtp.quit()
 
clam = ClamAV()
clam.clamscan()

设为定时任务,每天凌晨 4 点执行扫描。

$ sudo vim /etc/crontab 
00 4 * * * root {local-path}/clamsacn.py
  • FAQ
  • 查杀常见错误:LibClamAV Warning: fmap_readpage: pread fail: asked for 4077 bytes @ offset 19, got 0
    LibClamAV Warning: fmap: failed to get MD5

解决:

扫描/sys/会产生大量报错,跳过此文件夹即可
-i 代表只报出infected的文件
-r 代表子文件夹也要扫描,/就是根目录了
$ sudo clamscan --exclude-dir=/sys/ -i -r /
  • 更新病毒库超时

解决:

$ sudo chmod  +w /etc/clamav/freshclam.conf
$ sudo vim /etc/clamav/freshclam.conf

# 将默认超时30s 改为 120s
ConnectTimeout 120 # 30
ReceiveTimeout 120 # 30
$ sudo chmod  -w /etc/clamav/freshclam.conf

# 重新更新
$ sudo freshclam -v