docker部署ClamAV集成java和python实现文件病毒扫描

在这里插入图片描述

介绍

官方文档:https://docs.clamav.net/manual/Signatures/DatabaseInfo.html

ClamAV 是一个开源的反病毒引擎,它由多个模块组成,负责不同的任务处理。以下是 ClamAV 的主要模块和它们的功能:

  1. clamd:clamd 是 ClamAV 的守护进程,它在后台运行,监听端口并等待其他进程发送文件以进行扫描。clamd 可以同时处理多个连接,并且可以在多个 CPU 核心上并行扫描文件。
  2. clamdscan:clamdscan 是一个命令行工具,它与 clamd 守护进程通信,将文件发送给 clamd 进行扫描。clamdscan 可以扫描单个文件或目录中的所有文件。
  3. lamscan:clamscan 是一个命令行工具,它直接扫描文件,而不依赖于 clamd 守护进程。clamscan 可以扫描单个文件或目录中的所有文件。
  4. freshclam:freshclam 是一个命令行工具,它用于更新 ClamAV 的病毒数据库。freshclam 可以自动定期检查并下载最新的病毒数据库。

核心概念

● freshclam 用来更新 clamav 病毒数据库。数据库放置在 /var/lib/clamav/,且文件的用户和用户组都是 clamav。
● clamd 是 clamav daemon 进程,它会读取配置文件 /etc/clamav/clamd.conf。clamd 不会自动查毒。
● clamdtop 是 clamd 进程的监控程序。查看 clamd 线程池。
● clamdscan 通知 clamd 进程进行查毒。通常执行 clamdscan --fdpass <文件或目录>。
● clamscan 与 clamd 无关,直接根据当前命令参数执行查毒,因此也不会读取配置文件 /etc/clamav/clamd.conf。通常执行 sudo clamscan -ri /。
● clamconf 显示或生成 clamav 的配置文件。
● clamonacc 是 on-access 扫描服务,当文件变化会立刻扫描。依赖 clamd。配置文件 /etc/clamav/clamd.conf 里以 OnAccess 开头的都是相关配置项。

病毒签名

category
Follow with the category.
Options for this field in official signatures include:
Adware 广告, Backdoor 后门, Coinminer 挖矿, Countermeasure, Downloader 下载器, Dropper 滴管, Exploit 蠕虫, File, Filetype, Infostealer, Ircbot, Joke, Keylogger, Loader 木马, Macro, Malware, Packed 木马, Packer, Phishing, Proxy, Ransomware, Revoked, Rootkit 恶意软件, Spyware间谍, Test 测试

Docker运行

docker run -it --rm \
--name "clam_container_01" \
--mount type=bind,source=/var/lib/docker/data/clamav/dbs/,target=/var/lib/clamav \
--publish 13310:3310 \
 --publish 17357:7357 \
 clamav/clamav:1.2

病毒扫描

下载病毒文件

https://www.eicar.org/download-anti-malware-testfile/

命令行测试

mkdir eicar && cd eicar
curl -O https://secure.eicar.org/eicar.com \
 -O https://secure.eicar.org/eicar.com.txt \
 -O https://secure.eicar.org/eicar_com.zip \
 -O https://secure.eicar.org/eicarcom2.zip

在这里插入图片描述

Java API

@Slf4j
@RestController
@RequestMapping("/scan")
public class ClamAvScanTestController {
    @Autowired
    private ClamAVClient clamAVClient;

    @GetMapping("")
    public String test() throws IOException {
        boolean pong = clamAVClient.ping();
        if (pong){
            System.out.println("服务器连接成功");
            return "服务器连接成功";
        }
        System.out.println("服务器连接失败");
        return "服务器连接失败";
    }

    @PostMapping(value = "/uploadFile")
    public ResultUtil<?> uploadFile(@RequestParam("file") MultipartFile file) {
        // 判断文件是否存在病毒
        try {
            InputStream inputStream = file.getInputStream();
            byte[] scan = clamAVClient.scan(inputStream);
            String res = new String(scan, StandardCharsets.UTF_8);
            log.info("检测结果:{}",res);
            if(ClamAVEnum.OK.getCode().equals(res)){
                System.out.println(ClamAVEnum.OK.getDesc());
            }else if(ClamAVEnum.ALLOCATE_MEMORY.getCode().equals(res)){
                return ResultUtil.error(ClamAVEnum.ALLOCATE_MEMORY.getDesc());
            }else {
                return ResultUtil.error(ClamAVEnum.INFECTED.getDesc());
            }
        } catch (IOException e) {
            try {
                clamAVClient.ping();
            } catch (IOException ioException) {
                return ResultUtil.error("连接杀毒服务失败!");
            }
            return ResultUtil.error("连接杀毒服务异常或上传文件超过杀毒软件最大文件限制!");
        }

        return ResultUtil.ok("ok");
    }
}

Python API

import pyclamd

cd = pyclamd.ClamdNetworkSocket(host='192.168.1.115',port=13310,timeout=15)
cd.ping()

result = cd.scan_stream(cd.EICAR())

print(result)
  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值