docker内网安全扫描集群需构建可隔离、调度、监控的分布式体系,分层为调度中心、无状态扫描器、结果解析器及存储告警模块,通过轻量镜像、环境变量注入、健康检查与网络加固实现安全可控。

用 Docker 实现容器化的内网安全扫描集群,核心不是让几个扫描工具“跑起来”,而是构建一个可隔离、可调度、可监控、能持续运行的分布式扫描体系。重点在于职责分离、轻量封装、任务驱动和网络可控。
明确分层架构,避免单体打包
把扫描流程拆解为独立服务,各自容器化,通过标准接口协作:
- 调度中心(Scheduler):管理资产清单(如内网 IP 段、主机名、子网划分)、自动去重、按优先级(如 DMZ 区 > 办公网 > 研发网)分发任务。推荐用 Redis List 做队列,容器挂载持久化卷,防止断电丢任务
-
扫描执行器(Scanner):无状态工作节点,从队列取目标后调用 nmap、masscan、httpx、naabu 或 custom Python 脚本执行探测。镜像内预装工具,支持通过环境变量控制线程数(
SCAN_THREADS=50)、超时(TIMEOUT=30)、代理策略(HTTP_PROXY=http://proxy:8080) - 结果解析器(Parser):可选独立容器,专责解析原始输出(如 nmap XML、masscan Grepable),提取 IP、端口、服务、Banner、TLS 版本、HTTP 标题等结构化字段,转成统一 JSON 格式投递到中间存储或直接写入数据库
-
存储与告警(Storage & Alert):PostgreSQL 存结构化扫描记录;Elasticsearch + Kibana 做内网资产拓扑检索与变化比对;NTFY 或 Telegram 容器负责高危发现(如
21/tcp open ftp、8080/tcp open http且含弱口令提示)实时推送
构建安全、轻量、可验证的扫描镜像
镜像质量直接影响内网环境稳定性与合规性:
- 基础镜像优先选
alpine:3.20或distroless,禁用 shell(如用scratch运行静态二进制),不带包管理器、不开放交互入口 - 多阶段构建:第一阶段用
golang:1.23-alpine编译 masscan,第二阶段只复制/usr/local/bin/masscan和必要 CA 证书;Python 类工具用python:3.12-slim构建后精简 site-packages - 敏感配置(如内网白名单
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16、LDAP 认证地址)不写死在 Dockerfile,改用--env-file .env或-e SCAN_SCOPE="10.10.0.0/16"方式注入 - 入口脚本必须校验必需变量(如
REDIS_URL、SCAN_TARGET_QUEUE),缺失则exit 1,防止容器空转消耗内网带宽
本地闭环验证用 Docker Compose,生产环境上 Swarm 或 K8s
先跑通最小可用链路,再扩规模:
-
docker-compose.yml中定义redis服务(restart: unless-stopped+./redis-data:/data),定义scanner服务并设scale: 3启动 3 个实例,全部连接同一 Redis 队列实现自动负载分摊 - 加健康检查:
healthcheck: test: ["CMD", "nmap", "-sP", "127.0.0.1/32"](验证扫描能力就绪),或test: ["CMD", "curl", "-f", "http://redis:6379/ping"](验证队列可达) - 所有容器日志统一挂载
./logs:/app/logs,配合logging.driver: "json-file"和max-size: "10m",便于后续接入 Filebeat 或直接审计
内网部署关键约束与加固点
- 网络模式必须用
host或自定义 bridge(禁用default bridge),确保 scanner 容器能真实发起 ARP 请求、发送 raw packet(nmap -sn / masscan 必需) - 宿主机防火墙(如 firewalld / ufw)需放行 scanner 容器使用的源端口范围(如
--source-port 32768-65535)及目标端口(如22,80,443,3389,5900) - 扫描器容器禁止挂载宿主机根目录、禁止
--privileged、禁止共享/proc或/sys,限制cap-drop: ALL,仅按需cap-add: NET_RAW,NET_ADMIN - 所有镜像打标
--label "env=internal" --label "team=secops",配合 registry 权限策略,防止误推送到外网仓库
不复杂但容易忽略。











