在 Centos 上为 Postgres 配置防火墙规则的问题

Jon*_*man 7 postgresql firewall centos centos7

我试图按照本指南允许远程连接到 postgres http://www.cyberciti.biz/tips/postgres-allow-remote-access-tcp-connection.html
目前我遇到了防火墙问题。
我有它的设置,所以我有一个/tmp/v4我可以修改并从中恢复我的防火墙规则。
我尝试了 2 种设置。
指南推荐的一种:

-A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 00.000.000.00  --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -s 00.000.000.00 --sport 5432 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

当我使用这个设置和运行nc ipofserver 5432,我得到Ncat: connection timed out
如果我尝试设置

-I INPUT -p tcp -s 00.000.000.00  --dport 5432 -j ACCEPT
-I INPUT -p tcp -s 00.000.000.00  --dport 5432 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

我运行相同的 ncat 命令,我得到 Ncat: Connection refused

我在另一台服务器上使用相同的基本防火墙(不是上面列出的)来为 redis 提供服务,并且它工作正常。

firewalld 已在此框上禁用以支持 iptables,主要是出于熟悉目的。

两台机器都是 CentOS 7

00.000.000.00 替换我实际使用的计算机的 IP

nat*_*njo 15

centos7 使用 firewall-cmd 开箱即用,除非您已禁用它。我假设你没有,因为否则你会提到它。

有了这个假设,然后你可以简单地在你的 postgresql 主机上运行它:

firewall-cmd --add-service=postgresql
Run Code Online (Sandbox Code Playgroud)

一旦您确认它有效,那么您可以使用永久开关再次运行它以使其在重新启动后保持不变:

firewall-cmd --add-service=postgresql --permanent
Run Code Online (Sandbox Code Playgroud)

如果你安装了 bash-completion 包,重新登录后,firewall-cmd 会自动补全,非常好用。

编辑:OP 表示他不使用 firewall-cmd。所以假设他使用旧的 iptables 服务,那么规范的修改方式是编辑 /etc/sysconfig/iptables。

如果要允许传入连接到该主机中的端口 5432/tcp,则需要添加此行

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Run Code Online (Sandbox Code Playgroud)

并重新加载 iptables 服务。这当然将允许从任何主机到数据库服务器的所有连接。

如果您想限制可以连接的主机(让我们将其限制为一个,即 111.222.111.222),则:

-A INPUT -p tcp -s 111.222.111.222 --sport 1024:65535 --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

应该这样做,当然,删除另一个,然后重新加载 iptables 服务