ThreatMapper 管理控制台离线(Air-Gapped)部署完整指南:镜像内网同步与 ThreatIntel 威胁情报库导入

发布时间:2026/10/13 14:42:17
ThreatMapper 管理控制台离线(Air-Gapped)部署完整指南:镜像内网同步与 ThreatIntel 威胁情报库导入 网络安全应用安全云原生漏洞扫描【免费下载链接】ThreatMapperOpen Source Cloud Native Application Protection Platform (CNAPP)项目地址https://gitcode.com/gh_mirrors/th/ThreatMapper点击查看免费下载本文面向需要在物理隔离、无法访问公网的环境中部署 ThreatMapperDeepfence管理控制台的运维与安全工程师。你将掌握两条核心路径一是将控制台所需的全部容器镜像从 quay.io 拉取、重打标签并推送到内部镜像仓库再通过IMAGE_REPOSITORY环境变量驱动 docker-compose.yml 完成离线拉起二是通过控制台Settings → Scan History Threat Intel页面手动上传四类 ThreatIntel 威胁情报数据漏洞库、Secret 规则、恶意软件规则、云合规控制确保扫描引擎在无外网时依然具备最新检测能力。读完本文你可以独立完成一套可运行的离线 ThreatMapper 控制台搭建。一、离线部署的整体思路与前置条件ThreatMapper 管理控制台由一组容器化服务组成server、worker、UI、router、file-server、redis、postgres、neo4j、kafka 等。在线环境下官方镜像托管于quay.io/deepfenceio安装脚本与 Helm Chart 默认从该仓库拉取。而在气隙air-gapped环境中控制台主机无法访问 quay.io因此核心策略是在可联网的过渡机器上把所需镜像全部docker pull下来为每个镜像重新打上内部仓库的 tag例如127.0.0.1:5000即本机私有 registrydocker push到内部镜像仓库在内网控制台主机上用IMAGE_REPOSITORY指向内部仓库启动 compose控制台启动后在 Settings 页面手动上传 ThreatIntel 数据库与规则包在线控制台由后台定时任务自动拉取离线环境必须改为手动导入。前置条件内网需要有一个可用的 Docker Registry如 Harbor、Nexus、Registry 2或最简单的docker run -d -p 5000:5000 registry:2以及一台能够访问 quay.io 的过渡机器。以下命令均以 Docker CLI 为例。二、离线所需的镜像清单与拉取命令官方文档列出了控制台离线部署所需的全部 13 个镜像均为deepfenceio命名空间下的社区版_ce镜像。THREATMAPPER_VERSION为版本占位符实际部署时请替换为具体发布版本——从 docker-compose.yml 与 start-agent.sh 的默认值可见当前版本标签形如2.5.8变量DF_IMG_TAG。镜像用途deepfence_worker_ce后台任务执行扫描调度、报告生成、威胁情报拉取等deepfence_server_ce管理控制台 API 服务deepfence_ui_ce前端 UIdeepfence_file_server_ce文件服务器存储漏洞库、报告、SBOM基于 MinIO 语义deepfence_agent_ce采集 Agent也用于控制台自带的主机监控deepfence_cluster_agent_ceKubernetes 集群 Agentdeepfence_router_ce反向代理/路由80/443 入口deepfence_redis_ceRedis 缓存与异步任务队列deepfence_kafka_broker_ceKafka 消息总线扫描结果上报链路deepfence_postgres_cePostgreSQL用户、注册表集成、定时任务等元数据deepfence_neo4j_ceNeo4j 图数据库拓扑、威胁图deepfence_compliance_scanner_ce合规扫描器镜像deepfence_telemetry_ce可观测性Jaeger/OpenTelemetry 收集在可联网机器上执行docker pull quay.io/deepfenceio/deepfence_worker_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_server_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_ui_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_file_server_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_agent_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_cluster_agent_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_router_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_redis_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_kafka_broker_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_postgres_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_neo4j_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_compliance_scanner_ce:THREATMAPPER_VERSION docker pull quay.io/deepfenceio/deepfence_telemetry_ce:THREATMAPPER_VERSION注意THREATMAPPER_VERSION与下文IMAGE_REPOSITORY一样是文档中的变量占位符实际使用时请分别替换为具体版本号如2.5.8与内部仓库地址如127.0.0.1:5000。三、重打标签并推送到内部镜像仓库拉取完成后用docker tag将每个镜像的仓库前缀从quay.io/deepfenceio改写为内部仓库地址。官方文档采用127.0.0.1:5000作为示例export IMAGE_REPOSITORY127.0.0.1:5000 docker tag quay.io/deepfenceio/deepfence_worker_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_worker_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_server_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_server_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_ui_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_ui_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_file_server_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_file_server_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_agent_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_agent_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_cluster_agent_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_cluster_agent_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_router_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_router_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_redis_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_redis_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_kafka_broker_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_kafka_broker_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_postgres_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_postgres_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_neo4j_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_neo4j_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_compliance_scanner_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_compliance_scanner_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_telemetry_ce:THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_telemetry_ce:THREATMAPPER_VERSION docker tag quay.io/deepfenceio/deepfence_agent_ce:fargate-THREATMAPPER_VERSION ${IMAGE_REPOSITORY}/deepfence_agent_ce:THREATMAPPER_VERSION最后一行是特殊处理fargate-前缀的 Agent 镜像用于 EKS Fargate 场景在推入内部仓库时被统一重命名为不带前缀的标准 tag这样内部仓库中只保留一份deepfence_agent_ce镜像而控制台启动脚本如 start-agent.sh默认引用的正是标准 tag。随后统一推送export IMAGE_REPOSITORY127.0.0.1:5000 docker push ${IMAGE_REPOSITORY}/deepfence_worker_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_server_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_ui_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_file_server_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_agent_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_cluster_agent_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_router_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_redis_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_kafka_broker_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_postgres_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_neo4j_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_compliance_scanner_ce:THREATMAPPER_VERSION docker push ${IMAGE_REPOSITORY}/deepfence_telemetry_ce:THREATMAPPER_VERSION如果内部仓库需要认证先执行docker login registry-address再 push 即可。四、使用内部镜像仓库启动管理控制台Docker Compose镜像全部就位后在内网控制台主机上使用仓库内的 deployment-scripts/docker-compose.yml 启动。该 compose 文件对镜像地址使用了两个关键变量image: ${IMAGE_REPOSITORY:-quay.io/deepfenceio}/deepfence_postgres_ce:${DF_IMG_TAG:-2.5.8}IMAGE_REPOSITORY镜像仓库前缀默认quay.io/deepfenceio。离线部署时通过env覆盖为内部仓库地址即可compose 中所有 13 个服务含 worker 的scheduler/ingester两种模式都会统一指向内部仓库DF_IMG_TAG镜像版本标签默认2.5.8与文档中的THREATMAPPER_VERSION占位符对应。因此官方文档给出的启动命令是env IMAGE_REPOSITORY127.0.0.1:5000 docker compose up -d这样无需修改 compose 文件本身即可从内部仓库拉取全部镜像。启动前请确认内网主机已配置好对内部仓库的访问如将 registry 加入 Docker 的 insecure-registries 或配置证书信任否则docker compose up会因拉取失败而中止。关于该 compose 文件以下几点对离线场景尤为重要它同时定义了deepfence-console-agent控制台自监控 Agentnetwork_mode: host、privileged: true挂载/var/run/docker.sock与根文件系统与标准管理服务镜像同样来自deepfence_agent_cedeepfence-file-server承担文件存储职责其配置项DEEPFENCE_FILE_SERVER_DB_BUCKET: database、DEEPFENCE_FILE_SERVER_BUCKET: default等与deepfence_server的启动参数相关联——离线导入的 ThreatIntel 数据库正是被上传到该文件服务器再供各扫描器消费若内网环境存在 HTTP(S) 代理需求可在 compose 的x-proxy-variables段为http_proxy/https_proxy/no_proxy赋值默认no_proxy已覆盖全部内部服务名如deepfence-file-server、deepfence-postgres等避免内部流量绕行代理如需扩容扫描能力可取消注释deepfence-worker-2/deepfence-worker-3两个 worker 副本服务。部署完成后请进入管理控制台完成 初始配置然后继续本文第六节的 ThreatIntel 导入。卸载时使用docker compose down并视需要docker image prune/docker volume prune详见 Docker 安装文档。4.1 关于启动镜像拉取失败时的排查离线环境下最常见的启动失败原因是 Docker 无法访问内部仓库。请确认内部仓库地址在内网主机上可解析、可访问curl -I http://127.0.0.1:5000/v2/应返回 200若仓库使用自签名证书或非 TLS 明文端口如127.0.0.1:5000需将该地址加入/etc/docker/daemon.json的insecure-registries后重启 Docker 服务若仓库需要登录先在主机上执行docker login或通过 compose 的 imagePullSecret 机制提供凭据。五、KubernetesHelm部署的离线适配若管理控制台部署在离线 Kubernetes 集群可参考官方 Kubernetes 安装文档 与 deploy-console.md 中的“自定义镜像仓库”做法本质上与 Docker 场景同构在 deepfence-console/values.yaml 中将global.imageRepoPrefix从默认的quay.io改为内部仓库地址如127.0.0.1:5000global.imageTag改为对应版本Chart 内各服务模板如 fileserver.yaml、neo4j.yaml均以{{ .Values.global.imageRepoPrefix }}/{{ .Values.service.image.repository }}:{{ ... }}形式拼接镜像地址因此只需改这一个前缀若内部仓库需要认证启用imagePullSecret配置create: true、registry、username、password模板 helpers.tpl 会自动生成拉取凭据 Secret如需经代理拉取或访问外部可在proxy段配置http_proxy/https_proxy/additional_no_proxy。六、Agent传感器侧镜像与代理配置管理控制台离线可用后被监控主机上的 Agent 也需要从内部仓库拉取镜像。Agent 安装脚本 start-agent.sh 与 compose 使用同一套变量体系IMAGE_REPOSITORY${IMAGE_REPOSITORY:-quay.io/deepfenceio} ... $IMAGE_REPOSITORY/deepfence_agent_ce:${DF_IMG_TAG:-2.5.8}因此在被监控主机上部署 Agent 时同样用IMAGE_REPOSITORY环境变量指向内部仓库即可例如IMAGE_REPOSITORY127.0.0.1:5000 bash start-agent.sh -r console-ip -o 443 -k deepfence-key如果被监控主机位于只能通过代理访问控制台的内网可在脚本顶部为MGMT_CONSOLE_HTTP_PROXY/MGMT_CONSOLE_HTTPS_PROXY/NO_PROXY赋值脚本会以环境变量形式传入 Agent 容器详见 Docker 传感器部署文档。七、ThreatIntel 威胁情报数据库的离线导入7.1 为什么离线环境必须手动导入在线环境下控制台后台会周期性地自动拉取威胁情报。从源码看这一任务由 rules_fetcher.go 中的FetchThreatIntel负责它会并行下载四类数据——漏洞数据库DownloadVulnerabilityDB、Secret 规则DownloadSecretsRules、恶意软件规则DownloadMalwareRules、云合规控制DownloadAndPopulateCloudControls并注册为异步任务见 worker.go 中utils.ThreatIntelUpdateTask→cronjobs.FetchThreatIntel的绑定。下载 URL 由 common.go 的GetThreatIntelURL拼接基础地址为https://artifacts.threatmapper.org/threat-intel——该域名在离线环境显然不可达。因此air-gapped 场景必须改为在可联网机器上预下载情报包再通过控制台 Web 页面手动上传。7.2 情报包下载地址与四类数据前端源码 ScanHistoryAndDbManagement.tsx 明确展示了 air-gapped 场景的提示文案与下载链接构造逻辑Vulnerability漏洞库https://artifacts.threatmapper.org/threat-intel/vulnerability/v6/vulnerability_vversion.tar.gzSecretSecret 扫描规则https://artifacts.threatmapper.org/threat-intel/secret/secret_vversion.tar.gzMalware恶意软件规则https://artifacts.threatmapper.org/threat-intel/malware/malware_vversion.tar.gzPosture云合规控制https://artifacts.threatmapper.org/threat-intel/posture/posture_vversion.tar.gz其中version为控制台版本号。漏洞库走v6子目录对应 vulndb.go 中的 Grype v6 模型GrypeV6ModelVersion 6下载后以vulnerability.db-unix时间戳.tar.gz命名存入文件服务器的database/vulnerability/v6/目录并同步更新同目录下的latest.json元数据——latest.json包含 status/schemaVersion/built/path/checksum 字段供扫描器定位最新数据库文件。其余三类规则的下载逻辑分别见 malware.go 与 secrets.go。提示前端页面中的下载链接针对当前控制台版本自动生成离线规划时请以将要部署的控制台版本为准下载对应版本的情报包避免版本不匹配。7.3 通过 Settings 页面上传将上述四类.tar.gz包拷贝到可访问控制台 Web 界面的机器上登录后在Settings → Scan History Threat Intel页面依次完成上传。该页面即官方文档截图所示页面上会列出四类数据的下载链接“In case the management console is air-gapped, please download the threat intel feeds from here and upload them”并提供四个独立的文件上传控件accept.gz分别对应 Vulnerability scan feeds、Secret scan rules、Malware scan rules、Posture scan controls。上传链路的后端实现印证了格式要求控制台 API 处理器 threatintel_database.go 中的UploadVulnerabilityDB、UploadSecretsRules、UploadMalwareRules、UploadPostureControls均以 multipart 表单字段database接收文件并严格校验Content-Type必须为application/gzip或application/x-gzip否则返回file should have extension .tar.gz错误。上传成功后漏洞库被写入文件服务器database/vulnerability/v6/并触发VulnDBUpdateLatest更新latest.jsonSecret / Malware 规则包被解包解析ProcessTarGz解压 tar.gzJSON 解码为FeedsBundle以DeepfenceRule节点rule_id/type/payload/summary/severity的形式 MERGE 进 Neo4j见 secrets.go 的IngestSecretRules与 malware.go 的IngestMalwareRules并在SecretsRules/MalwareRules节点上记录最新的rules_hash与文件路径云合规控制上传后还会触发TriggerLoadCloudControls加载。上传完成后页面顶部的Last Updated区域会展示四类情报的更新时间数据来自DatabaseInfoAPI见 threatintel_database.go用于确认离线导入是否成功生效。之后即可正常执行漏洞、Secret、恶意软件与合规扫描。7.4 手动上传与自动更新的关系需要说明的是手动上传与在线自动更新共用同一套文件服务器与 Neo4j 元数据存储UploadVulnerabilityDB与DownloadVulnerabilityDB最终都通过 common.go 的UploadToMinio写入文件服务器并更新同一份latest.json规则类上传与DownloadSecretsRules/DownloadMalwareRules也都会写入同一 Neo4j 节点。因此离线导入后扫描器读取情报的路径与在线环境完全一致无需额外配置只要不再有外网访问控制台便不会再尝试拉取新情报定时任务FetchThreatIntel在无外网时会下载失败但不会影响已导入的数据使用。后续若有新版本情报发布重复上述“下载 → 上传”流程即可完成离线更新。八、小结与延伸阅读离线部署 ThreatMapper 控制台的完整链路可概括为公网拉镜像 → 重打标签 → 推送内网仓库 →IMAGE_REPOSITORY变量拉起 compose/Helm → Settings 页面上传四类 ThreatIntel 情报包。整个过程中docker-compose.yml 的变量体系IMAGE_REPOSITORY/DF_IMG_TAG、start-agent.sh 的 Agent 镜像参数、values.yaml 的 Helm 前缀配置以及 threatintel_database.go 的上传校验逻辑共同构成了离线场景下可验证、可复用的落地依据。如需进一步深入可继续阅读仓库内以下资料控制台完整 Docker 安装与卸载docs/docs/console/docker.md控制台初始配置docs/docs/console/initial-configuration.mdKubernetes 部署docs/docs/console/kubernetes.md自定义镜像仓库部署docs/docs/developers/deploy-console.md威胁情报拉取任务实现deepfence_worker/cronjobs/rules_fetcher.go威胁情报下载 URL 与上传工具deepfence_utils/threatintel/common.go漏洞库 Grype v6 格式与 latest.json 维护deepfence_utils/threatintel/vulndb.go赞分享网络安全应用安全云原生漏洞扫描【免费下载链接】ThreatMapperOpen Source Cloud Native Application Protection Platform (CNAPP)项目地址https://gitcode.com/gh_mirrors/th/ThreatMapper点击查看免费下载相关推荐GPUStack 离线Air-Gapped环境部署完整指南镜像同步、导入与安装GPUStack 离线Air Gapped环境部署完整指南镜像同步、导入与安装 GPUStack 支持在完全无互联网访问的离线air gapped环境后端人工智能模型推理服务集群管理可观测性NocoBase 内网离线安装完整指南镜像导出、导入与无 Docker 环境部署NocoBase 内网离线安装完整指南镜像导出、导入与无 Docker 环境部署 内网air gap环境无法访问公网时NocoBase 的安装需要提前在低代码后端前端人工智能AI 应用工作流自动化如何为 Budibase 生成 Air-gapped离线部署包如何为 Budibase 生成 Air gapped离线部署包 如果你的目标环境无法访问 Docker 镜像仓库例如内网、涉密网络就需要在一台可以联网低代码人工智能AI Agent工作流自动化后端前端上一篇SeaweedFS Filer 接入 ArangoDB配置、数据模型与实现原理深度解析下一篇如何用douyin-downloader高效管理抖音内容创作工作流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询