# docker防火墙设置

docker使用的防火墙是使用iptables的DOCKER-USER链,启动时会自动添加

Chain DOCKER-USER (1 references)
return all -- 0.0.0.0/0 0.0.0.0/0

此时无论在firewall-cmd上怎么设置,所有容器都可以访问,需要把上面的规则删除掉

iptables -D DOCKER-USER 1

容器允许访问外网

iptables -A DOCKER-USER -m state --state ESTABLISHED,RELATED -j ACCEPT

添加容器之间的访问规则,

iptables -A DOCKER-USER -s 172.17.0.0/16 -j ACCEPT
##可访问的ip段根据实际调整

添加内网ip的访问规则,允许访问

iptables -A DOCKER-USER -s 192.168.0.0/16 -j ACCEPT
#可访问的ip段根据实际调整

开放nginx容器的端口可被访问

iptables -A DOCKER-USER -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -p tcp --dport 443 -j ACCEPT

重点,其它都不能访问

iptables -A DOCKER-USER -j DROP

最后COCKER-USER 链大概如下

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.6.0/24       0.0.0.0/0           
ACCEPT     all  --  172.17.0.0/16        0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
DROP       all  --  0.0.0.0/0            0.0.0.0/0  

要临时开放某个接口

iptables -I DOCKER-USER -p tcp --dport 15672 -j ACCEPT
#插入第一条
#处理完成后,删除掉第一条
iptables -D DOCKER-USER 1
/usr/bin/bash
#常规例子

#删除原来的链:return all -- 0.0.0.0/0 0.0.0.0/0
iptables -D DOCKER-USER 1
#容器允许访问外网
iptables -A DOCKER-USER -m state --state ESTABLISHED,RELATED -j ACCEPT
#容器之间可访问
iptables -A DOCKER-USER -s 172.17.0.0/16 -j ACCEPT
#局域网可访问容器
iptables -A DOCKER-USER -s 192.168.0.0/16 -j ACCEPT
#容器端口80/443可被外网访问
iptables -A DOCKER-USER -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -p tcp --dport 443 -j ACCEPT
#其它都不能访问
iptables -A DOCKER-USER -j DROP