一、clamav 开源杀毒软件

Clamav这个杀毒软件是我之前centos服务器中毒后发现的!杀毒效率和系统占用率给人的印象非常深刻!

这个Clamav是思科 Cisco 自2004年就开始的开源项目,在印象中Cisco基本没有过免费的东西,不过这个还真的很好用!

image.png

ClamAV的®是一个开源(GPL)的杀毒引擎,包括电子邮件扫描,Web扫描和终点的安全使用防病毒引擎。它提供了许多实用程序,包括灵活且可扩展的多线程守护程序,命令行扫描程序以及用于自动数据库更新的高级工具。

网站地址:http://www.clamav.net/

软件特点

  • ClamAV旨在快速扫描文件。
  • 实时保护(仅Linux)。我们的扫描守护程序支持在现代版本的Linux上进行按访问扫描,包括阻止文件访问直到文件被扫描为止的功能。
  • ClamAV可检测超过100万种病毒,蠕虫和特洛伊木马,包括Microsoft Office宏病毒,移动恶意软件和其他威胁。
  • 内置的字节码解释器允许ClamAV签名编写器创建和分发非常复杂的检测例程,并远程增强扫描仪的功能。
  • 签名签名数据库可确保ClamAV仅执行可信签名定义
  • 命令行扫描器
  • sendmail的Milter界面
  • 先进的数据库更新程序,支持脚本更新和数字签名
  • 病毒数据库每天更新多次
  • 内置对所有标准邮件文件格式的支持
  • 内置支持各种存档格式,包括Zip,RAR,Dmg,Tar,Gzip,Bzip2,OLE2,Cabinet,CHM,BinHex,SIS等
  • 内置对UPX,FSG,Petite,NsPack,wwpack32,MEW,Upack打包的ELF可执行文件和可移植可执行文件的内置支持,并被SUE,Y0da Cryptor等混淆
  • 内置支持流行的文档格式,包括MS Office和MacOffice文件,HTML,Flash,RTF和PDF

软件支持多种平台

  • GNU/Linux
    • Alpine
      • 3.11 (64bit)
    • Ubuntu
      • 18.04 (64bit, 32bit)
      • 20.04 (64bit)
    • Debian
      • 9 (64bit, 32bit)
      • 10 (64bit, 32bit)
    • CentOS
      • 7 (64bit, 32bit)
      • 8 (64bit)
    • Fedora
      • 30 (64bit)
      • 31 (64bit)
  • UNIX
    • FreeBSD
      • 11 (64bit)
      • 12 (64bit)
    • macOS
      • 10.13 (High Sierra)
      • 10.15 (Catalina)
  • Windows
    • 7 (64bit, 32bit)
    • 10 (64bit, 32bit)

系统运行最低要求

以下最低推荐系统要求是对Cisco提供的标准ClamAV签名数据库使用clamscan或clamd和clamdscan二进制文件。

建议的最低ClamAV 内存

  • FreeBSD和Linux服务器版本:2 GiB +
  • Linux非服务器版:2 GiB +
  • Windows 7和10 32位:2 GiB +
  • Windows 7和10 64位:3 GiB +
  • macOS:3 GiB +

推荐的最低ClamAV CPU

1个CPU在2.0 Ghz +

所需的最小可用硬盘空间

对于ClamAV应用程序,我们建议有5 GB的可用空间。该建议是对每个操作系统的建议磁盘空间的补充。

我们试下Linux版本和Windows版本的Calmav。

二、Clamav linux版本

2.1 安装Clamav

我的服务器是CentOS Linux release 7.9.2009
安装也很简单:

yum install -y epel-release
yum install -y clamav
yum install -y clamd

这样就安装完成了!

2.2 关于Clamav的配置

在配置的时候要注意,目前在线安装的都是最新版本!!!
ClamAV 0.103.1版本通过上面安装后各种日志文件和病毒库数据文件都是默认在“ /var/lib/clamav”位置!!!
下面创建文件之类的或者修改配置等都是为了管理防止在指定位置!!!

