能有效阻断。networkpolicy通过egress规则精准禁止pod访问敏感网段(如10.10.0.0/16),结合docker-user链iptables硬拦截及禁用ip转发,可彻底切断容器横向刺探路径。

直接用网络策略(NetworkPolicy)+ 容器防火墙规则,就能有效阻断容器向内网敏感网段(如 10.10.0.0/16、192.168.5.0/24、核心数据库区等)发起的横向刺探。关键不是“全封”,而是精准识别并切断非法出向连接路径。
明确敏感网段并禁止容器出向访问
默认情况下,Docker bridge 网络或 Kubernetes Pod 允许任意出向流量,攻击者一旦控制容器,可直接扫描内网。必须显式限制:
- 在 Kubernetes 中,为业务命名空间启用 NetworkPolicy,并配置 出方向(egress)规则,只允许访问白名单地址(如 DNS、日志服务、API网关),显式拒绝访问内网敏感子网;
- 示例:禁止所有 Pod 访问 10.10.0.0/16(财务系统网段)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: block-egress-to-finance
namespace: prod-app
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.10.0.0/16
ports: []
注意:Kubernetes v1.23+ 才支持 egress;低于该版本需依赖宿主机 iptables 或 Cilium 等 CNI 插件补充。
在宿主机层加固:用 DOCKER-USER 链拦截非法出向
Docker 不会覆盖 DOCKER-USER 链,适合部署持久化出向过滤规则。若容器尝试连接内网敏感段(如 172.16.100.0/24),可在宿主机上加一条硬性拦截:
- 执行命令(以 Ubuntu/CentOS 为例):
iptables -I DOCKER-USER -s 172.17.0.0/16 -d 172.16.100.0/24 -j DROP iptables -I DOCKER-USER -s 10.244.0.0/16 -d 172.16.100.0/24 -j DROP
其中 172.17.0.0/16 是 Docker 默认 bridge 网段,10.244.0.0/16 是 Flannel/Cilium 常见 Pod 网段;目标 CIDR 替换为你实际的敏感网段。规则插入到 DOCKER-USER 链头部,确保优先生效。
禁用容器隐式互通 + 关闭 IP 转发
很多横向刺探依赖容器充当“跳板”——比如一个被攻破的容器主动 ping 或 nmap 扫描内网其他设备。可通过以下两项彻底堵死:
- 创建自定义桥接网络时,启用
--internal和--opt com.docker.network.bridge.enable_ip_forwarding=false,让容器无法路由、无法访问外网,也无法转发流量到内网; - 对高风险容器(如面向公网的 API 服务),启动时强制使用
--network isolated-tenant-net,并配合--cap-drop=ALL --security-opt no-new-privileges进一步降权; - 避免使用
--net=host,否则容器直接共享宿主网络栈,所有隔离策略失效。
监控与验证是否真正生效
光配策略不够,要验证它真正在工作:
- 进一个测试容器,执行:
curl -v http://10.10.5.100:3306(模拟连数据库),应超时或被拒绝; - 在宿主机运行:
tcpdump -i any 'src host 172.17.0.2 and dst net 10.10.0.0/16',确认无匹配包流出; - 检查 iptables 是否命中规则:
iptables -L DOCKER-USER -v -n | grep 10.10.0.0,看 packet 数是否增长。











