1.docker默认的流量走向
根据内容大概得知访问容器内的端口是需要通过DOCKER-USER
表,因此限制访问容器端口的白名单IP就可以通过在 DOCKER-USER
表中添加规则就可以限制其他IP进行访问
2.牛刀小试
[root@localhost docker_iptables]# ls -l
total 12
-rw-r--r-- 1 root root 197 Aug 18 17:48 iplist_docker
-rw-r--r-- 1 root root 1678 Aug 18 17:40 iptables_docker_user.sh
-rw-r--r-- 1 root root 33 Aug 18 17:35 port_list
- iplist_docker 存放限制的IP白名单
10.10.8.2/32
10.10.9.2/32
- port_list 存放允许白名单访问的容器暴露的端口
9092
19848
3306
18848
15672
9090
- iptables_docker_user.sh 存放生成iptables的脚本命令
iptables -F DOCKER-USER
for i in `cat iplist_docker`;do iptables -D DOCKER-USER -s $i -p tcp --dport 9092 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -D DOCKER-USER -s $i -p tcp --dport 19848 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -D DOCKER-USER -s $i -p tcp --dport 3306 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -D DOCKER-USER -s $i -p tcp --dport 18848 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -D DOCKER-USER -s $i -p tcp --dport 15672 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -D DOCKER-USER -s $i -p tcp --dport 9090 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -I DOCKER-USER -s $i -p tcp --dport 9092 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -I DOCKER-USER -s $i -p tcp --dport 19848 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -I DOCKER-USER -s $i -p tcp --dport 3306 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -I DOCKER-USER -s $i -p tcp --dport 18848 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -I DOCKER-USER -s $i -p tcp --dport 15672 -j ACCEPT ;done
for i in `cat iplist_docker`;do iptables -I DOCKER-USER -s $i -p tcp --dport 9090 -j ACCEPT ;done
for i in `cat port_list`;do iptables -D DOCKER-USER -s 0.0.0.0/0 -p tcp --dport $i -j DROP;done
for i in `cat port_list`;do iptables -A DOCKER-USER -s 0.0.0.0/0 -p tcp --dport $i -j DROP;done
- 执行 iptables_docker_user.sh 脚本可生成的结果
[root@localhost docker_iptables]# iptables -nvL DOCKER-USER
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 10.10.9.2 0.0.0.0/0 tcp dpt:9092
0 0 ACCEPT tcp -- * * 10.10.8.2 0.0.0.0/0 tcp dpt:9092
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9092
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:19848
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:18848
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:15672
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9090
3.注意事项
1). 新建容器后DOCKER-USER会新增一条RETURN�的策略在表内最底层,需要将新增容器的访问策略添加到脚本内,执行脚本刷新访问策略 2). DOCKER-USER 只能限制IP访问容器暴露的端口,宿主机的服务无法进行限制,需要通过INPUT进行限制