Bridge网络审计需四步:①用iptables LOG规则捕获连接事件并路由至独立日志;②建带label的自定义bridge网桥实现流量打标溯源;③开启Docker metrics接口透出标签供Prometheus监控;④用eBPF工具在veth层深度审计L4/L7流量,零侵入获取HTTP/gRPC等细粒度指标。

Bridge 网络本身不生成审计日志,要实现可追溯的通信审计,核心是把容器网络行为“显性化”:捕获连接事件、标记流量归属、结构化输出、导出到集中系统。不能只依赖 docker logs,它只管应用 stdout,不管网络建立、断开、拒绝这些底层动作。
启用 iptables 日志捕获连接行为
Bridge 网络的进出流量经过宿主机内核的 netfilter 链(主要是 FORWARD 和 OUTPUT),可在关键链上添加带 -j LOG 的规则,记录 TCP 连接建立、重置、拒绝等事件:
- 在
/etc/iptables/rules.v4或运行时执行:iptables -I FORWARD -i docker0 -o eth0 -p tcp --dport 3306 -j LOG --log-prefix "DB-ACCESS: "
这条规则会记录所有从容器(经 docker0)访问宿主机外 MySQL 服务的连接尝试 - 配合
rsyslog将 kernel log 单独路由到/var/log/docker-net.log,避免混入系统日志 - 注意:LOG 目标不阻断流量,仅记录;如需审计+拦截,应搭配
-j REJECT或-j DROP并启用--log-ip-options记录 IP 头信息
用自定义 bridge + label 实现流量打标与溯源
默认 docker0 网桥无法区分业务归属,必须创建带标签的自定义 bridge 网络,让每条流量携带上下文:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 创建网络时注入环境标识:
docker network create --label team=finance --label env=prod finance-net - 启动容器时绑定该网络并追加实例标签:
docker run -d --name payment-db --network finance-net --label service=db --label role=primary postgres - 后续通过
docker network inspect finance-net可查到所有接入容器的名称、IP、标签;再结合 iptables 日志中的 IP,就能反查到具体服务、团队、环境
暴露容器网络指标供 Prometheus 抓取
Docker daemon 内置基础网络统计(如 rx/tx 字节数、连接数),需主动开启 metrics 接口并关联容器标签:
- 修改
/etc/docker/daemon.json,启用 metrics 并透出标签:{"metrics-addr": "127.0.0.1:9323", "labels": ["com.docker.swarm.service", "env", "team"]} - 重启 Docker:
sudo systemctl restart docker - Prometheus 抓取
http://localhost:9323/metrics后,可查询类似container_network_receive_bytes_total{env="prod", team="finance"}的聚合指标,用于异常流量告警
用 eBPF 工具做 L4/L7 流量深度审计
iptables 日志只能看到 IP+端口,若需审计 HTTP 路径、gRPC 方法、TLS SNI、响应码等,需在内核层面抓包。Bridge 模式下推荐直接监控 veth pair:
- 部署
ebpf-exporter或pixie,自动发现所有容器的 veth 接口并注入 eBPF 程序 - 采集指标示例:
tcp_connect_latency_seconds_bucket{service="payment-api", dst_port="8080", http_path="/orders"}http_request_duration_seconds_count{service="user-svc", status_code="401"} - 无需改容器镜像或重启服务,所有数据通过 eBPF 在 socket 层捕获,零侵入、高精度

















