从零开始搭建企业级安全扫描平台:基于Docker的Greenbone和ClamAV部署指南

Linux环境下安装病毒扫描工具(ClamAV)和漏洞扫描工具(Greenbone) Greenbone是一种开源的漏洞扫描工具,用于评估和分析网络系统的安全性。它提供了多种功能和用法,帮助用户扫描并发现系统中的漏洞。1,下载Greenbone的docker-compose.yml配置文件。4,修改Greenbone默认密码(这个要修改,不然扫描会有中危风险)4,扫描指定目录,然后将感染文件移动到指定目录,并记录日志。3,递归扫描home目录,将病毒文件删除,并且记录日志。1,下载docker-compose二进制文件。3,根据yml文件在镜像仓库拉取指定的镜像。2,递归扫描home目录。 阅读详情

从零构建企业级安全扫描平台:基于Docker的Greenbone与ClamAV实战部署与深度集成

在当今的数字化环境中,企业的IT基础设施正面临着前所未有的安全挑战。恶意软件、零日漏洞、配置错误等威胁层出不穷,单纯依靠边界防火墙和人工巡检已难以应对。对于企业IT安全团队而言,构建一个自动化、可扩展、且易于维护的安全扫描平台,不再是“锦上添花”,而是保障业务连续性和数据安全的“必需品”。这不仅是满足合规性要求(如等保)的基石,更是主动防御体系中的关键一环。

传统的安全工具部署往往伴随着复杂的依赖关系、繁琐的配置步骤和难以统一的管理界面,导致运维成本高昂,响应速度迟缓。而容器化技术的成熟,特别是Docker的普及,为我们提供了一种全新的思路:将安全能力“服务化”。通过容器,我们可以将像Greenbone这样的专业漏洞扫描器和ClamAV这样的成熟病毒扫描引擎,封装成标准、可移植的服务单元,实现快速部署、弹性伸缩和统一编排。

本文将带领你,以一名企业安全架构师的视角,从零开始,一步步搭建一个基于Docker容器技术的企业级安全扫描平台。我们不仅会涵盖Greenbone和ClamAV的核心部署,更会深入探讨如何将它们有机整合,实现资产统一管理、扫描任务调度、报告自动化生成,并与现有监控告警体系(如Prometheus、Grafana)无缝对接。我们的目标是构建一个不仅“能用”,而且“好用”、“易管”的主动安全防御核心组件。

1. 平台架构设计与核心组件选型

在动手敲下第一条Docker命令之前,我们必须先厘清整个平台的架构蓝图。一个健壮的企业级扫描平台,绝非两个工具的简单堆砌,它需要清晰的层次划分和组件职责定义。

我们的设计遵循“解耦”与“聚合”并重的原则。底层是容器化的扫描引擎,负责执行具体的检测任务;中间是任务调度与资产管理层,负责协调资源、管理目标;顶层是统一的展示、报告与集成接口。基于此,我们选择以下核心组件:

  • Greenbone Vulnerability Manager (GVM) / OpenVAS: 这是我们漏洞扫描能力的核心。Greenbone社区版(GVM)是当前最活跃的开源漏洞管理解决方案,它继承了OpenVAS项目,并提供了更现代化的架构和持续更新。其组件包括:
    • GVM (OpenVAS Scanner): 扫描引擎,执行漏洞检测。
    • GVMD: 漏洞管理器,负责管理扫描任务、资产和漏洞数据。
    • GSA: Greenbone Security Assistant,基于Web的图形化管理界面。
    • PostgreSQL: 用于存储配置、任务和结果数据。
  • ClamAV: 老牌的开源反病毒引擎,以其高效的病毒特征库和低资源消耗著称。我们将部署其守护进程(clamd)和自动更新服务(freshclam)。
  • Docker & Docker Compose: 容器化部署的基石。Docker实现环境隔离与标准化,Docker Compose则用于定义和运行多容器应用,简化复杂的服务依赖关系管理。
  • 辅助组件(可选但推荐):
    • Nginx: 作为反向代理,为GSA提供HTTPS访问、负载均衡和访问控制。
    • Prometheus & Grafana: 用于监控容器及扫描服务自身的健康状态与性能指标。
    • 自定义脚本与API: 用于实现自动化任务触发、报告推送等。

整个平台的逻辑架构如下图所示(注:此处以文字描述替代图表):用户通过HTTPS访问Nginx反向代理,进而访问GSA Web界面进行管理。GSA与后端的GVMD交互,GVMD调度GVM扫描器对目标资产进行扫描。同时,一个独立的ClamAV容器集群(可根据需要横向扩展)通过共享存储或网络挂载的方式,对文件服务器、邮件服务器等存储区域进行定期或实时的病毒扫描。所有扫描结果最终汇聚,可通过GSA查看,也可通过GVMD的API导出,接入企业的SIEM(安全信息与事件管理)系统或工单系统。

注意:在生产环境中,务必为每个容器服务配置独立的非root用户运行,并严格控制容器间的网络通信(使用自定义的Docker网络),仅开放必要的端口。数据库等持久化数据应存储在宿主机卷(volume)或网络存储上,确保容器重建后数据不丢失。

2. 基础环境准备与Docker引擎优化

假设我们在一台新安装的CentOS 8 Stream或Ubuntu 22.04 LTS服务器上开始。首先,我们需要一个稳定且性能经过优化的Docker环境。

2.1 系统级优化与依赖安装

