您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Docker在使用“ -p时会忽略iptable规则 :”

Docker在使用“ -p时会忽略iptable规则 :”

您的iptables配置现在看起来有些破损,就像您在不重新启动Docker的情况下将其清除了一样。例如,和表中都有一条DOCKER链,但是没有引用它的规则,因此放在该链中的规则将不起作用。filter``nat

通常,如果要实现影响Docker容器的iptables规则,则需要将它们放在FORWARD表链中filter。每个容器都有其 自己的 IP地址,这意味着您的主机仅接受数据包,然后将FORWARD其发送到容器地址。

INPUT链中的规则仅适用于主机全局网络名称空间中接口的最终目的地为地址的数据包。

但是,我不确定iptables实际上是您的问题。

如果您试图公开容器中的服务,以使其他系统可以使用它们,则需要使用-p标记来发布这些端口docker run。您可以在文档的此部分中阅读有关此内容的更多信息。

如果您想使用要完成的任务的特定示例来更新您的问题,我可以提供更有针对性的答案。

的确,当您使用发布容器端口时,-p它通常可用于任何源ip地址。为了限制对已发布端口的访问,您需要向FORWARD链中添加新规则。例如,如果我启动Web服务器:

docker run --name web -p 80:8080 larsks/mini-httpd

容器中的Web服务器现在可以在主机上的端口8080上使用。如果要阻止对该端口的访问,则需要在该FORWARD链中插入一条规则,以阻止对容器ip上的端口80的访问。所以首先我需要容器的IP地址:

$ web_ip=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' web)
$ echo $web_ip
172.17.0.5

我在FORWARD链中创建的规则必须位于docker创建的规则 之前 ,因此我需要指定一个明确的位置:

iptables -I FORWARD 1 -d $web_ip -p tcp --dport 80 \! -s 192.168.1.10 -j DROP

这将阻止来自192.168.1.10以外的主机的所有流量。

如果您希望规则适用于所有容器而不是特定容器,则可以将其绑定到docker0接口而不是特定的IP地址:

-A FORWARD -o docker0 -p tcp --dport 80 \! -s 192.168.1.10 -j DROP

这将禁止访问 任何 容器上的端口80 。

其他 2022/1/1 18:20:56 有436人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