Docker网络隔离防跨境扫描:从零开始的完整配置指南
为什么你的容器需要网络隔离来防跨境扫描
很多刚接触 Docker 的用户会默认使用 bridge 网络启动容器,这时容器能直接访问公网。
如果容器内运行的服务存在漏洞,境外扫描器就能通过公网 IP 直接探测到你的容器。Docker 网络隔离防跨境扫描的核心思路是:让容器只能访问内网或特定白名单地址,对外部 IP 的访问全部拒绝,从而阻断扫描器的探测和扩散。
准备条件:确认你的 Docker 环境
操作前请确认以下几点:
- 服务器已安装 Docker,运行
docker --version可看到版本号。 - 你拥有 root 或 sudo 权限。
- 服务器内核支持 iptables(一般为 Linux 默认)。
如果还没有安装 Docker,请执行:
curl -fsSL https://get.docker.com | bash
sudo systemctl start docker
第一步:创建自定义隔离网络
Docker 默认的 bridge 网络允许容器通过网关访问外网。
我们需要创建一个无外部网关的网络,让容器彻底无法访问公网:
docker network create \
--driver bridge \
--internal \
--subnet=172.20.0.0/16 \
isolated_net
--internal 是关键参数,它禁止容器通过该网络访问外部网络。
启动容器时指定使用这个网络:
docker run -d --network isolated_net --name myapp nginx
此时 myapp 无法访问任何外网 IP,自然也防住了跨境扫描。
第二步:保留必要出站权限(可选)
如果你的容器需要访问特定服务(如更新软件包、访问数据库),可以创建带自定义网关的网络并用 iptables 限制出站目标:
docker network create \
--driver bridge \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
allowed_net
docker run -d --network allowed_net --name myapp2 nginx
然后通过 iptables 限制容器出站到非白名单 IP:
iptables -I FORWARD -s 172.20.0.0/16 -d 0.0.0.0/0 -j DROP
iptables -I FORWARD -s 172.20.0.0/16 -d <你的白名单IP> -j ACCEPT
避坑说明:iptables 规则重启后会丢失,建议使用 iptables-persistent 或 Docker Compose 结合 ip6tables 持久化。
第三步:验证隔离效果
- 进入容器测试网络连通性:
docker exec -it myapp bash
# 尝试访问外部(应失败)
curl -v http://www.baidu.com
# 尝试 ping 外网 IP(应超时)
ping 8.8.8.8
- 从外部扫描你的服务器 IP 和容器暴露端口(如有映射),确认无法访问容器内部服务(除非你特意映射了端口,但此时容器无外网访问能力,扫描器仍无法从容器发起对外连接)。
常见问题与避坑
Q:我用了 --internal 网络,容器内部无法解析域名怎么办?
A:--internal 网络不提供 DNS 解析。如果你需要域名访问,可额外创建一个非 internal 网络并限制 iptables 规则,或者配置容器使用宿主机的 DNS 代理。
Q:iptables 规则重启后失效怎样解决?
A:安装 iptables-persistent(apt install iptables-persistent),保存规则:iptables-save > /etc/iptables/rules.v4。注意每次规则变更后重新保存。
Q:我已经映射了容器端口到宿主机,容器被隔离后还会被扫描吗?
A:宿主机暴露的端口仍可被扫描,但容器自身无法主动发起跨境连接,防止了蠕虫扩散。如需彻底隐藏服务端口,应在宿主机层面配置防火墙(如 ufw 或 cloud firewall)只允许可信 IP 访问。
避坑总结:
- 不要同时将容器加入 internal 网络和普通网络,否则仍可通过普通网络访问外网。
- 修改 iptables 前备份当前规则:
iptables-save > backup.v4。 - 如果使用 Docker Compose,在
docker-compose.yml中直接声明internal: true的网络即可。
通过以上配置,你的容器已被有效隔离,Docker 网络隔离防跨境扫描的目标达成。
如果你还想进一步优化,可以结合 fail2ban、Cloudflare 等工具构建多层防线。
根据实际业务调整白名单,保持谨慎开放即可。