[iptables, ufw] 修改 docker container (redis) 的防火牆規則

觀看docker container ip
# docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
# 新版:
# docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

替 redis container 加上自定義的防火牆規則

iptables -N CUSTOM_REDIS
# 只接受 localhost 可以連到 redis container (172.17.0.5:6379)
# 若有需要其他白名單可以把 localhost 換成其他主機 ip
iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source localhost --destination 172.17.0.5 -j ACCEPT
# 其餘往 port 6379 都丟掉
iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 0.0.0.0/0 --destination 172.17.0.5 -j DROP
# 將規則替換掉
iptables -R DOCKER 1 -p tcp --source 0.0.0.0/0 --destination 172.17.0.5 --dport 6379 -j CUSTOM_REDIS

觀看規則運作情形
# iptables -L -v -n


Ref: http://blog.yunfei.me/blog/iptables_quota.html
// 開放22和80 port的可以流入流出
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
$ iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT


// 允許localhost與自己所有port通信,ex: reverse proxy將port 80 導向內部port 3000  
$ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 
// 將 input policy預設改成drop
$ iptables -P INPUT DROP

=============================================
Ref: 

編輯 ufw/after.rules
# vi /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
# 此處要視自己主機情況,如果你的 docker 用到的是 172.17.0.0,就要再補上去
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 172.17.0.0/12
-A DOCKER-USER -j RETURN -s 172.24.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
# 此處要視自己主機情況,如果你的 docker 用到的是 172.17.0.0,就要再補上去
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.17.0.0/12
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.24.0.0/12


-A DOCKER-USER -j RETURN
COMMIT
# END UFW AND DOCKER
接著重啟 ufw
# systemctl restart ufw

接著自己測試看看,理論上是沒問題囉!

留言

這個網誌中的熱門文章

[翻譯] 介紹現代網路負載平衡與代理伺服器

Grafana K6

Linux 事件驅動筆記