ubuntu下使用ufw保護docker容器

docker會默認開啓iptables NAT規則,若是使用-p port:port這種形式暴露端口是得不到ufw的防禦的。linux

由於ufw操做的其實是filter規則鏈,並無提供簡單的操做nat鏈的方案。mongodb

通過一番google以後,終於解決這個問題,現總結以下。docker

兩步走

第一步,禁用docker操做iptables的功能

編輯/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

第二步,編輯ufw默認規則鏈

編輯/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

https://svenv.nl/unixandlinux/dockerufw文檔

以後就能夠經過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默認監聽端口)

相關文章
相關標籤/搜索