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默認監聽端口)