Docker与iptables
Docker 默认提供DOCKER和DOCKER-USER链, 当启动docker服务后程序会自动在DOCKER链中增加规则,请勿在DOCKER增加自定义规则,用户可以通过定制DOCKER-USER和FORWARD链来达到对容器的访问控制的目的。
以下列举的例子均基于docker的默认
bridge网络模式
限制外部地址访问容器
# 禁止192.168.5.1 访问所有容器
sudo iptables -I DOCKER-USER -s 192.168.5.1 -j DROP
# 禁止 192.168.5.1 访问映射到宿主机的8080端口
sudo iptables -I DOCKER-USER -s 192.168.5.1 -p tcp -m multiport --dports 8080 -j ACCEPT
# 只允许 192.168.5.1 访问容器
sudo iptables -I DOCKER-USER ! -s 192.168.5.1 -j DROP
限制容器访问外部网络,外部通过端口映射可正常访问容器
# 禁止容器访问宿主机,需要获取宿主机IP地址172.16.2.2
sudo iptables -I INPUT -i docker0 -d 172.16.2.2 -j DROP
# 禁止容器访问外部192.168.0.0/16段
sudo iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -m state --state NEW -j DROP
# 禁止容器访问外部所有网络
sudo iptables -I FORWARD -i docker0 -d 0.0.0.0/0 -m state --state NEW -j DROP
参考
https://docs.docker.com/network/iptables/
https://bytelang.com/article/content/sp9_YYFst7A=
https://juejin.im/entry/5bd17309f265da0a972e6077
https://stackoverrun.com/cn/q/7469045
http://www.zsythink.net/archives/1199