postgresql Postgres无法侦听特定的IP地址

g2ieeal7  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(4)|浏览(363)

我试图阻止访问我的PostgreSQL,只允许访问Localhost和我的机器外部IP,类似于:“172.211.xx.xx”。此IP由我的ISP(Internet服务提供商)提供。
postgresql.conf中,我设置了以下行:

listen_addresses = '179.211.xx.xx'

但是我无法从我的计算机连接到数据库。我得到“服务器不侦听”。如果我更改为:

listen_addresses = '*'

一切正常,但我做不到。我只需要启用对此IP的访问。这是我的项目的安全要求。
年款pg_hba.conf

host    all             all             0.0.0.0/0            md5
t1qtbnec

t1qtbnec1#

postgresql.conf中的参数listen_addresses控制服务器将应答哪些ip地址,而不是服务器将允许哪些连接进行身份验证。在我看来,可以将listen_addresses设置为*,并将其余内容限制在pg_hba.conf中。换句话说:在pg_hba.conf上进行微调就可以了。
所以...

listen_addresses = '*'

..还有..

host all all 179.211.198.0/24

..应该可以。这意味着所有用户都可以访问此IP范围179.211.198.1 - 179.211.198.254中的所有数据库
您可以进一步限制特定用户对某些数据库的访问:

host my_db my_user 179.211.198.0/24
hgqdbh6s

hgqdbh6s2#

同样的,listen_addresses = '*'工作正常,但是某个特定的IP被拒绝了。我的错误是要使用的IP应该是而不是试图连接到PostgreSQL的远程服务器的IP,也不是PostgreSQL服务器的公共IP,而是网络接口的IP(duh)。例如,在PostgreSQL服务器上运行ip aifconfig

ip a
....
    inet XX.X.X.XXX ....

则在postgresql.conf中使用返回的IP
listen_addresses = 'XX.X.X.XXX,localhost'
加上pg_hba.conf中试图连接到PostgreSQL的远程服务器的IP。假设试图连接的远程服务器的IP是YY.Y.YYY.Y
host my_db my_psql_user YY.Y.YYY.Y/32 md5

huwehgph

huwehgph3#

除了Jim Jones' answer之外,请注意listen_addresses还可以获取IP地址和/或主机名的列表。
如果您有多个接口和/或多个IP地址,并且不想让Postgres监听所有接口(例如只监听LAN接口,而不监听WAN接口),您可以在postgresql.conf中使用如下代码:

listen_addresses = 127.0.0.1,192.168.1.2,192.168.1.3,my_server.example.lan

然后,您还需要配置pg_hba.conf和/或防火墙以控制客户端。

e37o9pze

e37o9pze4#

listen_addresses是PostgreSQL服务器的本地地址

postgresql.conflisten_addresses设置的名称可能会引起误解:它对应于试图连接到PostgreSQL服务器的客户端应用程序的远程地址。相反,您可以将listen_addresses设置视为将从运行PostgreSQL服务器的主机上的本地网络接口考虑的地址,以侦听传入的客户端请求。
如果没有提供listen_addresses设置(例如注解掉),它默认为环回接口(例如localhost)。因此,远程TCP连接到PostgreSQL服务器将是不可能的;只有本地连接通过环回接口。
请注意,您可以根据pg_hba.conf文件中客户端应用程序的远程地址设置过滤。

相关问题