如何部署Docker Clammit?

Docker

1 基础知识

1.1 Clammit的介绍

  • Clammit具备整合(集成)nginx与clamav的能力,使Nginx变身为具有杀毒能力的反向代理
  • Clammit是一个HTTP病毒扫描检测代理(可以理解为具有病毒检测能力的反向代理)
  • Clammit工作于Web客户端与Web应用服务器之间(相当于反向代理)
  • Clammit本身并没有病毒扫描能力,其依靠调用ClamAV(clamd)来完成扫描并返回HTTP响应码

1.2 Clammit的工作原理

  • Clammit通过代理服务端的应用向Web客户端提供HTTP页面或接口
  • Clammit接收到Web客户端提交的HTTP请求(包括上传的文件)
  • Clammit则调用ClamAV对上传的HTTP请求进行病毒扫描
  • Clammit如果发现病毒,则会立即拒绝上传的HTTP请求并返回异常响应码(418)
  • Clammit如果没发现病毒,则将HTTP请求转发给上游Web应用服务器并返回正常的响应码

1.3 Clammit程序设计架构

  • 转发器(forwarder/forwarder.go)接收来自Web客户的HTTP请求
  • 转发器下载请求正文(至少使用两次)
  • 转发器将请求传递给拦截器(clam_interceptor.go)
  • 拦截器定位表单数据并自动发送(方法包括POST/PUT/PATCH)到clamd
  • 如果clamd返回假则文件包含病毒,拦截器将编写异常HTTP响应码并返回给Web客户端同时停止调用转发器
  • 如果clamd返回真则文件正常,则转发器构造一个新的HTTP请求发给Web服务端并向Web客户端返回正常响应

2 最佳实践

2.1 部署前的准备

2.1.1 部署Docker环境

本章使用如下Docker环境部署,参阅本章建议你先搭建以下Docker集群环境并熟悉,

如何部署Docker生产环境?

2.1.2 准备Clamav镜像

In docker01
请参阅以下章节完成Clamav的私有镜像打包,

如何打包Docker Clamav?

2.1.3 准备Clammit镜像

请参阅以下章节完成Clammit的私有镜像打包,

如何打包Docker Clammit?

2.2 部署Clammit

In docker01

2.2.1 创建服务配置文件

vim /data/docker/yml/clammit-stack.yml

加入如下配置,

version: '3.1'

services:

  clamav:
    image: docker01.cmdschool.org:5000/clamav:0.102.3
    restart: always
    environment:
      TZ: Asia/Shanghai
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.clamav == true]
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
  clammit:
    image: docker01.cmdschool.org:5000/clammit:v0.6.0
    restart: always
    environment:
      TZ: Asia/Shanghai
    depends_on:
      - clamav
    ports:
      - 8438:8438
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.clammit == true]
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"

根据配置需求创建数据存放目录,
In docker01

mkdir -p /data/docker/service/clammit/conf/

根据配置需求创建Clammit主配置文件,

vim /data/docker/service/clammit/conf/clammit.cfg

加入如下配置,

[ application ]
listen          = :8438
application-url = https://wenku.baidu.com/
clamd-url       = tcp://clamav:3310
log-file        = /var/log/clammit/clammit.log
debug           = true
test-pages      = true

根据配置的需求设置运行标记,
In docker01

docker node update --label-add clammit=true docker01.cmdschool.org
docker node update --label-add clamav=true docker02.cmdschool.org

2.2.2 部署服务

docker stack deploy -c /data/docker/yml/clammit-stack.yml clammit

2.2.3 页面测试

配置完成后,可使用如下链接测试,
http://docker01.cmdschool.org:8438/
注:百度文库只是作为一个代理应用的范例说明(尽管你无法完成上传测试O(∩_∩)O哈哈~,你可以使用其他应用替换并测试杀毒功能)

2.2.4 测试反向代理的病毒检测能力

请从以下权威机构页面下载标准病毒码并上传到测试(请看清楚官方的说明再下载),

Download Anti Malware Testfile


注:建议使用一台无杀毒软件的客户下载病毒病上传测试,测试完成可以销毁此虚拟机。

参阅文档
====================
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/engine/reference/builder/

没有评论

发表回复

Docker
如何修复连接Docker容器虚机无响应?

1 前言 一个问题,一篇文章,一出故事。 笔者最近使用如下命令连接容器发现一直没有响应, docke …

Docker
如何打包Docker Nginx?

1 前言 一个问题,一篇文章,一出故事。 由于docker hub原版本的nginx镜像过于精简,于 …

Docker
如何打包Docker MAC-Telnet?

1 基础知识 一款可以使用MikroTik RouterOS MAC-Telnet协议连接Mikro …