参考文献

ClamAV

  • ClamAV是一个开源(GPLv2)反病毒工具包,专为在邮件网关上扫描电子邮件而设计。它提供了许多实用程序,包括一个灵活的、可扩展的多线程守护进程、一个命令行扫描程序和用于自动数据库更新的高级工具。该软件包的核心是以共享库的形式提供的防病毒引擎。

安装

使用软件包安装

  • 默认的从源代码安装将进入 /usr/local ,其中包含:

    • 应用程序:/usr/local/bin
    • 守护进程:/usr/local/sbin
    • 库文件:/usr/local/lib
    • 头文件:/usr/local/include
    • 配置文件:/usr/local/etc/
    • 病毒库:/usr/local/share/clamav/
  • 使用Linux软件包安装,默认安装在 /usr 中,其中包含:

    • 应用程序:/usr/bin
    • 守护进程:/usr/sbin
    • 库文件:/usr/lib
    • 头文件:/usr/include
    • 配置文件:/etc/clamav
    • 病毒库:/var/lib/clamav/

配置ClamAV

  • 可以使用clamconf生成配置文件

    1
    2
    3
    clamconf -g freshclam.conf > freshclam.conf
    clamconf -g clamd.conf > clamd.conf
    clamconf -g clamav-milter.conf > clamav-milter.conf
    • 使用FreshClam之前需要创建一个freshclam.conf
    • 使用ClamD之前需要创建一个
    • 使用ClamAV-Milter 之前需要创建一个clamav-milter.conf

freshclam

  • freshclam 是自动更新病毒库的工具。它可以配置为在两种模式下工作:

    • 交互式 - 从命令行按需执行
    • 守护进程 - 静默在后台自动执行
  • 根据示例配置文件创建 freshclam.conf 文件

    1
    2
    cp -a /usr/local/etc/freshclam.conf.sample /usr/local/etc/freshclam.conf
    sed -i 's/^Example/#Example/g' /usr/local/etc/freshclam.conf
  • 编辑 /usr/local/etc/freshclam.conf,添加以下内容

    1
    2
    3
    UpdateLogFile /var/log/freshclam.log
    LogTime yes
    DatabaseOwner root

    参数说明
    **UpdateLogFile:**指定更新日志文件
    **LogTime:**配置日志文件显示时间戳
    **DatabaseOwner:**指定病毒库文件所属用户
    更多配置参数可执行 man freshclam.conf 进行查询

  • 创建日志文件

    1
    2
    3
    touch /var/log/freshclam.log
    chmod 600 /var/log/freshclam.log
    chown clamav /var/log/freshclam.log
  • 更新病毒库(首次更新建议手动前台执行)

    1
    freshclam
  • 为了保证病毒库能持续升级更新,可执行以下命令启动freshclam守护进程实现自动更新

    1
    freshclam -d
  • 若不想freshclam长期占用系统资源,可通过crontab自定义设置定期更新

    1
    2
    # 每5分钟更新一次病毒库
    */5 * * * * /usr/local/bin/freshclam

ClamD

  • ClamD 是一个多线程守护程序,它使用 libclamav 扫描文件以查找病毒。通过修改 clamd.conf 可以配置扫描行为以满足大多数需求。

clamd.conf

  • 目前,ClamAV 要求先配置 clamd.conf 文件,然后才可以运行守护进程,至少需要注释掉 “Example” 行,否则 clamd 将认为配置无效。

  • 根据示例配置文件创建 clamd.conf 文件

    1
    2
    cp -a /usr/local/etc/clamd.conf.sample /usr/local/etc/clamd.conf
    sed -i 's/^Example/#Example/g' /usr/local/etc/clamd.conf
  • 编辑 /usr/local/etc/clamd.conf,添加以下内容

    1
    2
    3
    4
    5
    LogFile /var/log/clamd.log
    LogTime yes
    LocalSocket /run/clamav/clamd.sock
    LocalSocketMode 660
    User root

    参数说明
    **LogFile:**指定 clamd 日志文件
    **LogTime:**配置日志文件显示时间戳
    **LocalSocket:**指定 socket 文件路径
    **LocalSocketMode:**指定 socket 文件权限
    **User:**设置运行 clamd 的用户身份
    更多配置参数可执行 man clamd.conf 进行查询

启动扫描

1
clamd

ClamDScan

  • ClamDScan 是一个 ClamD 客户端,它大大简化了使用 Clamd 扫描文件的任务。它通过 clamd.conf 中指定的套接字向 clamd 守护进程发送命令,并在守护进程完成所有请求的扫描后生成扫描报告。因此在运行 ClamDScan 之前,必须先运行一个 ClamD 实例。

使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clamdscan [*options*] [*file/directory/-*]

# 扫描单个文件
clamscan /path/to/your/file

# 扫描整个目录
clamscan -r /path/to/directory

# 自动删除检测到的病毒
clamscan --remove -r /path/to/directory

# 为扫描结果生成报告
clamscan -r /path/to/directory > scanreport.txt

# 在扫描时显示病毒被发现的信息
clamscan -r --bell -i /path/to/directory

# 只显示找到的病毒信息
clamscan --no-summary -ri /tmp

Clamdtop

  • clamdtop 是用于监视 的一个或多个实例的工具 clamd 。它有一个彩色的 ncurses 界面,该界面显示每个排队的作业、内存使用情况以及有关已连接 clamd 实例的已加载签名数据库的信息。默认情况下,它将尝试连接到 中定义的 clamd.conf 本地 clamd 。可以在命令行中指定其他 clamd 实例。