CentOS 上 PostgreSQL 网络配置要点
一 配置文件与关键参数
- 配置文件位置通常为:/var/lib/pgsql/<版本号>/data/,核心文件包括:
- postgresql.conf:网络监听与端口等全局参数
- pg_hba.conf:基于主机、用户、数据库的访问控制
- 常用参数与示例
- postgresql.conf
- listen_addresses:监听地址,设为 ‘*’ 监听所有接口,或指定内网地址如 ‘192.168.50.24’
- port:监听端口,默认 5432
- pg_hba.conf(按行匹配,自上而下)
- 示例:host all all 192.168.6.0/24 md5(允许 192.168.6.0/24 网段以密码方式连接)
- 示例:host all all 0.0.0.0/0 md5(允许所有 IPv4,生产环境不建议)
- 认证方式常用:md5(密码哈希)、scram-sha-256(更安全)、peer(本机操作系统用户映射)、trust(免密,慎用)
二 远程访问配置步骤
- 修改监听与端口
- 编辑 postgresql.conf:设置 listen_addresses = ‘*’(或指定内网 IP),确认 port = 5432
- 配置客户端认证
- 编辑 pg_hba.conf:为需要的来源网段添加规则,例如
- host all all 192.168.6.0/24 md5
- 如需临时全网放行:host all all 0.0.0.0/0 md5(请结合安全策略使用)
- 使配置生效
- 需要重启的配置(如 listen_addresses、port):执行
- systemctl restart postgresql-<版本号>
- 仅调整访问规则时,可热加载:
- 以数据库目录为工作目录执行:pg_ctl reload,或 pg_ctl -D /var/lib/pgsql/<版本号>/data reload
- 防火墙放行
- CentOS 7(firewalld)
- firewall-cmd --permanent --add-port=5432/tcp
- firewall-cmd --reload
- CentOS 8(firewalld 服务名方式)
- firewall-cmd --permanent --add-service=postgresql
- firewall-cmd --reload
- 验证监听
- 执行:ss -tulnp | grep 5432,应看到 0.0.0.0:5432 或 :::5432 处于监听状态
三 认证与安全建议
- 生产环境避免使用 trust,对外网开放时禁止使用;内网按最小权限开放网段与数据库对象
- 密码存储建议优先 scram-sha-256,兼容性与安全性优于 md5
- 示例(pg_hba.conf,按业务收紧)
- 内网网段:host all all 192.168.50.0/24 scram-sha-256
- 本地 Unix 套接字:local all all peer(保持系统用户与数据库用户一致性)
- 复制用户:host replication replicator 192.168.50.0/24 scram-sha-256
- 修改认证方式后,通常需要重启数据库或至少重载配置,并重新测试连接
四 常见问题排查
- 服务未运行:执行 systemctl status postgresql-<版本号>;未运行则 systemctl start 并设置开机自启
- 监听地址不对:确认 postgresql.conf 中 listen_addresses 与 port,并用 ss -tulnp | grep 5432 检查是否监听 0.0.0.0:5432
- 防火墙阻断:按上文放行 5432/tcp 或 postgresql 服务,并重新加载
- 认证被拒:检查 pg_hba.conf 中对应来源网段、数据库、用户与 METHOD 是否匹配;必要时重载或重启
- 客户端连接失败:核对 主机 IP、端口、用户名、密码;查看数据库日志(常见路径 /var/log/postgresql/)获取具体错误