这是我的情况。
我在局域网上的 Windows Server 上安装了 Postgresql。
我在局域网外设置了一个 IIS Web 服务器。我想从 Web 服务器连接到 postgresql 数据库。
Postgresql服务器IP:192.168.x.1
防火墙内部 IP:192.168.x.2
防火墙外部 IP:72.xx100
Web 服务器 IP - 内部 LAN 访问:192.168.x.3
Web 服务器 IP - 外部 LAN 访问:70.xx100
pg_hba.conf 文件有一个条目:host all all 0.0.0.0/24 md5
postgresql.conf 文件有一个条目:listen_addresses = '*'
这应该会删除从数据库端访问的所有限制。
我的最终目的是让 GIS 应用程序访问此数据库,以将数据合并到地图网站中。此时,我只是尝试使用 PgAdmin 从 Web 服务器访问 postgresql。
使用此配置,假设防火墙上正确打开了 5432 端口,我应该在Host
PGAdmin 服务器连接的框中输入什么 IP 地址?我最初的想法是应该是Firewall External IP: 70.x.x.100
,但这正确吗?
最后,如果需要的话,我会将其拆分成一个新问题:从性能和安全的角度来看,这种配置是否合乎逻辑,或者我应该以不同的方式处理这个问题?
答案1
主机全部全部 0.0.0.0/24 md5
嗯,什么?那只是匹配0.0.0.*
,这肯定不是你想要的。
您的意思0.0.0.0/0
是所有 IP 地址吗?
或者192.168.0.0/16
,即“我的 LAN 上的所有内容,包括防火墙和通过它的 NAT 流量”?
你正在使用 NAT,因此 PostgreSQL 永远不会看到外部 IP。通过防火墙的连接将来自防火墙的内部的IP。如果您想要添加一条仅针对来自防火墙本身或通过防火墙的连接规则,您可以添加一条与您的防火墙的精确内部 IP 和掩码相匹配的规则/32
,即仅添加该 IP。
顺便说一句,您建议的设置是合理的。当然,您需要在防火墙机器上进行端口转发。您可能希望在 PostgreSQL 中启用 TCP keepalive,以阻止防火墙因连接跟踪表超时而丢弃空闲连接。