我正在尝试在 VPS 上设置 Docker,并使在各个端口上运行的所有容器仅对我的 IP 地址可用。这仅用于开发目的。
证明这个概念的最简单设置是nginx
在端口上运行容器80
。我想阻止除我的 IP(我们称之为 123.123.123.123)之外对该容器的所有访问。
由于 Docker 直接编辑 iptables 并具有一些转发规则,我尝试的所有解决方案都不起作用。要么流量被完全阻止,要么仍然可以从任何 IP 地址访问。
什么是正确的设置才能将所有内容仅锁定到我的 IP 地址?
谢谢!
答案1
我也不是专家,现在正在自学 iptables。但鉴于这是 docker 在您的主机上设置的规则:
user@server:~# sudo iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
您可以在 DOCKER* 目标前插入一条新规则。这将需要删除不是来自您的 IP 的包。
sudo iptables -I FORWARD 1 -s ! 123.123.123.123 -j DROP
尽管在 FORWARD 链上工作,如果您像我一样对 iptables 不太熟悉,您应该使用命令 iptables-apply 来避免将自己锁定。
iptables-apply 可以使用配置文件。
sudo iptables -L > config.v4
<edit file>
sudo iptables-apply config.v4
您的新规则 -A FORWARD !-s 62.157.38.52 -j DROP
应该在 -A FORWARD -j DOCKER-USER 之前运行
如果此限制仅针对 docker,那么您也可以将其添加到您的 DOCKER-USER 链中。