UFW 不阻止与 docker 实例的连接

UFW 不阻止与 docker 实例的连接

我有一个在 docker 实例中运行的 web 服务,该实例使用以下命令运行:

sudo docker run -d -p 4040:4040 ....

我的 UFW 规则如下:

~ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
4040                       DENY        Anywhere
22                         ALLOW       Anywhere (v6)
4040                       DENY        Anywhere (v6)

当我直接通过其 IP 访问该盒子时,我可以访问端口 4040。为什么 ufw 规则没有阻止它?

注意:作为docker安装的一部分,我更改了

DEFAULT_FORWARD_POLICY="DROP" 更改为 DEFAULT_FORWARD_POLICY="ACCEPT"

按照此处的 docker 说明,在 /etc/default/ufw 中(http://docs.docker.io/en/latest/installation/ubuntulinux/#docker-and-ufw

答案1

我遇到了同样的问题,并通过使用 IPTABLES 解决了它。

仅允许来自源 IP xxx.xxx.xxx.xxx 的 3306 的示例:

在 FORWARD 链的第 1 行添加与我们的 ip 匹配的源的接受

iptables -I FORWARD 1 -p tcp -i eth0 -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT

删除该端口 FORWARD 链上的所有其他连接

iptables -I FORWARD 2 -p tcp -i eth0 --dport 3306 -j DROP

使用行号(1 和 2)强制将规则添加到 docker 创建的规则之上,例如:

-A 转发 -d 0.0.0.0/32 !-i docker0 -o docker0 -p tcp -m tcp --dport 3306 -j 接受

答案2

有一个与此相关的已知问题。基本上,docker 在 UFW 后面配置 Iptables。

更多信息:

简短的可能回应:

Set DEFAULT_FORWARD_POLICY="ACCEPT" in /etc/default/ufw
Set DOCKER_OPTS="--iptables=false" in /etc/default/docker

答案3

尝试使用特定 IP 运行容器。

docker run -d -p 127.0.0.1:4040:4040 ...

相关内容