我有一个答案,它将限制docker容器只能访问主机外部的单个IP地址。在主机上使用此iptables规则:
iptables -I FORWARD -i docker0 !-d 8.8.8.8 -j DROP
意味着从任何 docker 容器内部只能访问 IP 地址 8.8.8.8。
这是相当激烈的 - 基本上,如果目的地不是 8.8.8.8,那么就丢弃数据包。
我可以设置规则以将容器限制在一定数量的 IP 地址的最佳方法是什么?
答案1
我需要确保 Docker 容器中的网站开发副本无法访问任何实时资源 - Paypal、各种 API 等。网站中的代码是遗留的,许多内容/URL 都是硬编码的。
我实现此目的的方法是在构建脚本中添加类似下面的内容:
echo
echo "Setting up firewall rules for all docker containers..."
sudo ipset create dockerdests hash:ip -exist
sudo ipset add dockerdests x.x.x.x -exist
sudo ipset add dockerdests y.y.y.y -exist
sudo ipset add dockerdests 8.8.8.8 -exist
sudo ipset add dockerdests 8.8.4.4 -exist
sudo iptables -I FORWARD 1 -i docker0 -m set --match-set dockerdests dst -j ACCEPT
sudo iptables -I FORWARD 2 -i docker0 -j DROP
其中 xxxx 和 yyyy 是开发资源。