有些人的解法是修改 docker 的iptables 設定,但可能會衍生出其他問題
所以建議以下作法
編輯 /etc/ufw/after.rules
到檔案下方新增以下內容
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
COMMIT
# END UFW AND DOCKER
存檔,重啟 ufw
# systemctl restart ufw
新增以下 rules
ufw allow from 127.0.0.1
ufw allow from 信任ip1
ufw allow from 信任ip2
ufw deny from any
ufw route allow proto tcp from 信任ip1 to any port 8888
ufw route allow proto tcp from 信任ip1 to any port 80
ufw route allow proto tcp from 信任ip2 to any port 8888
ufw route allow proto tcp from 信任ip2 to any port 80
列出rule
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] Anywhere ALLOW IN 127.0.0.1
[ 2] Anywhere ALLOW IN 信任ip1
[ 3] Anywhere ALLOW IN 信任ip2
[ 4] Anywhere DENY IN Anywhere
[ 5] 8888/tcp ALLOW FWD 信任ip1
[ 6] 80/tcp ALLOW FWD 信任ip1
[ 7] 8888/tcp ALLOW FWD 信任ip2
[ 8] 80/tcp ALLOW FWD 信任ip2
[ 9] Anywhere (v6) DENY IN Anywhere (v6)
測試功能正常
特別注意的是, route allow 的 port是 container listen 的 port
不是對應到 host 機上的 port
如
ports:
- 8080:80
就要允許 80 而非 8080
留言列表