在安装Docker之前,进行一些系统调优有助于提升容器运行效率,尤其是像Greenbone这样相对重型的服务。

# 更新系统并安装基础工具
sudo dnf update -y # CentOS/RHEL
# 或 sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
sudo dnf install -y curl wget vim git lsof net-tools

# 调整系统内核参数以优化容器性能
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
echo "fs.file-max=65536" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 安装Docker的依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 # CentOS
# 或 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # Ubuntu

2.2 安装与配置Docker引擎

我们使用官方仓库安装最新稳定版的Docker CE和Docker Compose插件。

# 添加Docker官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # CentOS
# 或 curl -fsSL https://download.docker.com/linux/ubu
Docker化部署Greenbone漏洞扫描器:5分钟快速搭建企业级漏扫平台(附避坑指南) 本文详细介绍了如何通过Docker化部署Greenbone漏洞扫描器,5分钟内快速搭建企业级漏扫平台。内容涵盖环境准备、Docker Compose配置、关键初始化步骤、性能优化及常见问题解决方案,帮助用户高效实现安全扫描工具的容器化部署,特别适合DevOps环境集成。 阅读详情

相关推荐

从零开始:在CentOS 7上搭建ClamAV和Greenbone的完整指南(含常见问题解决)

本文提供在CentOS 7系统上部署ClamAV病毒扫描工具和Greenbone漏洞管理平台的完整实战指南。内容涵盖从环境准备、软件安装配置、自动化扫描任务设置到常见问题排查,旨在帮助企业构建主动的恶意软件与漏洞防御体系,提升服务器安全基线。

u9v0w的博客 444

dq-克拉马夫

Docker ClamAV 用于启动守护程序的Docker容器。 入门 这些说明将介绍如何在Docker和集群中启动容器。 先决条件 为了运行此容器,您需要安装docker。 可选地: 一个集群以启用其他节点的Kubernetes api发现。 用法 下面的示例将启动一个ClamAV实例。 docker run --name clamav -d -p 3310:3310 quay.io/ukhomeofficedigital/clamav:latest 要与使用,请参阅。 环境变量 变量和默认值如下所示。 默认情况下,容器不依赖 。 CLAMD_SETTINGS_CSV="LogVerbose=yes,VirusEvent=/custom_alert.sh" CLAMD_SETTINGS_CSV="LogVerbose=yes,VirusEvent=/custom_alert.s

深入了解torch框架

大国的游戏,政府支持到位,是未来;AI : Artificial Intelligence,旨在研究、开发能够模拟、延伸和扩展人类智能的理论、方法、技术及应用系统,是一种拥有自主学习和推理能力的技术。它模仿人类大脑某些功能,包括感知、学习、理解、决策和问题解决。AI本质​ NLP(说话,听)、CV(眼睛)、自动驾驶、机器人(肢体动作)、大模型三要素:数据、网络、算力① 神经网络:找到合适的数学公式;② 训练:用已有数据训练网络,目标是求最优解;③ 推理:用模型预测新样本;PyTorch,简称Torch

qq_74732076的博客 1136

AI医疗影像诊断工具2025 完整教程

本教程所述工具均为辅助诊断设备,不可替代执业医师判断。部署使用需遵守当地医疗器械管理法规。推荐开源框架组合:代码太多打包上传网盘了 自行下载。2025年的AI医疗影像诊断工具将以。

m0_60084632的博客 2029

微信自动化进阶:Python识别特定消息并自动回复(基于win32api控件操作)

本文详细介绍了如何使用Python和win32api实现微信消息的智能监控与自动回复。通过精准识别聊天记录中的特定关键词,结合多级匹配策略和性能优化技巧,构建稳定高效的自动化回复系统,适用于企业客服、个人助手等场景。

weixin_42663213的博客 442

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

HTML5+CSS3+JS小实例:焦点图波浪切换动画特效

实例:焦点图波浪切换动画特效。字体图标库:Font Awesome。技术栈:HTML+CSS+JS。

艾恩小灰灰的博客 909

YOLO126优化:损失篇 | AAAI 2025 | 一种基于尺度的动态(SD)损失,根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力

提出了一种基于尺度的动态(SD)损失,它根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 447

uniapp微信小程序 - 详解map地图markers图标不显示问题,自定义图标真机调试不显示变成默认marker标记点图标(解决微信小程序map组件markers自定义图标失效,兼容安卓苹果手机)

uniapp微信小程序 map地图markers图标不显示,markers图标真机调试不显示,uniapp map地图显示图标markers问题,自定义图标不显示,添加marker后不显示,uniapp 微信小程序 map marker图标不显示如何解决,uniapp小程序地图的marker图标不显示问题,微信小程序map组件markers自定义图标真机显示问题,uni-app, 微信小程序, map组件, markers图标不显示, 真机调试, 微信小程序map组件,地图加载后marker标记点ios设备

🏆 前端领域优质创作者 2912

msfvenom制作windows/linux/android/ios木马

msfvenom选项如下 -p, --payload<payload> 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled <length>为payload预先指定一个NOP滑动长度。 -f, --format <format>指定输出格式(使

Cwillchris的博客 2734

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 告别Apache HttpClient4!SpringCloud OpenFeign4.0迁移必看指南(含HC5配置模板)
下一篇: DIY必备:如何用N-MOS管搭建低成本DC有刷电机驱动电路(附原理图+避坑指南)
delta
博客等级 码龄26年 125粉丝 1241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值