【问题标题】:Postgres Connection refused when connecting remotely from a specific IP从特定 IP 远程连接时 Postgres 连接被拒绝
【发布时间】:2020-08-08 00:51:30
【问题描述】:

问题

无论我尝试对我的 pg_hba.conf` 文件进行什么更新,如果说明了我的 IP 地址,postgres 似乎都不允许我通过命令行进行连接。如果我将地址设置为任何地方运行我的用户,那么它可以正常工作。

设置

  • 我正在从 google vm 运行我的 postgres 数据库。
  • 我已为来自我的 IP 地址在 tcp 端口 5432 上的传入流量启用了防火墙白名单。
  • 我在测试我的 mariadb 数据库时设置了相同的东西,我可以毫无问题地连接到该数据库,所以我的服务器防火墙应该没有问题。

错误信息

user@Work-Station-A:~$ psql -U user -h <google vm public IP> -p 5432 cheese
psql: could not connect to server: Connection refused
        Is the server running on host "<google vm public IP>" and accepting
        TCP/IP connections on port 5432?

/etc/postgresql/10/main/pg_hba.conf

local   all             postgres                                peer
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             user           <my ip address>         md5
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

/etc/postgresql/10/main/postgresql.conf

listen_addresses = '*'          # what IP address(es) to listen on;
port = 5432
ssl = on

我注意到了什么

当我在 pg_hba.conf 文件中删除我的“用户”IP 连接的行时,我可以看到端口正在侦听:

user@work-server:~$ ss -nlt | grep 5432
LISTEN   0         128                 0.0.0.0:5432             0.0.0.0:*
LISTEN   0         128                    [::]:5432                [::]:*

但是如果我把线路放回去,当我检查 5432 上的监听端口时,什么都不会返回。如果我运行我的 pg_hba.conf` 是

host all user 0.0.0.0/0 md5

然后它会听,我可以毫无问题地连接到我的数据库。出于某种原因,我的 IP 地址似乎导致端口关闭,但我无法找出原因。有人可以确认我是否做错了什么或需要修改以解决这个问题,因为我不希望我的数据库可以从任何地方访问?

【问题讨论】:

  • 在将地址添加到 pg_hba.conf 文件后检查日志并重新启动 Postgresql 进程。如果没有进程正在侦听端口 5432,则您的 postgres 启动不正确。
  • @ex4 我可以确认每次使用sudo service postgresql restart 修改文件时都会重新启动postgres。您能否确认我如何检查日志以及我应该寻找什么?抱歉,如果这是一个基本问题,我对设置自己的 sql 数据库很陌生

标签: postgresql ubuntu-18.04


【解决方案1】:

一个选项可能是让数据库对所有 IP 开放,并通过 IPTABLES 在服务器上过滤,仅为您的公共 IP 或您需要的 IP 创建访问规则

指令应该是这样的:

iptables -A INPUT -p tcp -m state --state NEW --dport 5432 --source <google vm public IP>

你可以在下面LINK读一点IPTABLES

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多