我已经在 CentOS 6.6 机器上通过 docker 安装了 Crate.io 的一个实例。
默认情况下,Crate.io 在端口 4200 上运行并向全世界开放。
我想确保这一点,以便只有本地主机可以连接到 Crate 服务。
我尝试使用以下命令来实现这一点:
iptables -A INPUT -p tcp --dport 4200 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 4200 -j DROP
service iptables save
但是,该服务仍可通过 4200 端口访问
我还注意到我的 iptables 中有以下行:
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:4200
该规则与 docker 容器有关,所以我不确定这里该如何进行。
有人对此有推荐的程序吗?
答案1
如果你通过 Docker 运行服务,那么对INPUT
链的更改将不会产生任何影响。iptablesINPUT
链用于发往对于您的主人.docker 容器有自己的 IP 地址,因此当你的主持人在其中一个暴露端口上接收到一个数据包,它转发到容器。这意味着FORWARD
链中的规则是相关的。
当您使用-p
或公开端口时,Docker 会添加转发规则-P
。您可以通过在 docker 规则之前在链中插入其他规则来阻止访问FORWARD
,但这很棘手(因为每次重新部署容器时都需要手动更新规则)。
如果您只想从本地主机访问服务,最好的办法就是不要使用-p
或公开任何端口-P
。您仍然可以使用容器的 IP 地址(在您的示例中为 172.17.0.2)访问容器化服务。