Postgres 无法侦听特定 IP 地址

Ron*_*las 2 postgresql

我试图阻止访问我的 PostgreSQL 并只允许访问本地主机和我的机器外部 IP,例如:“172.211.xx.xx”。该 IP 由我的 ISP(Internet 服务提供商)提供。

postgresql.conf我设置以下行:

listen_addresses = '179.211.xx.xx'
Run Code Online (Sandbox Code Playgroud)

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

 listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

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

我的pg_hba.conf

host    all             all             0.0.0.0/0            md5
Run Code Online (Sandbox Code Playgroud)

Jim*_*nes 5

参数listen_addressesat postgresql.confsort 控制服务器将回答哪些 ip 地址,而不是服务器将允许连接进行身份验证。在我眼里,这是正常的设置listen_addresses,以*和在约束休息pg_hba.conf。换句话说:在 上做微调pg_hba.conf就好了。

所以 ..

 listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

.. 和 ..

host all all 179.211.198.0/24
Run Code Online (Sandbox Code Playgroud)

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

host my_db my_user 179.211.198.0/24
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句:监听未绑定到机器接口的地址是没有意义的。数据包永远不会到达它。 (2认同)

frm*_*elz 5

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

ip a
....
    inet XX.X.X.XXX ....
Run Code Online (Sandbox Code Playgroud)

然后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