我试图阻止访问我的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
答案 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 a
或ifconfig
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