iptables -I FORWARD -i docker0 !-d 8.8.8.8 -j DROP

iptables -I FORWARD -i docker0 !-d 8.8.8.8 -j DROP

我有一个答案,它将限制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 是开发资源。

相关内容