如何从另一个网络远程连接到PostgreSQL数据库?
如何从另一个网络远程连接到PostgreSQL数据库?
我正在创建一个使用PostgreSQL数据库服务器的应用程序,该服务器在我运行的Linux(20.1 Ubuntu)机器上。然而,当Linux机器与试图连接到它的客户端不在同一网络上时,我会收到以下错误:\n服务器是否在主机xxx.xxx.xx.xx上运行,并接受端口xxxx上的TCP/IP连接?\n
\n我已经在防火墙中为该端口设置了例外,并且由于在同一网络上所有工作都正常,这使我相信我的配置是正确的,我不明白我做错了什么。我已经尝试了这里的所有方法。\n我的pg_hba.conf
如下所示:\nlocal replication all peer\nhost replication all 127.0.0.1/32 md5\nhost replication all ::1/128 md5\nhost all all 0.0.0.0/0 md5\nhost all all ::/0 md5\n
\n我的postgresql.conf
如下所示:\n# - 连接设置 -\nlisten_addresses = \'*\' # 监听的IP地址;\n # 逗号分隔的地址列表;\n # 默认为\'localhost\'; 使用\'*\'表示所有\n # (更改需要重新启动)\nport = 5432 # (更改需要重新启动)\nmax_connections = 100 # (更改需要重新启动)\n
\n有人可以帮助我或指导我如何解决这个问题吗?我已经检查了所有答案,但如果我漏掉了什么,请原谅重复。谢谢您的帮助。
如何从其他网络远程连接到PostgreSQL数据库?
问题原因:防火墙未允许端口5432的连接。
解决方法:
1. 使用以下命令将端口5432添加到防火墙允许的端口列表中:
root:~# ufw allow 5432/tcp Rule added Rule added (v6)
2. 现在允许来自IPv4和IPv6的连接:
... [11] 40678/tcp ALLOW IN Anywhere [12] 5432/tcp ALLOW IN Anywhere [13] 888/tcp (v6) ALLOW IN Anywhere (v6) [14] 20/tcp (v6) ALLOW IN Anywhere (v6) [15] 21/tcp (v6) ALLOW IN Anywhere (v6) [16] 22/tcp (v6) ALLOW IN Anywhere (v6) [17] 80/tcp (v6) ALLOW IN Anywhere (v6) [18] 39000:40000/tcp (v6) ALLOW IN Anywhere (v6) [19] 8888/tcp (v6) ALLOW IN Anywhere (v6) [20] 8443/tcp (v6) ALLOW IN Anywhere (v6) [21] 8443/udp (v6) ALLOW IN Anywhere (v6) [22] 443/tcp (v6) ALLOW IN Anywhere (v6) [23] 40678/tcp (v6) ALLOW IN Anywhere (v6) [24] 5432/tcp (v6) ALLOW IN Anywhere (v6)
备注:允许从外部连接到PostgreSQL端口会暴露它受到暴力破解攻击的风险。
使用Fail2Ban创建一个策略来禁止此类滥用攻击,可以参考此链接。