背景:
项目现场有一个服务器需要作国家二级等保整改,有一个高风险选项是需要安装防恶意代码软件,所以就考虑安装clamAV来实现。现场使用cnetos7服务器,且无外网,只能离线安装。
如果有外网直接执行以下命令就行了。
# ubuntu
sudo apt install clamav clamav-daemon -y
# centos
sudo yum install clamav clamav-update -y
离线部署实现:
1、去官网下载对应的软件包,centos就下载 .rpm软件包。
https://www.clamav.net/downloads
2、将下载的软件包上传到服务器后使用rpm命令进行安装,软件包里面已经将相关依赖这些打包好了,直接安装就行。
rpm -ivh --prefix=/usr/local/clamav clamav-1.0.3.linux.x86_64.rpm
安装成功后clamav的相关文件就被放到了/usr/local/clamav下
3、设置PATH变量
echo PATH=/usr/local/clamav/bin:/usr/local/clamav/sbin:$PATH > /etc/profile.d/path.sh
4、使用
clamav常用的命令有以下:
clamscan 命令:通用,不依赖服务,命令参数较多,执行速度稍慢,安装好clamav服务后就可以直接用。
clamdscan 命令:是一个搭配clamd常驻服务的扫毒工具,功能非常类似clamscan,执行效率较高,可用的参数较少(因为部分功能是由 clamd 控制的)。例如递归扫描不用带 -r ,默认会递归扫描子目录
freshclam:执行这个命令就会根据配置文件将病毒库下载到指定的位置,默认应该是/usr/local/share/clamav。
直接使用clamscan命令进行测试时,提示缺少相关库文件,但是clamav的安装目录里面又是存在对应文件的,所以要更新ldconfig
5、更新ldconfig
echo "/usr/local/clamav/lib64/" | sudo tee -a /etc/ld.so.conf.d/clamav.conf
ldconfig
再次测试,提示缺少病毒库。因为是离线环境。所以就搭建一个有外网的机器,使用freshclam下载病毒库后拷贝过来。
将病毒库解压到指定目录下,默认是放在/usr/local/share/clamav下的。
再次测试就正常了
因为不需要进行频繁的扫描或扫描大量文件,只是偶尔执行扫描,那么 clamscan 可能已经足够了。
如果是希望进行频繁的扫描或扫描大量文件,那么使用 clamdscan 和 clamd 守护进程可能是一个更有效的选择。
配置clamd守护进程就需要修改clamd的配置文件。
两个配置文件:
clamd.conf:clamd 守护进程的配置文件。当你使用 clamdscan(而不是 clamscan)命令时,该命令实际上会与后台运行的 clamd 守护进程进行交互来执行扫描。因此,clamdscan 的行为会受到 clamd.conf 文件中的配置的影响。这个文件包含了与守护进程行为、日志记录、扫描选项等相关的设置。
freshclam.conf:ClamAV 病毒数据库更新工具 freshclam 的配置文件。当你使用 freshclam 命令来更新你的病毒数据库时,该命令会根据这个配置文件来运行。这个文件包含了与更新源、更新频率、代理设置、日志记录等相关的设置。
clamd配置:
1、先创建存放日志、socket和pid的文件目录,并创建对应的日志文件。
2、/usr/local/clamav/etc这个目录下有两个配置文件模板,可以根据这两个模板创建配置文件。
# 进入/usr/local/clamav/etc目录
cp -a clamd.conf.sample clamd.conf
cp -a freshclam.conf.sample freshclam.conf
3、修改配置文件
# 注释掉Example这一行
LogFile /usr/local/clamav/logs/clamd.log
LogFileMaxSize 20M
PidFile /usr/local/clamav/clamd.pid
DatabaseDirectory /var/lib/clamav
LocalSocket /usr/local/clamav/socket/clamd.socket
DatabaseDirectory就是指定病毒库的存放位置
如果需要实时更新病毒库,freshclam.conf也需要进行配置
[root@CentOS7 etc]# cat freshclam.conf | grep -Ev '^#|^$'
DatabaseDirectory /var/lib/clamav
UpdateLogFile /usr/local/clamav/logs/freshclam.log
PidFile /usr/local/clamav/pid/freshclam.pid
DatabaseMirror database.clamav.net
Checks 24
Checks 24表示1h检查一次,一天24h,默认是2h检查一次病毒库更新没,更新了就直接拉取到本地。
DatabaseDirectory指定使用freshman命令下载的病毒库存放位置。
创建clamav用户
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav
更改目录权限:
chown -R clamav:clamav /usr/local/clamav
全部配置好后进行测试:
提示配置文件是在/usr/local/etc下面找的,所以需要将配置文件软链接到这个下面。
软连接:
[root@CentOS7 ~]# # 软链接源文件要使用绝对路径
[root@CentOS7 ~]# ln -s /usr/local/clamav/etc/freshclam.conf /usr/local/etc/
[root@CentOS7 ~]# ln -s /usr/local/clamav/etc/clamd.conf /usr/local/etc/
再次进行测试:
提示没有病毒库,就需要先使用 生成病毒库或者将离线的病毒库拷贝到这个目录下
在线生成病毒库:
再次进行测试:
clamd正常运行,再打开一个窗口测试clamdscan。
最后将freshclam和clamd交给systemd进行托管,freshclam用于定时更新病毒库,当 clamd 守护进程启动并在后台运行时,它会加载病毒签名数据库到内存中。这使得病毒扫描请求(如通过 clamdscan 命令)能够迅速地与这些内存中的签名进行比较,大大提高了扫描效率。
clamd的systemd文件:
# centos7的systemd文件是放在/usr/lib/systemd/system/
# ubuntu的systemd文件时放在/lib/systemd/system/
vim /usr/lib/systemd/system/clamd.service
[Unit]
Description=Clam AntiVirus userspace daemon
Documentation=man:clamd(8) man:clamd.conf(5) https://docs.clamav.net/
# Check for database existence
ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc}
ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}
[Service]
type=simple
ExecStart=/usr/local/clamav/sbin/clamd --foreground=true
# Reload the database
ExecReload=/bin/kill -USR2 $MAINPID
StandardOutput=syslog
TimeoutStartSec=420
[Install]
WantedBy=multi-user.target
测试是否能正常启动,启动成功
freshclam的systemd文件
vim /usr/lib/systemd/system/freshclam.service
[Unit]
Description=ClamAV virus database updater
Documentation=man:freshclam(1) man:freshclam.conf(5) https://docs.clamav.net/
# If user wants it run from cron, don't start the daemon.
# ConditionPathExists=!/etc/cron.d/clamav-update
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/clamav/bin/freshclam -d --foreground=true
[Install]
WantedBy=multi-user.target
启动检查:
clamscan和clamdscan区别说明:
clamscan 和 clamdscan 都是 ClamAV 的扫描工具,但它们的工作方式略有不同:
clamscan:
独立运行: clamscan 是一个独立的命令行扫描工具,每次执行都会启动一个新的进程。
效率: 由于它每次运行时都需要加载病毒数据库,所以相对较慢,特别是在扫描大量文件或多次扫描时。
配置: clamscan 不依赖 clamd.conf,所有的配置都是基于命令行参数。
clamdscan:
依赖守护进程: clamdscan 与后台运行的 clamd 守护进程进行交互来执行扫描。这意味着病毒数据库已经被 clamd 加载并保持在内存中。
效率: 由于不需要每次都重新加载病毒数据库,clamdscan 的扫描速度通常更快。
配置: clamdscan 的行为会受到 clamd.conf 文件中的配置的影响。
总的来说,如果你需要进行频繁的扫描或扫描大量文件,那么使用 clamdscan 和 clamd 守护进程可能是一个更有效的选择。但如果你只是偶尔执行扫描,那么 clamscan 可能已经足够了。
https://blog.csdn.net/leiwuhen92/article/details/125934412
https://blog.ncyupu.com/os/centos/2023/06/06/213.html