bridge网络默认无隔离与访问控制,生产环境须禁用docker0、改用自定义bridge网络实现按业务域隔离,并配合docker-user链iptables规则及cap-drop限制强化安全。

Bridge 网络本身不自带防火墙或访问控制,安全策略必须靠主动配置来补足。默认 docker0 网桥对所有容器“一视同仁”,没有隔离、没有白名单、没有通信限制——这正是多数生产事故的起点。
禁用默认 bridge 网络(最基础但最关键的一步)
默认 bridge(bridge 网络)不支持服务发现,也不支持网络策略,且所有容器自动互通,相当于把所有服务扔进一个没门的房间。生产环境应明确禁用它:
- 启动 Docker daemon 时加参数:
--bridge=none,彻底停用docker0 - 或在
/etc/docker/daemon.json中设置:"bridge": "none",然后重启 Docker - 之后所有容器必须显式指定自定义网络,杜绝“漏网之鱼”
用自定义 bridge + network-scoped 隔离
自定义 bridge 不仅支持容器名解析,更关键的是:它天然支持网络级隔离。不同网络之间的容器默认二层不通,无需额外规则:
- 为不同业务域创建独立网络,例如:
web-net、db-net、cache-net - 只让需要通信的服务加入同一网络,比如 Web 容器和 API 容器共用
app-net,但绝不拉数据库进去 - 验证方式:
docker exec web1 ping db→ 若 db 不在同一网络,直接超时,无响应
配合 iptables 或 ufw 做容器出口/入口过滤
Docker 的 iptables 规则由 daemon 自动管理,但你可以叠加自定义链进行精细控制:
- 限制某容器只允许访问特定外网地址(如仅允许连 Redis SaaS):
iptables -I DOCKER-USER -s 172.20.0.5 -d 192.0.2.100 -p tcp --dport 6379 -j ACCEPTiptables -I DOCKER-USER -s 172.20.0.5 -j DROP - 禁止某网络内容器主动访问宿主机端口(防横向打内网):
iptables -I DOCKER-USER -i br-abc123 -d 172.20.0.1 -j DROP - ⚠️ 注意:规则必须加在
DOCKER-USER链(Docker 保留的用户自定义链),否则重启 daemon 会被清空
启用容器级网络能力限制(Linux capabilities)
不是所有容器都需要完整网络栈。对只读型或数据处理类容器,可削弱其网络权限:
- 禁用原始套接字(防端口扫描、伪造包):
--cap-drop=NET_RAW - 禁用网络配置能力:
--cap-drop=NET_ADMIN - 结合
--read-only和--tmpfs /run进一步收窄攻击面











