Postgres无法监听特定的IP地址

时间:2018-03-18 13:58:46

标签: postgresql

我试图阻止访问我的PostgreSQL只能访问Localhost和我的机器外部IP,例如:“172.211.xx.xx”。此IP由我的ISP(Internet服务提供商)提供。

在postgresql.conf中,我设置了以下行:

listen_addresses = '179.211.xx.xx'

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

 listen_addresses = '*'

一切正常,但我无法做到。我只需要启用对此IP的访问权限,这是我项目的安全要求。

MY pg_hba.conf:

host    all             all             0.0.0.0/0            md5

3 个答案:

答案 0 :(得分:1)

参数listen_addresses位于postgresql.conf种控制服务器将响应的IP地址,而不是服务器将允许连接进行身份验证的控制。在我看来,将listen_addresses设置为*并将其余部分限制在pg_hba.conf中是可以的。换句话说:在pg_hba.conf进行微调就好了。

所以......

 listen_addresses = '*'

..和..

host all all 179.211.198.0/24

..应该这样做。这意味着所有用户都可以访问此ip范围内的所有数据库。您可以进一步限制特定用户对特定数据库的访问权限:

host my_db my_user 179.211.198.0/24

答案 1 :(得分:1)

除了Jim Jones' answer,还请注意listen_addresses can also take a list的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和/或防火墙来控制客户端。

答案 2 :(得分:0)

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

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

然后在postgresql.conf中使用返回的IP

listen_addresses = 'XX.X.X.XXX,localhost'

加上尝试连接到PostgreSQL的远程服务器的pg_hba.conf IP。假设尝试连接的远程服务器的IP为YY.Y.YYY.Y

host my_db my_psql_user YY.Y.YYY.Y/32 md5