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”
在/ etc / default / ufw中,根据docker工人的说明( http://docs.docker.io/en/latest/installation/ubuntulinux/#docker-and-ufw )
我有同样的问题,并通过使用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 FORWARD -d 0.0.0.0/32! -i docker0 -o docker0 -p tcp -m tcp –dport 3306 -j ACCEPT
有一个与此相关的已知问题。 基本上,docker正在配置UFW后面的Iptables。
更多信息:
- http://www.acervera.com/blog/2016/03/05/ufw_plus_docker
- https://github.com/docker/docker/issues/4737
可能的答案很短:
Set DEFAULT_FORWARD_POLICY="ACCEPT" in /etc/default/ufw Set DOCKER_OPTS="--iptables=false" in /etc/default/docker
尝试使用特定的IP运行容器。
docker run -d -p 127.0.0.1:4040:4040 ...