一、起因
今天给pg做漏洞修复,因为pg只是对本机的其他服务使用,不对外使用,所以准备直接在firewalld中关闭pg的5432端口
然而神奇的一幕出现了,在其他服务器上telnet pg所在服务器的5432端口,居然能通,相当于firewalld对docker不起作用!
在docker中运行第三方服务时,通常需要绑定服务端口到本地主机。但使用 -p 参数进行的端口映射,会自动在iptables中建立规则,绕过firewalld,这对于端口级的黑白名单控制管理是很不利的,所以我们需要对iptables进行手动修改。
二、解决
方案一、修改docker配置文件
vim /etc/docker/daemon.json
"iptables": "false"
sudo systemctl daemon-reload
sudo systemctl restart docker
此方案也有几个弊端,如:
- 此服务器上所有容器的端口对外都无法访问
- 容器无法访问互联网
- 无法按需只关闭某个容器的对外访问
方案二、修改iptables规则,去掉不需要对外提供服务的端口
# 查看规则
iptables -nL --line-numbers
# 删除DOCKER链的第5条规则
iptables -D DOCKER 5
# 此容器只接受来自地址10.10.10.64的连接请求,172.17.0.2为容器ip
iptables -A DOCKER -s 10.10.10.64 -d 172.17.0.2 -p tcp --sport -j ACCEPT
标签:iptables,docker,容器,端口,firewalld,pg,绕过,Docker
From: https://www.cnblogs.com/williamzheng/p/17060105.html