Docker 限制容器端口只对指定段 IP 开启访问
之前写过一篇 【关于 Docker -p 穿透防火墙 firewalld 的问题的研究记录】
当时没有彻底解决问题,这次又遇到相同的场景,这次是遇到三级等保扫描,想着关闭对外的访问避免被扫到,这里记录彻底解决问题的方式
解决
参考官方文档: https://docs.docker.com/network/packet-filtering-firewalls/#port-publishing-and-mapping
主要是限制容器与外部连接
比如限制 MySQL 容器的 3306 端口只能在固定的 IP 访问
1 | iptables -I DOCKER-USER -m iprange -i eth0 ! --src-range 28.64.17.10-28.64.17.22 -p tcp --dport 3306 -j DROP |
这里注意需要指定网卡, 可以使用 ip a
查看
如果指定多个端口可以使用
1 | iptables -I DOCKER-USER -m iprange -i eth0 ! --src-range 28.64.17.10-28.64.17.22 -p tcp -m multiport --dports 8080,8087,8090:8095 -j DROP |
删除规则的话,使用
1 | iptables -L DOCKER-USER -nv --line-numbers |
注意
上面的端口要填写容器的端口而不是映射到宿主机的端口