![当默认传出策略为“拒绝”时,UFW 会阻止 Docker 接口](https://linux22.com/image/757859/%E5%BD%93%E9%BB%98%E8%AE%A4%E4%BC%A0%E5%87%BA%E7%AD%96%E7%95%A5%E4%B8%BA%E2%80%9C%E6%8B%92%E7%BB%9D%E2%80%9D%E6%97%B6%EF%BC%8CUFW%20%E4%BC%9A%E9%98%BB%E6%AD%A2%20Docker%20%E6%8E%A5%E5%8F%A3.png)
鉴于我配置了 UFW
ufw default deny incoming
ufw default deny outgoing
并且只允许某些端口进行传出和传入连接。它工作正常,除非在同一台机器上的不同接口之间进行连接,例如为 Docker 的桥接网络创建的接口。(我实际上还没有检查任何其他接口)。
例如我有一个 Docker 容器
docker run --network some-net -p 127.0.0.1:50100:80 image-name
现在我无法与容器建立连接,因为它超时并显示以下消息:
$ curl localhost:50100
curl: (56) Recv failure: Connection reset by peer
allow
我可以通过将传出策略更改为,或添加规则以允许来解锁连接输出来自特定接口的连接:
ufw allow out on br-03a38c6b9c51
UFW配置如下:
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="DROP"
DEFAULT_FORWARD_POLICY="ACCEPT"
DEFAULT_APPLICATION_POLICY="SKIP"
我已经尝试添加--iptables=false
Docker 选项,以消除 Dockers 在初始化网络时创建的规则出现这种情况的情况。一旦容器在 UFW 规则中打开其端口,从容器调用任何外部主机都没有问题。
感谢您的任何想法。
答案1
也许你可以在这里看看这些问题:
- Ubuntu ufw:根据每个接口设置规则
- https://askubuntu.com/questions/703896/forward-only-web-traffic-to-another-interface
ufw 默认将规则应用于所有接口。因此必须指定哪条规则应用于哪个接口。
我认为链接中的问题可以更好地解释这一点。