我正在尝试连接到 Ubuntu Server 中的 PostgreSQL 数据库,我有 root 访问权限,但不知何故我无法打开端口 5432 进行远程访问,只能进行本地访问。当我在服务器上使用“nmap”命令时,会发生以下情况(XXX.XXX.X.XX 代表服务器的 IP):
nmap -p 5432 localhost
PORT STATE SERVICE
5432/tcp open postgresql
nmap -p 5432 XXX.XXX.X.XX
PORT STATE SERVICE
5432/tcp closed postgresql
我已经编辑了文件“pg_hba.conf”和“postgresql.conf”,但没有作用。
变化:
pg_hba.conf 文件:
# IPv4 local connections:
host all all all md5
# IPv6 local connections:
host all all all md5
postgresql.conf 文件:
listen_addresses = '*'
当我尝试连接 pgAdmin III 时,它显示的内容如下:
服务器不监听
无法连接到服务器:连接被拒绝(0x0000274D/10061)服务器是否在主机“XXX.XXX.X.XX”上运行并在端口 5432 上接受 TCP/IP 连接?
我曾尝试使用“ufw”命令打开端口,但没有效果。
谁能帮我?
答案1
确保您的防火墙没有阻止流量。
将以下规则附加到您的 iptables(更改X.X.X.X
为您的服务器 IP 地址):
# iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d X.X.X.X --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -s X.X.X.X --sport 5432 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
如果有效,请保存 iptables 并重新启动:
# apt-get install iptables-persistent
# /etc/init.d/iptables restart
如果您的网络有外部防火墙,您也应该允许那里的连接。
安全说明:向公众开放 PostgreSQL 端口可能会引起安全问题。您应该考虑将传入流量限制到特定 IP 地址/范围,方法是将-s 0/0
第一个 iptables 命令中的参数更改为-s X.X.X.X/X