docker会默认开启iptables NAT规则,若是使用-p port:port这种形式暴露端口是得不到ufw的防御的。linux
由于ufw操做的其实是filter规则链,并无提供简单的操做nat链的方案。mongodb
通过一番google以后,终于解决这个问题,现总结以下。docker
编辑/etc/default/docker
文件,修改DOCKER_OPTS="--iptables=false"
,等同于给docker启动参数添加--iptables=false
选项,此选项会禁用docker添加iptables规则。post
相关参考文档:google
http://blog.viktorpetersson.com/post/101707677489/the-dangers-of-ufw-dockerunix
编辑/etc/ufw/before.rules
这个文件,在文件末尾追加如下内容:code
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE COMMIT
以后重启一下ufw规则便可:blog
sudo ufw disable sudo ufw enable
相关参考文档:ip
以后就能够经过ufw allow
这种形式添加对docker容器的访问权限了。
如:
docker run -p 27017:27017 mongo # 启动mongodb服务,并映射到本机的*:27017这个端口上 sudo ufw allow from 114.114.0.0/16 to any port 27017
只容许114.114.0.0/16
这个网段的主机访问本机27017端口(mongodb默认监听端口)