换就话说就是不配置,也是可以直接使用!!!

也就是说如果懒的话,或者只用一次的话,直接可以扫描了!!!

默认配置查看命令,需要用到clamconf

2.2.1 Clamconf

clamconf是ClamAV提供的用于检查整个系统配置的工具,因为它与ClamAV的安装有关。在运行时,它会显示配置在编译时ClamAV的,重要的OS的细节,两者的内容(和有效性)时使用的值clamd.conf,并freshclam.conf与其他重要引擎,数据库,平台,构建信息。

它还可以生成示例配置文件clamd.conf和freshclam.conf。

要使用clamconf,并查看其提供的所有信息,只需运行以下命令:

clamconf

有关的更多详细信息clamconf,请运行:

man clamconf

或者

clamconf --help

image.png

2.3 病毒库更新

2.3.1 freshclam工具

freshclam是Clam AntiVirus的自动数据库更新工具。可以将其配置为以两种模式工作:

  • interactive 交互式-通过命令行执行程序
  • daemon 守护程序-在后台静默

freshclam 是一个高级工具:它支持脚本更新(而不是每次更新时都传输整个CVD文件,它仅通过特殊脚本传输最新数据库与当前数据库之间的差异),通过DNS进行数据库版本检查,代理服务器(带有身份验证) ,数字签名和各种错误情况。

快速测试:不带任何参数(以超级用户身份)运行freshclam并检查输出。

freshclam
freshclam [options]

    --help               -h              显示此帮助
    --version            -V              打印版本号并退出
    --verbose            -v              详细
    --debug                              启用调试消息
    --quiet                              仅输出错误消息
    --no-warnings                        不打印和记录警告
    --stdout                             写入stdout替换stderr。不影响“调试”消息。
    --show-progress                      显示下载进度百分比

    --config-file=FILE                   从指定文件中读取配置。
    --log=FILE           -l FILE         将log日志保存到指定文件
    --daemon             -d              在守护程序模式下运行 (daemon mode)
    --pid=FILE           -p FILE         将守护进程的pid保存在FILE中
    --foreground         -F              Don't fork into background (for use in daemon mode).
    --user=USER          -u USER         Run as USER
    --no-dns                             强制使用旧的非DNS验证方法
    --checks=#n          -c #n           每天检查的次数, 1 <= n <= 50
    --datadir=DIRECTORY                  将新数据库下载到指定目录中
    --daemon-notify[=/path/clamd.conf]   发送RELOAD命令到 clamd
    --local-address=IP   -a IP           Bind to IP for HTTP downloads
    --on-update-execute=COMMAND          更新完成后执行新的命令
                                         Use EXIT_1 to return 1 after successful database update.
    --on-error-execute=COMMAND           命令如果发生错误,则执行命令
    --on-outdated-execute=COMMAND        软件过时时执行新的Execute COMMAND
    --update-db=DBNAME                   仅更新数据库 DBNAME

2.3.2 freshclam.conf配置

freshclam.conf 文件位于 /etc/freshclam.conf

修改配置文件,文件默认注释,去掉注释即可!其他的根据自己情况修改!

DatabaseDirectory /var/lib/clamav               病毒库存放位置
UpdateLogFile /var/log/clamav/freshclam.log     更新日志
PidFile /var/run/freshclam.pid                  更新进程 默认禁止的!
DatabaseMirror database.clamav.net              病毒库更新地址
Checks 72                                       数据库更新间隔时间默认12小时,也就是一天两次。
ConnectTimeout 60                               数据库更新超时 默认30s
LogFileMaxSize 2M

如果一切正常,则可以在/var/log中创建日志文件(确保目录由clamav或freshclam将以其身份运行的任何用户所有):

