杨园建设社区网站,PHP是做网站最好的,兰州网站制作公司服务电话,对接空间站docker比linux防火墙规则优先级要高#xff0c;一旦在docker里面配置了对外服务端口的话在iptable里面封不掉#xff0c;需要通过下面的方法进行封禁#xff1a;
这里我的宿主机IP地址是10.5.1.244,docker 内部网络ip段是默认的172.17段的#xff0c;以下为命令#xff1…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_IP10.5.1.244
DOCKER_NETWORK172.17.0.0/16
PORTS(3306 6379 9200 7555 8072)# 循环封禁端口
for PORT in ${PORTS[]}; doiptables -I DOCKER-USER -p tcp ! -s $HOST_IP --dport $PORT -j DROPiptables -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]
DescriptionLoad iptables rules after Docker
Afterdocker.service
Requiresdocker.service[Service]
Typeoneshot
ExecStart/etc/iptables-rules.sh
RemainAfterExittrue[Install]
WantedBymulti-user.target然后配置为开机自启动并重启服务器进行规则测试
sudo systemctl daemon-reload
sudo systemctl enable iptables-rules.service
sudo systemctl start iptables-rules.servicereboot