UFW 不会阻止与 docker 实例的连接

mrw*_*ter 5 iptables firewall networking ufw

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

sudo docker run -d -p 4040:4040 ....
Run Code Online (Sandbox Code Playgroud)

我的 UFW 规则如下所示:

~ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
4040                       DENY        Anywhere
22                         ALLOW       Anywhere (v6)
4040                       DENY        Anywhere (v6)
Run Code Online (Sandbox Code Playgroud)

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

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

DEFAULT_FORWARD_POLICY="DROP" 到 DEFAULT_FORWARD_POLICY="ACCEPT"

在 /etc/default/ufw 根据此处的 dockers 说明(http://docs.docker.io/en/latest/installation/ubuntulinux/#docker-and-ufw

小智 3

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

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

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

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 接受


小智 0

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

docker run -d -p 127.0.0.1:4040:4040 ...
Run Code Online (Sandbox Code Playgroud)