- 本书赞誉
- 前言
- 第一部分 基础篇
- 第1章 系统基础信息模块详解
- 第2章 业务服务监控详解
- 第3章 定制业务质量报表详解
- 第4章 Python 与系统安全
- 第二部分 高级篇
- 第5章 系统批量运维管理器 pexpect 详解
- 第6章 系统批量运维管理器 paramiko 详解
- 第7章 系统批量运维管理器Fabric详解
- 第8章 从零开发一个轻量级 WebServer
- 第9章 集中化管理平台 Ansible 详解
- 第10章 集中化管理平台 Saltstack 详解
- 第11章 统一网络控制器 Func 详解
- 第12章 Python 大数据应用详解
- 第三部分 案例篇
- 第13章 从零开始打造 B/S 自动化运维平台
- 第14章 打造 Linux 系统安全审计功能
- 第15章 构建分布式质量监控平台
- 第16章 构建桌面版 C/S 自动化运维平台
4.1 构建集中式的病毒扫描机制
Clam AntiVirus(ClamAV)是一款免费而且开放源代码的防毒软件,软件与病毒库的更新皆由社区免费发布,官网地址:http://www.clamav.net/lang/en/。目前ClamAV主要为Linux、Unix系统提供病毒扫描、查杀等服务。pyClamad(http://xael.org/norman/python/pyclamd/)是一个Python第三方模块,可让Python直接使用ClamAV病毒扫描守护进程clamd,来实现一个高效的病毒检测功能,另外,pyClamad模块也非常容易整合到我们已有的平台当中。下面详细进行说明。
pyClamad模块的安装方法如下:
# 1、客户端(病毒扫描源)安装步骤 # yum install -y clamav clamd clamav-update #安装clamavp相关程序包 # chkconfig --levels 235 clamd on #添加扫描守护进程clamd系统服务 # /usr/bin/freshclam #更新病毒库,建议配置到crontab中定期更新 # setenforce 0 #关闭SELinux,避免远程扫描时提示无权限的问题 # 更新守护进程监听IP配置文件,根据不同环境自行修改监听的IP,“0.0.0.0”为监听所有主机IP # sed -i -e '/^TCPAddr/{ s/127.0.0.1/0.0.0.0/; }' /etc/clamd.conf # /etc/init.d/clamd start #启动扫描守护进程 # 2、主控端部署pyClamad环境步骤 # wget http://xael.org/norman/python/pyclamd/pyClamd-0.3.4.tar.gz # tar -zxvf pyClamd-0.3.4.tar.gz # cd pyClamd-0.3.4 # python setup.py install
4.1.1 模块常用方法说明
pyClamad提供了两个关键类,一个为ClamdNetworkSocket类,实现使用网络套接字操作clamd;另一个为ClamdUnixSocket类,实现使用Unix套接字类操作clamd。两个类定义的方法完全一样,本节以ClamdNetworkSocket类进行说明。
__init__(self,host='127.0.0.1',port=3310,timeout=None)方法,是ClamdNetworkSocket类的初始化方法,参数host为连接主机IP;参数port为连接的端口,默认为3310,与/etc/clamd.conf配置文件中的TCPSocket参数要保持一致;timeout为连接的超时时间。
contscan_file(self,file)方法,实现扫描指定的文件或目录,在扫描时发生错误或发现病毒将不终止,参数file(string类型)为指定的文件或目录的绝对路径。
multiscan_file(self,file)方法,实现多线程扫描指定的文件或目录,多核环境速度更快,在扫描时发生错误或发现病毒将不终止,参数file(string类型)为指定的文件或目录的绝对路径。
scan_file(self,file)方法,实现扫描指定的文件或目录,在扫描时发生错误或发现病毒将终止,参数file(string类型)为指定的文件或目录的绝对路径。
shutdown(self)方法,实现强制关闭clamd进程并退出。
stats(self)方法,获取Clamscan的当前状态。
reload(self)方法,强制重载clamd病毒特征库,扫描前建议做reload操作。
EICAR(self)方法,返回EICAR测试字符串,即生成具有病毒特征的字符串,便于测试。
4.1.2 实践:实现集中式的病毒扫描
本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象、描述模式、扫描路径、调度频率等。示例实现的架构见图4-1,首先业务服务器开启clamd服务(监听3310端口),管理服务器启用多线程对指定的服务集群进行扫描,扫描模式、扫描路径会传递到clamd,最后返回扫描结果给管理服务器端。
图4-1 集群病毒扫描架构图
本次实践通过ClamdNetworkSocket方法实现与业务服务器建立扫描socket连接,再通过启动不同扫描方式实施病毒扫描并返回结果。实现代码如下:
【/home/test/pyClamad/simple1.py】
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import pyclamd from threading import Thread class Scan(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]" cd.reload #重载clamd病毒特征库,建议更新病毒库后做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) #线程挂起1秒 else: self.connstr=self.IP+" ping error,exit" return except Exception,e: self.connstr=self.IP+" "+str(e) IPs=['192.168.1.21','192.168.1.22'] #扫描主机列表 scantype="multiscan_file" #指写扫描模式,支持multiscan_file、contscan_file、scan_file scanfile="/data/www" #指定扫描路径 i=1 threadnum=2 #指定启动的线程数 scanlist = [] #存储扫描Scan类线程对象列表 for ip in IPs: currp = Scan(ip,scantype,scanfile) #创建扫描Scan类对象,参数(IP,扫描模式,扫描路径) scanlist.append(currp) #追加对象到列表 if i%threadnum==0 or i==len(IPs): #当达到指定的线程数或IP列表数后启动、退出线程 for task in scanlist: task.start #启动线程 for task in scanlist: task.join #等待所有子线程退出,并输出扫描结果 print task.connstr #打印服务器连接信息 print task.scanresult #打印扫描结果 scanlist = [] i+=1
通过EICAR方法生成一个带有病毒特征的文件/tmp/EICAR,代码如下:
void = open('/tmp/EICAR','w').write(cd.EICAR)
生成带有病毒特征的字符串内容如下,复制文件/tmp/EICAR到目标主机的扫描目录当中,以便进行测试。
#cat /tmp/EICAR u'X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
最后,启动扫描程序,在本次实践过程中启用两个线程,可以根据目标主机数量随意修改,代码运行结果如图4-2,其中192.168.1.21主机没有发现病毒,192.168.1.22主机发现了病毒测试文件EICAR。
图4-2 集中式病毒扫描程序运行结果
参考提示 4.1.1节pyClamad模块方法说明参考http://xael.org/norman/python/pyclamd/pyclamd.html。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论