mkdir -p /var/log/clamav/ 日志文件夹
touch /var/log/clamav/freshclam.log 创建日志文件
chmod 666 /var/log/clamav/freshclam.log 授予读取和写入权限
chown clamupdate /var/log/clamav/freshclam.log

配置完freshclam.conf,要freshclam在daemon模式下运行,请执行:

freshclam -d

另一种方法是使用cron守护程序。可以定期更新病毒库,您必须将以下行添加到root或clamav用户的crontab中:

crontab -e

00 01,13 * * * /usr/bin/freshclam --quiet

image.png

2.4 病毒扫描的日志

touch /var/log/clamav/clamd.scan             创建日志文件
chmod 644 /var/log/clamav/clamd.scan         授予读取和写入权限
chown clamscan:clamscan /var/log/clamd.scan

修改scan.conf 文件位于 /etc/clamd.d/scan.conf

LogFile /var/log/clamav/clamd.scan
PidFile /run/clamd.scan/clamd.pid
DatabaseDirectory /var/lib/clamav
LogFileMaxSize 2M
TCPAddr 127.0.0.1
TCPSocket 3310

2.5 Clamav 的使用

ClamAV有两个命令:clamdscan、clamscan

clamdscan命令是用yum安装方法才能使用,需要启动clamd服务,执行速度快
clamscan命令通用,如果是源码安装的就使用这个命令。不依赖服务,命令参数较多,执行速度稍慢

用clamdscan扫描,需要开始服务才能使用。速度快,不用带-r,默认会递归扫描子目录

clamdscan /usr

clamscan:
用clamscan扫描,不需要开始服务就能使用。速度慢,要带-r,才会递归扫描子目录

clamscan -r /usr

这个命令不仅会显示找到的病毒,正常的扫描文件也会显示出来。

2.5.1 clamscan命令

