【问题标题】:UFW to allow traffic from DockerUFW 允许来自 Docker 的流量
【发布时间】:2020-11-30 09:20:12
【问题描述】:

我有一个具有此 UFW 配置的开发服务器:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere                  
22/tcp (v6)                LIMIT       Anywhere (v6)             

123/udp                    ALLOW OUT   Anywhere                  
DNS                        ALLOW OUT   Anywhere                  
80/tcp                     ALLOW OUT   Anywhere                  
443/tcp                    ALLOW OUT   Anywhere                  
22/tcp                     ALLOW OUT   Anywhere                  
123/udp (v6)               ALLOW OUT   Anywhere (v6)             
DNS (v6)                   ALLOW OUT   Anywhere (v6)             
80/tcp (v6)                ALLOW OUT   Anywhere (v6)             
443/tcp (v6)               ALLOW OUT   Anywhere (v6)             
22/tcp (v6)                ALLOW OUT   Anywhere (v6)

我的问题是这也会在内部阻止来自 Docker 的流量。

我运行一个 Docker 容器,将 8000:8000 映射为 http,如果我禁用 UFW,我可以按预期发出请求。但是,启用 UFW 后,即使在内部,我也无法访问端口 8000。

如何允许此流量供内部使用?我想通过ssh -L 8000:127.0.0.1:8000 example.com访问,所以不想对外开放8000端口访问。


更新:

考虑到问题可能是 UFW 也将规则应用于环回接口,我用这些新规则更新了我的规则:

To                         Action      From
--                         ------      ----
Anywhere on lo             ALLOW       Anywhere                  
Anywhere on 127.0.0.1      ALLOW       Anywhere                  
Anywhere (v6) on lo        ALLOW       Anywhere (v6)             
Anywhere (v6) on 127.0.0.1 ALLOW       Anywhere (v6)             

Anywhere                   ALLOW OUT   Anywhere on lo            
Anywhere                   ALLOW OUT   Anywhere on 127.0.0.1     
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on lo       
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on 127.0.0.1

这并不能解决问题。

【问题讨论】:

    标签: docker ufw


    【解决方案1】:

    ufw allow from <some_address> to any app <app_name>

    手册页声明不要输入端口号:

    您不应该使用任何一种语法来指定协议,而对于扩展语法,请使用 app 代替 port 子句。 这可能意味着它会让<app_name> 使用它需要的任何端口

    其他可能有用的命令:

    ufw app info <app_name> 其中列出了<app_name>的个人资料。

    ufw app update <app_name>
    其中更新了<app_name> 的个人资料。您可以使用 all 更新所有应用程序配置文件。

    您可以使用:

    ufw app update --add-new <app_name> 命令为<app_name> 添加一个新的配置文件并更新它,遵循你用ufw app default <policy> 设置的规则。

    应用配置文件存储在/etc/ufw/applications.d,有时存储在/etc/services

    欲了解更多信息,请查看 ufw 的手册页

    man ufw

    更新:Docker 使用名为 docker0 的私​​有接口,您可以允许 docker 访问您的主机系统。

    您可以使用界面上的信息来创建规则,例如, ufw allow out on docker0 from 172.17.0.0/16

    使用端口,可以通过以下命令使这条规则更严格,例如

    ufw allow out on docker0 from 172.17.0.0/16 port 80 proto tcp

    Docker 为容器创建了一个新接口,要查看它,您可以使用ifconfig 命令:

    docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
            ether 02:42:a4:5e:e9:9c  txqueuelen 0  (Ethernet)
            RX packets 87  bytes 17172 (17.1 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 117  bytes 14956 (14.9 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    This interface routes traffic through 172.17.xxx.xxx
    

    【讨论】:

    • 不会打开端口从外部访问吗?它们应该只能从机器内部访问。
    • 如果您使用的是 127.0.0.1,这应该保留在内部,因为这是环回地址。
    • 我看不出这有什么帮助。 “应用程序”只是端口号别名,我对基于每个端口打开不感兴趣。
    猜你喜欢
    • 2021-03-28
    • 2020-11-14
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多