ClamAV是一个开源的用来探测木马、病毒、恶意软件和恶意线程的抗病毒引擎
支持探测的文件类型和程序类型想当广泛,一般的防毒功能足够了
当然并不说有它就万无一失了,之所以部署它,是因为检查的时候是一个加分项
一般情况下Linux生产主机是不强制要求部署防毒软件的
通过分析守护进程模式下的配置文件,发现可用性蛮高,可以作为个人Linux杀毒软件使用
官网:https://www.clamav.net
下载地址:https://www.clamav.net/downloads
官方文档地址:https://www.clamav.net/documents/installing-clamav
建议下载离线文档 clamdoc.pdf
参照《 CentOS6实验机模板搭建部署》部署克隆两台实验主机,一台作为server,一台作为client
后续会实验使用yum的方式安装配置clamav,应该会在近期发布该博文
对克隆的两台实验主机均部署安装
需要的支持软件包有:
zlib
zlib-devel
openssl
openssl-devel (即是libssl-devel)
gcc
gcc-c++
make
check
bzip2
bzip2-devel
libxml2
libxml2-devel
yum -y install \
zlib zlib-devel openssl openssl-devel \
gcc gcc-c++ make bzip2 bzip2-devel \
libxml2 libxml2-devel check
# 需要提前创建clamav用户和组,如果使用非默认用户编译安装
# 则 ./configure --with-user=XXX --with-group=XXX
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
# 编译安装
tar -xf clamav-0.100.0.tar.gz
cd clamav-0.100.0
./configure --prefix=/usr/local/clamav \
--enable-experimental
# 支持一些新特性
# 可以使用参数打开 milter 模式:--enable-milter
# 如果需要使用 milter 模式 ,需要加装 sendmail-devel
# 所谓的 milter 模式,起源于sendmail,是一个功能插件
# 主要功能是提供API,让第三方软件访问邮件,分析修改邮件内容
# 该模式是专门为邮件服务器提供的邮件查杀模式
# 一般非邮件服务器系统不必要使用该模式
# yum -y install sendmail-devel
# chkconfig sendmail off
make && make install
# 刷新库文件
/sbin/ldconfig -v
# 配置命令路径
echo 'CLAMAV_HOME=/usr/local/clamav'>>/etc/profile
echo 'export PATH=$CLAMAV_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
1° 邮件告警部署:
依据《CentOS6u9 简单邮件告警部署》部署命令邮件告警功能
2° 探测功能守护模式配置:
# 创建守护模式的运行目录,并授权给clamav用户
mkdir -pv /usr/local/clamav/run/{log,pid,tmp,data,socket}
chown clamav: /usr/local/clamav/run -R
cd /usr/local/clamav/etc
# clamd.conf 守护进程模式的配置文件
# 所谓守护进程模式,就是单独的一个守护进程
# 其他主机通过配置 clamd.conf 连接到某一个主机上的clamav守护进程
# 然后让该守护进程对自己的某个或某些目录进行扫描
# 根据模板 clamd.conf.sample 配置 clamd.conf
# 相关参数参见模板注释,注释想当简单易懂
cat>clamd.conf<local/clamav/run/log/clamd.log
LogFileMaxSize 100M
LogTime yes
LogVerbose yes
PidFile /usr/local/clamav/run/pid/clamd.pid
TemporaryDirectory /usr/local/clamav/run/tmp
DatabaseDirectory /usr/local/clamav/run/data
ExtendedDetectionInfo yes
LocalSocket /usr/local/clamav/run/socket/clamd.socket
# 绑定监听端口至服务器对外IP地址上
TCPAddr 192.168.77.10
TCPSocket 3310
# 忽略扫描路径
ExcludePath ^/proc/
ExcludePath ^/sys/
# 扫描路径的最深层数
MaxDirectoryRecursion 200
# 发现病毒时的操作配置 参数 %v 会被替换成病毒名
VirusEvent /bin/echo "%v" | /bin/mailx -s "ClamAV探测告警" [email protected]
EOF
记得更换IP地址和告警邮箱收件地址
3° 病毒库升级配置:
配置文件 freshclam.conf 是升级病毒库时使用的配置信息文件
cat>freshclam.conf<# 病毒库目录,必须和clamd.conf中的配置保持一致
DatabaseDirectory /usr/local/clamav/run/data
UpdateLogFile /usr/local/clamav/run/log/freshclam.log
LogFileMaxSize 100M
LogTime yes
LogVerbose yes
PidFile /usr/local/clamav/run/pid/freshclam.pid
# 需要配置中国的镜像网址,.cn即代表中国
DatabaseMirror db.cn.clamav.net
DatabaseMirror database.clamav.net
# 如果升级成功,是否让clamd重新加载病毒库
# 指定clamd.conf路径即可
NotifyClamd /usr/local/clamav/etc/clamd.conf
# 升级成功后执行命令,比如邮件告警
OnUpdateExecute /bin/echo "升级成功" | /bin/mailx -s "ClamAV升级告警" XXXXXX@qq.com
# 升级失败后执行命令,比如邮件告警
OnErrorExecute /bin/echo "升级失败" | /bin/mailx -s "ClamAV升级告警" XXXXXX@qq.com
# 当版本过时的时候执行的命令,如邮件告警
# 可以使用 %v 参数,该参数会被替换成新的版本号
OnOutdatedExecute /bin/echo "版本过期,最新版本 %v" | /bin/mailx -s "ClamAV版本告警" XXXXXX@qq.com
EOF
记得更换告警邮箱收件地址
4° 启动:
clamconf
# 配置检查,检查当前的配置状态
# 会检查出当前状态下缺少的配置步骤或者配置文件
freshclam
# 升级病毒库,初次安装后必须首先执行,执行后才可进行病毒检查
# 可以将该命令添加到crontab里,就是使用自动任务的定时更新库模式了
# 病毒库的升级是增量的升级方式
freshclam -d
# 升级的守护模式功能
# 默认一天升级12次,增量的升级方式
# 也就是每隔两小时就会收到升级成功或者失败的邮件告警
# ps -ef|grep freshclam
# 看到进程
/usr/local/clamav/sbin/clamd
# 守护进程模式启动
# 在启动之前需要使用 freshclam 获取和升级病毒库
# 我们并没有将sbin目录加到PATH里,因此要全路径启动
5° 查杀测试:
源码安装包中准备了各种支持查杀的木马病毒文件样本
clamscan -r -l /tmp/scan.txt /tmp/clamav-0.100.0
# 扫描clamav的安装目录进行测试
# 这是非守护模式的一次性单目录扫描
# 扫描结果会记录在 scan.txt 文本文件中
# 部署后,扫描前,需要升级病毒库
# 该测试不会使用 clamd.conf 配置文件,也就不会告警出来了
clamdscan -l /tmp/scan.txt /tmp/clamav-0.100.0
# 使用配置文件中指定的守护进程服务器扫描目录
# 需要提前配置 clamd.conf 文件
# 运行clamd的用户要拥有被扫描的源文件的访问权限
# 可以根据该测试,调整 clamd.conf 的配置
# 比如是否忽略pdf文件和exe文件的探测:
echo 'ScanPDF no'>>/usr/local/clamav/etc/clamd.conf
echo 'ScanPE no'>>/usr/local/clamav/etc/clamd.conf
rm -rf /tmp/scan.txt
ps -ef|grep clamd|grep -v grep|awk '{print $2}'|xargs kill -9
/usr/local/clamav/sbin/clamd
clamdscan -l /tmp/scan.txt /tmp/clamav-0.100.0
# 查看结果,发现没有了以.pdf文件后缀和以.exe文件后缀被探测出来
# 如果是XXX.exe.zip 还是会被探测出来的
扫描出来48个问题文件,收到46封告警邮件,也就是说探测到一个就会告警
至于少了两个告警,是因为一瞬间QQ邮箱收到从某个邮箱发送的大量邮件,该邮箱被QQ邮箱屏蔽掉了
这个屏蔽行为是暂时的,大约一天内会解封,可以更换另外的邮箱去测试
注意:修改配置文件需要重启守护程序,源码编译安装的守护程序没有找到restart或者reload命令,只能手动kill掉,重启
邮件标题的乱码是因为Linux主机默认UTF8,需要做GBK的转换才能正常显示中文
6° 守护模式简单管理:
echo 'PING' |nc 192.168.77.10 3310
echo 'VERSION' |nc 192.168.77.10 3310
echo 'RELOAD' |nc 192.168.77.10 3310
echo 'SHUTDOWN' |nc 192.168.77.10 3310
# 使用nc命令打开端口通讯,向守护进程传递相应的命令即可实现相应功能
cd /usr/local/clamav/etc
cat>clamd.conf<192.168.77.10
TCPSocket 3310
EOF
# 配置client的守护模式配置文件,指向server的IP和端口
# 再次使用守护进程模式查杀测试
# 不需要创建和配置实例运行目录以及配置freshclam配置文件
# 会根据服务器主机的 clamd.conf 文件的配置
# 比如忽略某些类型的文件探测,进行探测本机的目录
cd /tmp/clamav-0.100.0/test/
chattr +i clam.7z
rm -rf *
# 我们删掉客户机上的测试目录中的所有问题文件,只保留一个
clamdscan -l /tmp/scan.txt /tmp/clamav-0.100.0
我们保留了客户机上的一个测试文件,然后配置 clamd.conf 文件,使用server上的服务进行本地目录探测
最终探测到该文件,并发出了邮件告警,客户机的 clamd.conf 文件并没有配置任何邮件告警
也没有部署命令邮件告警功能,所以完全使用的server端的功能
如果要升级ClamAV,需要卸载已经安装的旧版本:
cd clamav-0.100.0
./configure --prefix=/usr/local/clamav \
--enable-experimental
# 如果忘记编译安装时候的参数配置,可以使用clamconf进行检测
# clamconf命令会检测配置的参数、配置文件缺失以及编译安装时候使用的参数
make uninstall
# 最后删掉相应的目录和自主生成的配置文件即可
[TOC]