一 点睛
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
三 客户端(病毒扫描源)安装步骤
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中定期更新
# 防火墙配置
#++++++++++++++++++++++++++ 防火墙配置开始+++++++++++++++++++++++++++++++++++++++++++++++++++++++
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测试字符串,即生成具有病毒特征的字符串,便于测试。