[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 -L -v -n
Ref: http://blog.yunfei.me/blog/iptables_quota.html
// 開放22和80 port的可以流入流出
# 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
// 允許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接著自己測試看看,理論上是沒問題囉!
留言
張貼留言