clamav+pyClamad linux病毒扫描

一、背景

​ Clam AntiVirus(Clam AV)是一个免费而且开放源码的防毒软件,软件与病毒库的更新由开源社区免费发布,目前ClamdAV主要为Linux、Uinux系统提供病毒扫描查杀pyClamad是一个python的第三方模块,可让python直接使用ClamAV病毒扫描守护进程clamd来实现一个高效的病毒检测功能。

二、工作原理

​ 管理服务器通过python发出多线程指令连接业务服务器的3310端口,执行病毒扫描,然后返回结果给管理服务器。 业务服务器必须安装clamd相关程序包,并启动服务监听在3310端口才能正常收到指令;可以针对不同业务环境定制相应的扫描策略,比如扫描对象、描述模式、扫描路径、调试频率等。

三、clamav+pyClamad安装以及脚本编写

3.1 机器准备

​ 检测机器
​ 10.32.176.80
​ 被检测机器
​ 10.32.176.86

3.2 被检测机器操作

创建clamav组,创建clamav用户并加入clamav组

groupadd clamav
useradd -g clamav clamav

安装源码编译工具和clamav dependencies

yum install -y \
  gcc gcc-c++ make python3 python3-pip valgrind \
  bzip2-devel check-devel json-c-devel libcurl-devel libxml2-devel \
  ncurses-devel openssl-devel pcre2-devel sendmail-devel zlib-devel

下载clamav的源码包:

wget https://www.clamav.net/downloads/production/clamav-0.103.3.tar.gz

编译安装clamav

tar -zxvf clamav-0.103.3.tar.gz  (解压)

cd clamav-0.103.3 (进入目录)

./configure --prefix=/usr/local/clamav

make

make install    (编译并安装 )

启动clamav

创建目录

mkdir /usr/local/clamav/logs      (日志存放目录)

mkdir /usr/local/clamav/updata   (clanav 病毒库目录)

修改配置文件

cp /usr/local/clamav/etc/clamd.conf.sample /usr/local/clamav/etc/clamd.conf

cp /usr/local/clamav/etc/freshclam.conf.sample /usr/local/clamav/etc/freshclam.conf
vim /usr/local/clamav/etc/clamd.conf 

#Example    注释掉这一行.   第8 行

LogFile /usr/local/clamav/logs/clamd.log    删掉前面的注释目录改为logs下面    第14行

PidFile /usr/local/clamav/updata/clamd.pid     删掉前面的注释路径改一下       第57行

DatabaseDirectory /usr/local/clamav/updata      同上                       第65行
vi /usr/local/clamav/etc/freshclam.conf

#Example    注释掉这一行.   第8 行

DatabaseDirectory /usr/local/clamav/updata

UpdateLogFile /usr/local/clamav/logs/freshclam.log

PidFile /usr/local/clamav/updata/freshclam.pid   


创建日志文件并授权

touch /usr/local/clamav/logs/freshclam.log
chown clamav:clamav /usr/local/clamav/logs/freshclam.log
touch /usr/local/clamav/logs/clamd.log
chown clamav:clamav /usr/local/clamav/logs/clamd.log
chown clamav:clamav /usr/local/clamav/updata

离线安装病毒库

#cd /usr/local/clamav/updata
提前下载以下病毒库并上传到机器:
#wget http://database.clamav.net/main.cvd
#wget http://database.clamav.net/daily.cvd
#wget http://database.clamav.net/bytecode.cvd

在线更新病毒库

/usr/local/clamav/bin/freshclam        (升级病毒库)  确保LINUX可以正常上网。

开放监听端口,启动服务

sed -i -e '/^TCPAddr/{ s/127.0.0.1/0.0.0.0/;}' /usr/local/clamav/etc/clamd.conf
取消掉TCPSocket的注释,开放监听端口,开放端口为3310
sed -i 's/^#TCPSocket.*/TCPSocket 3310/g' /usr/local/clamav/etc/clamd.conf
/usr/local/clamv/sbin/clamd start 启动lsof -i:3310  检测是否监听

如果监听成功则在检测机器上运行脚本即可。。。

3.3 检测机器操作

安装pyClamad的环境

wget https://xael.org/pages/pyClamd-0.4.0.tar.gz

解压安装

tar -zxvf pyClamd-0.4.0.tar.gzpython setup.py install

验证在python中能否调用clamav

# pyhton
>>> import pyclamd
>>> cd = pyclamd.ClamdAgnostic()
>>> cd.ping()
>True
返回true即为ok

编写检测脚本
vim simplel.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import pyclamd
from threading import Thread
class Scan(Thread): #继承多线程Thread类
  def __init__ (self,IP,scan_type,file):
    """构造方法"""
    Thread.__init__(self)
    self.IP = IP
    self.scan_type=scan_type
    self.file = file
    self.connstr=""
    self.scanresult=""
  def run(self):
    """多进程run方法"""
    try:
      cd = pyclamd.ClamdNetworkSocket(self.IP,3310)
      """探测连通性"""
      if cd.ping():
        self.connstr=self.IP+" connection [OK]"
        """重载clamd病毒特征库"""
        cd.reload()
        """判断扫描模式"""
        if self.scan_type=="contscan_file":
          self.scanresult="{0}\n".format(cd.contscan_file(self.file))
        elif self.scan_type=="multiscan_file":
          self.scanresult="{0}\n".format(cd.multiscan_file(self.file))
        elif self.scan_type=="scan_file":
          self.scanresult="{0}\n".format(cd.scan_file(self.file))
        time.sleep(1)
      else:
        self.connstr=self.IP+" ping error,exit"
        return
    except Exception,e:
      self.connstr=self.IP+" "+str(e)
IPs=['10.32.176.86','xx.xx.xx.xx']   #扫描主机的列表
scantype="multiscan_file" #指定扫描模式,支持 multiscan_file、contscan_file、scan_file
scanfile="/usr/local/bin" #指定扫描路径
i=1
threadnum=2   #指定启动的线程数
scanlist = [] #存储Scan类线程对象列表
for ip in IPs:
  """将数据值带入类中,实例化对象"""
  currp = Scan(ip,scantype,scanfile)
  scanlist.append(currp) #追加对象到列表
  """当达到指定的线程数或IP列表数后启动线程"""
  if i%threadnum==0 or i==len(IPs):
    for task in scanlist:
      task.start() #启动线程
    for task in scanlist:
      task.join() #等待所有子线程退出,并输出扫描结果
      print task.connstr #打印服务器连接信息
      print task.scanresult #打印结果信息
    scanlist = []
  i+=1

四、病毒特征文件生成

  1. 在已安装clamav的被控端安装pyclamd模块后,通过EICAR()方法生成一个带有病毒特征的文件/tmp/EICAR
  # python
  >>> import pyclamd
  >>> cd = pyclamd.ClamdAgnostic()
  >>> void = open('/tmp/EICAR','w').write(cd.EICAR())

在这里插入图片描述

  1. 生成带有病毒特征的字符串内容如下,复制文件/tmp/EICAR到目标主机的扫描目录当中,以便进行测试
# cat /tmp/EICAR
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

五、执行结果对比

被检测机器本地执行检测:

/usr/local/clamav/bin/clamdscan  -i  /tmp   -l  /root/clamscan.log

在这里插入图片描述

检测机器执行py脚本:

python simplel.py

在这里插入图片描述

大功告成。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值