赞
踩
docker比linux防火墙规则优先级要高,一旦在docker里面配置了对外服务端口的话在iptable里面封不掉,需要通过下面的方法进行封禁:
这里我的宿主机IP地址是10.5.1.244,docker 内部网络ip段是默认的172.17段的,以下为命令:
注意要先DROP再ACCEPT,即先输入DROP类命令,后输入ACCEPT命令,后续输入的命令在防火墙的规则会更靠上,即更优先生效。
sudo iptables -I DOCKER-USER -p tcp ! -s 10.5.1.244 --dport 3306 -j DROP #非宿主机IP丢弃
sudo iptables -I DOCKER-USER -p tcp -s 172.17.0.0/16 --dport 3306 -j ACCEPT #docker内部ip允许访问
sudo iptables -I DOCKER-USER -p tcp ! -s 10.5.1.244 --dport 6379 -j DROP #非宿主机IP丢弃
sudo iptables -I DOCKER-USER -p tcp -s 172.17.0.0/16 --dport 6379 -j ACCEPT #docker内部ip允许访问
sudo netfilter-persistent save
sudo netfilter-persistent reload
#可以通过下面的命令查看配置结果
sudo iptables -L DOCKER-USER -n --line-numbers
Chain DOCKER-USER (1 references)
num target prot opt source destination
1 ACCEPT 6 -- 172.17.0.0/16 0.0.0.0/0 tcp dpt:7555
2 ACCEPT 6 -- 172.17.0.0/16 0.0.0.0/0 tcp dpt:8072
3 DROP 6 -- !10.5.1.244 0.0.0.0/0 tcp dpt:7555
4 DROP 6 -- !10.5.1.244 0.0.0.0/0 tcp dpt:8072
5 ACCEPT 6 -- 172.17.0.0/16 0.0.0.0/0 tcp dpt:6379
6 DROP 6 -- !10.5.1.244 0.0.0.0/0 tcp dpt:6379
7 ACCEPT 6 -- 172.17.0.0/16 0.0.0.0/0 tcp dpt:3306
8 DROP 6 -- !10.5.1.244 0.0.0.0/0 tcp dpt:3306
9 RETURN 0 -- 0.0.0.0/0 0.0.0.0/0
以上只对重启前的防火墙规则有效,当这台docker宿主机重启以后所有的配置都会丢失,还需要进一步使用其他方法,下面是解决方案。
sudo nano /etc/iptables-rules.sh
创建一个脚本文件,脚本内容如下:
- #!/bin/bash
-
- # 定义变量
- HOST_IP="10.5.1.244"
- DOCKER_NETWORK="172.17.0.0/16"
- PORTS=(3306 6379 9200 7555 8072)
-
- # 循环封禁端口
- for PORT in "${PORTS[@]}"; do
- iptables -I DOCKER-USER -p tcp ! -s "$HOST_IP" --dport "$PORT" -j DROP
- iptables -I DOCKER-USER -p tcp -s "$DOCKER_NETWORK" --dport "$PORT" -j ACCEPT
- done
然后赋予脚本执行权限
sudo chmod +x /etc/iptables-rules.sh
再创建一个服务实现开机自启动执行
sudo nano /etc/systemd/system/iptables-rules.service
服务内容如下:
- [Unit]
- Description=Load iptables rules after Docker
- After=docker.service
- Requires=docker.service
-
- [Service]
- Type=oneshot
- ExecStart=/etc/iptables-rules.sh
- RemainAfterExit=true
-
- [Install]
- WantedBy=multi-user.target
然后配置为开机自启动并重启服务器进行规则测试
- sudo systemctl daemon-reload
- sudo systemctl enable iptables-rules.service
- sudo systemctl start iptables-rules.service
-
- reboot
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。