clamscan [选项] [文件/目录/-]

    --help -h                                    显示此帮助
    --version -V                                 打印版本号
    --verbose -v                                 详细
    --archive-verbose -a                         在扫描的档案中显示文件名
    --debug                                      启用libclamav的调试消息
    --quiet                                      仅输出错误消息
    --stdout                                     写入stdout替代stderr。不影响“调试”消息。
    --no-summary                                 在扫描结束时禁用摘要
    --infected -i                                仅打印受感染的文件
    --suppress-ok-results -o                     跳过打印OK文件
    --bell                                       病毒检测的声音

    --tempdir =DIRECTORY                         在目录中创建临时文件
    --leave-temps [=yes/no(*)]                   不删除临时文件
    --gen-json [=yes/no(*)]                      生成扫描文件的JSON描述。 JSON将被打印,并且- 如果启用--leave-temps,则删除到temp目录。
    --database = FILE / DIR -d FILE / DIR        从FILE加载病毒数据库或从DIR加载所有受支持的db文件
    --official-db-only [=yes/no(*)]              仅加载官方签名
    --log = FILE -l FILE                         将扫描报告保存到FILE
    --recursive [=yes/no(*)] -r                  递归扫描子目录
    --allmatch [=yes/no(*)] -z                   找到匹配项后继续在文件内扫描
    --cross-fs [=yes/no(*)]                      扫描其他文件系统上的文件和目录
    --follow-dir-symlinks [=0/1(*)/2]            跟随目录符号链接(0 =永不,1 =直接,2 =始终)
    --follow-file-symlinks [=0/1(*)/2]           跟随文件符号链接(0 =从不,1 =直接,2 =始终)
    --file-list = FILE -f                        FILE从FILE扫描文件
    --remove [=yes/no(*)]                        删除受感染的文件。小心!
    --move =DIRECTORY                            将受感染文件移到目录中
    --copy = DIRECTORY                           将受感染的文件复制到目录中
    --exclude = REGEX                            不扫描与REGEX匹配的文件名
    --exclude-dir = REGEX                        不扫描与REGEX匹配的目录
    --include = REGEX                            仅扫描与REGEX匹配的文件名
    --include-dir = REGEX                        仅扫描与REGEX匹配的目录

    --bytecode [=yes/no(*)]                      从数据库加载字节码
    --bytecode-unsigned [=yes/no(*)]             加载未签名的字节码
            **警告**:切勿运行不受信任来源的字节码签名。
            这样做可能会导致任意代码执行。
    --bytecode-timeout = N                       设置字节码超时(以毫秒为单位)
    --statistics [= none(*)/ bytecode / pcre]   收集并打印执行统计信息
    --detect-pua [=yes/no(*)]                     检测可能有害的应用程序
    --exclude-pua = CAT                           跳过类别CAT的PUA信号
    --include-pua = CAT                           加载CAT类的PUA信号
    --detect-structured [=yes/no(*)]              检测结构化数据(SSN,信用卡)
    --structured-ssn-format = X                   SSN格式(0 =正常,1 =剥离,2 =两者)
    --structured-ssn-count = N                    最小SSN计数以生成检测
    --structured-cc-count = N                     最小CC计数以生成检测
    --structured-cc-mode = X                      CC模式(0 =贷方借方和私人标签,仅1 =贷方卡
    --scan-mail [=yes/no(*)]                      扫描邮件文件
    --phishing-sigs [=yes/no(*)]                  启用基于电子邮件签名的网络钓鱼检测
    --phishing-scan-urls [=yes/no(*)]             启用基于URL签名的网络钓鱼检测
    --heuristic-alerts [=yes/no(*)]               启发式警报
    --heuristic-scan-precedence [=yes/no(*)]      找到启发式匹配项后立即停止扫描
    --normalize [=yes/no(*)]                      标准化html,脚本和文本文件。使用normalize = no获得yara兼容性
    --scan-pe [=yes/no(*)]                        扫描PE文件
    --scan-elf [=yes/no(*)]                       扫描ELF文件
    --scan-ole2 [=yes/no(*)]                      扫描OLE2容器
    --scan-pdf [=yes/no(*)]                       扫描PDF文件
    --scan-swf [=yes/no(*)]                       扫描SWF文件
    --scan-html [=yes/no(*)]                      扫描HTML文件
    --scan-xmldocs [=yes/no(*)]                   扫描基于xml的文档文件
    --scan-hwp3 [=yes/no(*)]                      扫描HWP3文件
    --scan-archive [=yes/no(*)]                   扫描存档文件(libclamav支持)
    --alert-broken [=yes/no(*)]                   警报损坏的可执行文件(PE和ELF)
    --alert-broken-media [=yes/no(*)]             警报损坏的图形文件(JPEG,TIFF,PNG,GIF)
    --alert-encrypted [=yes/no(*)]                关于加密档案和文档的警报
    --alert-encrypted-archive [=yes/no(*)]        加密档案警报
    --alert-encrypted-doc [=yes/no(*)]            加密文档警报
    --alert-macros [=yes/no(*)]                   关于包含VBA宏的OLE2文件的警报
    --alert-exceeds-max [=yes/no(*)]              对超过最大文件大小,最大扫描大小或最大递归限制的文件发出警报
    --alert-phishing-ssl [=yes/no(*)]             在URL中包含SSL不匹配的电子邮件时发出警报
    --alert-phishing-cloak [=yes/no(*)]           对包含隐藏URL的电子邮件发出警报
    --alert-partition-intersection [=yes/no(*)]   包含分区交叉点的原始DMG图像文件的警报
    --nocerts                                     禁用PE文件中的authenticode证书链验证
    --dumpcerts                                   在PE文件中转储Authenticode证书链

    --max-scantime =#n                           超过此时间的扫描时间将被跳过,并假定为干净时间(毫秒)
    --max-filesize =#n                           大于此大小的文件将被跳过并假定为干净
    --max-scansize =#n                           每个容器文件要扫描的最大数据量(**)
    --max-files =#n                              每个容器文件要扫描的最大文件数(**)
    --max-recursion =#n                          容器文件的最大归档递归级别(**)
    --max-dir-recursion =#n                      最大目录递归级别
    --max-embeddedpe =#n                         检查嵌入式PE的最大大小文件
    --max-htmlnormalize =#n                      要规范化的HTML文件的最大大小
    --max-htmlnotags =#n                         要扫描的规范化HTML文件的最大大小
    --max-scriptnormalize =#n                    要规范化的脚本文件的最大大小
    --max-ziptypercg =#n                         要重新分析的zip的最大大小
    --max-partitions =#n                         磁盘映像中要扫描的最大分区数
    --max-iconspe =#n                            PE文件中要扫描的最大图标数
    --max-rechwp3 =#n                            对HWP3解析函数的最大递归调用
    --pcre-match-limit =#n                       对PCRE匹配函数的最大调用数。
    --pcre-recmatch-limit =#n                    对PCRE匹配函数的最大递归调用。
    --pcre-max-filesize =#n                      执行PCRE subsig匹配的最大文件大小。
    --disable-cache                               禁用对扫描文件的哈希和进行缓存和缓存检查。

2.5.2 clamdscan命令

clamdscan [选项] [文件/目录/-]

    --help -h                                     显示此帮助
    --version -V                                  打印版本号并退出
    --verbose -v                                  详细
    --quiet                                       安静,仅输出错误消息
    --stdout                                      写入stdout而不是stderr。不影响“调试”消息。
                                      
    --log = FILE -l FILE                          将扫描报告保存在FILE中
    --file-list = FILE -f                         FILE从FILE扫描文件
    --ping -p A [:I]                             以可选间隔[I]最多响起[P]次Ping,直到响应为止。
    --wait -w                                     等待30秒钟,开始Clamd启动。 (可选)与--ping一起使用以设置尝试[A]和间隔[I]来检查Clamd。
    --remove                                      删除受感染的文件。小心!
    --move =目录                                  将受感染文件移到目录中
    --copy =目录                                  将受感染的文件复制到目录中
    --config-file = FILE                          从FILE中读取配置。
    --allmatch -z                                 找到匹配项后,继续在文件中进行扫描。
    --multiscan -m                                强制进行MULTISCAN模式
    --infected -i                                 仅打印受感染的文件
    --no-summary                                  在扫描结束时禁用摘要
    --reload                                     请求Clamd重新加载病毒数据库
    --fdpass                                     将文件描述符传递给clamd(如果clamd以其他用户身份运行,则很有用)
    --stream                                     强制将流文件塞满(用于调试和单元测试) 

2.5.3 常用命令使用

1.扫描当前目录下的所有文件

calmscan

2.扫描指定的单个文件

clamscan /bin/uame  

3.扫描/home目录下的所有文件和子目录

clamscan -r /home

4.扫描只显示找到的病毒信息

clamscan --no-summary -ri /tmp

5.扫描并清除

clamscan -r –remove ${路径}

6.扫描并移动病毒和感染文件到指定目录

clamscan -r --move=/home/bill/my_virus_collection ${路径}

7.扫描邮箱目录,以查找包含病毒的邮件

clamscan -r /var/spool/mail

8.扫描home文件夹并将结果保存在scan.log文件

clamscan -r /home -l scan.log

9.使用安静模式,仅仅打印出错误信息

clamscan -r /home --quiet 

10.以指定的文件作为病毒库扫面病毒

clamscan -d /tmp/newclamdb -r /tmp   以/tmp/newclamdb目录中的所有.cvd文件为病毒库,扫描/tmp目录下的所有文件和子目录

11.扫描计算机上的所有文件并且显示有问题的文件的扫描结果

clamscan -r --bell -i /·  

image.png

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

只有把抱怨环境的情绪,化为上进的力量,才是成功的保证!