我试图阻止访问我的 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)
参数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)
有相同的,listen_addresses = '*'可以工作,但特定的 IP 被拒绝。我的错误是,要使用的 IP 不应该是尝试连接到 PostgreSQL 的远程服务器的 IP,也不是 PostgreSQL 服务器的公共 IP,而是网络接口的 IP(废话)。例如,在 PostgreSQL 服务器上运行ip a或ifconfig
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
| 归档时间: |
|
| 查看次数: |
4329 次 |
| 最近记录: |