Python之构建集中式的病毒扫描

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/87900007

一 点睛

Clam AntiVirus(ClamAV)是一款免费而且开放源代码的防毒软件,软件与病毒库的更新皆由社区免费发布,官网地址: http://www.clamav.net/lang/en/。目前ClamAV主要为Linux、Unix系统提供病毒扫描、查杀等服务。 

pyClamad(http://xael.org/norman/python/pyclamd/)是一个Python第三方模块,可让Python直接使用ClamAV病毒扫描守护进程clamd,来实现一个高效的病毒检测功能,另外,pyClamad模块也非常容易整合到我们已有的平台当中。

二 安装

1 主控端pyClamd安装

pip install pyClamd

三 客户端(病毒扫描源)安装步骤

参考:https://www.jianshu.com/p/4a427f7cb9d7

1 下载

http://www.clamav.net/downloads 下载最新版本:clamav-0.101.1.tar.gz

2 解压

tar -zxf clamav-0.101.1.tar.gz

3 编译安装

cd clamav-0.101.1
./configure --prefix=/usr/local/clamav
make
make install

4 添加用户组和组成员

groupadd clamav
useradd -g clamav clamav

5 创建日志目录和病毒目录

mkdir /usr/local/clamav/logs
mkdir /usr/local/clamav/updata

6 创建日志文件

touch /usr/local/clamav/logs/clamd.log
touch /usr/local/clamav/logs/freshclam.log

7 文件授权

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

8 修改配置文件

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

9 编辑clamd.conf

vi /usr/local/clamav/etc/clamd.conf
#Example  //注释掉这一行
#添加以下内容
LogFile /usr/local/clamav/logs/clamd.log
PidFile /usr/local/clamav/updata/clamd.pid
DatabaseDirectory /usr/local/clamav/updata

10 编辑freshclam.conf

vi /usr/local/clamav/etc/freshclam.conf
#Example  //注释掉这一行
#添加以下内容
DatabaseDirectory /usr/local/clamav/updata
UpdateLogFile /usr/local/clamav/logs/freshclam.log
PidFile /usr/local/clamav/updata/freshclam.pid

11 更新病毒库

/usr/local/clamav/bin/freshclam

12 杀毒扫描

参数:
-r 递归扫描子目录
-i 只显示发现的病毒文件
–no-summary 不显示统计信息

用法:
--帮助
/usr/local/clamav/bin/clamscan --help     
--默认扫描当前目录下的文件,并显示扫描结果统计信息            
/usr/local/clamav/bin/clamscan
--扫描当前目录下的所有目录和文件,并显示结果统计信息                    
/usr/local/clamav/bin/clamscan -r 
--扫描data目录下的所有目录和文件,并显示结果统计信息                  
/usr/local/clamav/bin/clamscan -r /data 
--扫描data目录下的所有目录和文件,只显示有问题的扫描结果            
/usr/local/clamav/bin/clamscan -r --bell -i /data  
--扫描data目录下的所有目录和文件,不显示统计信息  
/usr/local/clamav/bin/clamscan --no-summary -ri /data

13 自动定时更新和杀毒

1  3  * * *          /usr/local/clamav/bin/freshclam --quiet
20 3  * * *          /usr/local/clamav/bin/clamscan  -r /home  --remove -l /var/log/clamscan.log

14 注意

/usr/local/clamav/bin/freshclam    #更新病毒库,建议配置到crontab中定期更新 
# 防火墙配置  https://www.cnblogs.com/silent2012/p/4682770.html
#++++++++++++++++++++++++++ 防火墙配置开始+++++++++++++++++++++++++++++++++++++++++++++++++++++++
setenforce 0                       #关闭SELinux,避免远程扫描时提示无权限的问题 
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
vi /etc/sysconfig/iptables
增加规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3310 -j ACCEPT
保存退出后
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
#++++++++++++++++++++++++++ 防火墙配置结束++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
# 更新守护进程监听IP配置文件/usr/local/clamav/etc/clamd.conf ,
# 根据不同环境自行修改监听的IP,“0.0.0.0”为监听所有主机IP 
######################### 配置文件修改开始 #########################################
# TCP port address.
# Default: no
TCPSocket 3310

# TCP address.
# By default we bind to INADDR_ANY, probably not wise.
# Enable the following to provide some degree of protection
# from the outside world. This option can be specified multiple
# times if you want to listen on multiple IPs. IPv6 is now supported.
# Default: no
TCPAddr 0.0.0.0
######################### 配置文件修改结束 #########################################
/usr/local/clamav/sbin/clamd start    #启动扫描守护进程
[root@localhost sbin]# netstat -na|grep 3310  # 已启动
tcp        0      0 0.0.0.0:3310            0.0.0.0:*               LISTEN    

四 模块使用方法

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测试字符串,即生成具有病毒特征的字符串,便于测试。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/87900007