我试图阻止访问我的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
4条答案
按热度按时间t1qtbnec1#
postgresql.conf
中的参数listen_addresses
控制服务器将应答哪些ip地址,而不是服务器将允许哪些连接进行身份验证。在我看来,可以将listen_addresses
设置为*
,并将其余内容限制在pg_hba.conf
中。换句话说:在pg_hba.conf
上进行微调就可以了。所以...
..还有..
..应该可以。这意味着所有用户都可以访问此IP范围
179.211.198.1 - 179.211.198.254
中的所有数据库您可以进一步限制特定用户对某些数据库的访问:
hgqdbh6s2#
同样的,
listen_addresses = '*'
工作正常,但是某个特定的IP被拒绝了。我的错误是要使用的IP应该是而不是试图连接到PostgreSQL的远程服务器的IP,也不是PostgreSQL服务器的公共IP,而是网络接口的IP(duh)。例如,在PostgreSQL服务器上运行ip a
或ifconfig
则在
postgresql.conf
中使用返回的IPlisten_addresses = 'XX.X.X.XXX,localhost'
加上
pg_hba.conf
中试图连接到PostgreSQL的远程服务器的IP。假设试图连接的远程服务器的IP是YY.Y.YYY.Yhost my_db my_psql_user YY.Y.YYY.Y/32 md5
huwehgph3#
除了Jim Jones' answer之外,请注意
listen_addresses
还可以获取IP地址和/或主机名的列表。如果您有多个接口和/或多个IP地址,并且不想让Postgres监听所有接口(例如只监听LAN接口,而不监听WAN接口),您可以在
postgresql.conf
中使用如下代码:然后,您还需要配置
pg_hba.conf
和/或防火墙以控制客户端。e37o9pze4#
listen_addresses
是PostgreSQL服务器的本地地址postgresql.conf
中listen_addresses
设置的名称可能会引起误解:它不对应于试图连接到PostgreSQL服务器的客户端应用程序的远程地址。相反,您可以将listen_addresses
设置视为将从运行PostgreSQL服务器的主机上的本地网络接口考虑的地址,以侦听传入的客户端请求。如果没有提供
listen_addresses
设置(例如注解掉),它默认为环回接口(例如localhost
)。因此,远程TCP连接到PostgreSQL服务器将是不可能的;只有本地连接通过环回接口。请注意,您可以根据
pg_hba.conf
文件中客户端应用程序的远程地址设置过滤。