求助一个关于 CentOS 8 防火墙 Firewalld 的问题

2020-10-03 13:14:36 +08:00
 scfhao

我的环境: 在一个台式机上安装了 CentOS 8,在 CentOS 8 上安装了 Docker,在 Docker 里运行了 Postgres 数据库的容器,容器的端口暴漏到主机(-p 5432:5432 )。 遇到的问题: 在本机( CentOS 8 )上可以通过 5432 端口访问 Postgres 数据库服务,但是只要 CentOS 的防火墙开着,在同一个局域网中的其他电脑访问不到( telnet: Unable to connect to remote host: No route to host );如果关了 CentOS 的防火墙,其他主机可以正常访问 Postgres 。 需要补充的说明:

  1. Postgres 的两个配置文件postgresql.confpg_hba.conf已正常配置允许其他主机访问。
  2. 在 CentOS 8 的防火墙中已添加 Postgres 服务:firewall-cmd --zone=public --add-service=postgresql,也尝试过firewall-cmd --zone=public --add-port=5432/tcp
  3. 也尝试过关闭 SELinux,同样不起作用。
2469 次点击
所在节点    CentOS
6 条回复
wtks1
2020-10-03 16:47:36 +08:00
用 [netstat -atnp | grep LISTEN] 看看对应端口是哪个 IP 在监听的
wtks1
2020-10-03 16:48:57 +08:00
啊,抱歉,少看了一节,关了防火墙就行了的话,最好从其他群局域网设备上 telnet 一下这个端口,看看端口是不是真的开放了
mikeguan
2020-10-03 17:30:42 +08:00
建议 docker 和 firewallld 不共用,换 iptables
scfhao
2020-10-04 16:30:02 +08:00
@wtks1 关了防火墙的话,telnet 是通的。
wtks1
2020-10-04 17:20:20 +08:00
@scfhao 开了防火墙不通的话,那就证明你添加的放行策略并未生效,需要再研究一下 firewall 的命令
ward56
2021-01-21 09:11:23 +08:00
首先,你要明白 docker 运行机制
你的情况我再刚接触容器时遇到过。
据我个人观察,原因是:容器运行时会调用系统防火墙(底层的 iptables ),这时你再启用 firewalld 就会覆盖掉容器写入的配置。
建议: 你先在运行容器时观察容器 log,以及它的启动过程,这样更容器深入了解容器;
拓展:创建一个网桥,并给容器指定 ip,否则你在重启 docker 服务或者关掉 pg 库在启动会失败,原因同上,因为你的 pg 库 ip 被写进 iptables,关闭重启之类的操作会导致防火墙规则异常,解决方法:就是清空 iptables 或者重启 iptables 。
方法都是一通百通的,希望对你有帮助。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX