【问题标题】:How to configure docker's iptables rule DOCKER-USER to restrict output?如何配置docker的iptables规则DOCKER-USER限制输出?
【发布时间】:2018-01-11 20:26:32
【问题描述】:

我正在运行一个容器,我只想允许它访问特定的 ip。也就是说,我想拒绝大部分的目标ip。

我尝试了以下方法:

iptables -I DOCKER-USER -o custom-interface ! -d xxx.xxx.xxx.xxx -j REJECT

但它拒绝所有连接,我不能ping xxx.xxx.xxx.xxx

真的很奇怪,我想我只是通过自定义接口阻止了输出数据包,不会到达 xxx.xxx.xxx.xxx。所以所有到达 xxx.xxx.xxx.xxx 的输入数据包和输出数据包都被接受。

但看来我错了。为什么?任何帮助表示赞赏。

编辑

接受的答案显示了如何配置传入限制,然后我学会了如何配置传出限制。

创建一个 BEFORE_DOCKER 表

iptables -N BEFORE_DOCKER

默认

iptables -I BEFORE_DOCKER -j DROP

Docker Containers 公共管理员访问权限(在此处插入所有允许的 IP)

iptables -I BEFORE_DOCKER -o eth0 -d 172.114.1.23 -j ACCEPT
iptables -I BEFORE_DOCKER -o eth0 -d 10.129.172.12 -j ACCEPT

Docker Containers Restricted LAN Access(在此处插入您的 LAN IP 范围或多个 IP)

iptables -I BEFORE_DOCKER -o eth1 -d 192.168.10.1 -j ACCEPT
iptables -I BEFORE_DOCKER -o eth1 -d 192.168.10.2 -j ACCEPT

最后一步是将其作为 FORWARD 链上的第一个表插入。

iptables -I FORWARD -i docker0 -j BEFORE_DOCKER

【问题讨论】:

    标签: linux docker networking iptables


    【解决方案1】:

    使用默认规则 REJECT 创建一个 BEFORE_DOCKER 表,下一步是将其作为 FORWARD 链上的第一个表插入。

    创建一个 BEFORE_DOCKER 表

    iptables -N BEFORE_DOCKER
    

    默认

    iptables -I BEFORE_DOCKER -j DROP
    

    Docker Containers 公共管理员访问权限(在此处插入所有允许的 IP)

    iptables -I BEFORE_DOCKER -i eth0 -s 172.114.1.23 -j ACCEPT
    iptables -I BEFORE_DOCKER -i eth0 -s 10.129.172.12 -j ACCEPT
    

    Docker Containers Restricted LAN Access(在此处插入您的 LAN IP 范围或多个 IP)

    iptables -I BEFORE_DOCKER -i eth1 -s 192.168.10.1 -j ACCEPT
    iptables -I BEFORE_DOCKER -i eth1 -s 192.168.10.2 -j ACCEPT
    

    最后一步是将其作为 FORWARD 链上的第一个表插入。

    iptables -I FORWARD -o docker0 -j BEFORE_DOCKER
    

    希望它会有所帮助!

    【讨论】:

    • 我只是无法理解您的答案...似乎配置了一个 iptable 来控制哪些外部 ip 可以访问容器。但我要控制的是容器可以访问哪些外部 ip。它只是直径。
    • 好的,尽管您给出了有关传入限制的答案。我也学会了如何配置外发限制,谢谢。
    【解决方案2】:

    根据 [1],您应该使用 DOCKER-USER 链:

    Docker 的所有 iptables 规则都添加到 DOCKER 链中。不要手动操作此链。如果您需要添加在 Docker 规则之前加载的规则,请将它们添加到 DOCKER-USER 链中。这些规则在 Docker 自动创建的任何规则之前应用。

    例如,如果您想阻止 docker0 接口中的所有容器访问 example.com - 您可以执行以下操作:

    iptables -I DOCKER-USER -d example.com -i docker0 -j REJECT
    

    [1]https://docs.docker.com/network/iptables/#add-iptables-policies-before-dockers-rules

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多