1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG076-PG远程访问配置:端口/防火墙/认证综合设置

本文档风哥主要介绍PostgreSQL的远程访问配置,包括端口设置、防火墙配置和认证配置,以及生产环境中的实战案例和最佳实践。风哥教程参考PostgreSQL官方文档Server Administration内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 PostgreSQL远程访问的概念

PostgreSQL远程访问是指从远程客户端连接到PostgreSQL数据库服务器的能力。默认情况下,PostgreSQL只允许本地连接,需要进行配置才能允许远程连接。更多视频教程www.fgedu.net.cn

PostgreSQL远程访问的特点:

  • 默认只允许本地连接
  • 需要配置监听地址和端口
  • 需要配置防火墙规则
  • 需要配置认证方式
  • 远程访问可能带来安全风险

1.2 PostgreSQL端口配置的概念

PostgreSQL端口配置是指设置数据库服务器监听的网络端口,默认端口为5432。端口配置决定了客户端如何连接到数据库服务器。

# PostgreSQL默认端口
– 默认端口:5432
– 可配置范围:1-65535
– 建议使用:1024以上的端口
– 注意事项:避免使用已被其他服务占用的端口

1.3 PostgreSQL防火墙配置的概念

PostgreSQL防火墙配置是指设置防火墙规则,允许或拒绝特定IP地址或网络访问PostgreSQL数据库服务器的端口。学习交流加群风哥微信: itpux-com

from oracle:www.itpux.com

PostgreSQL防火墙配置的作用:

  • 控制哪些IP地址可以访问数据库服务器
  • 增强数据库服务器的安全性
  • 防止未授权的访问
  • 减少安全漏洞的风险

1.4 PostgreSQL认证配置的概念

PostgreSQL认证配置是指设置客户端连接到数据库服务器时的认证方式,包括密码认证、MD5认证、SSL认证等。认证配置决定了客户端如何证明自己的身份。

# PostgreSQL认证方式
– trust:信任认证,不需要密码
– md5:MD5密码认证
– password:明文密码认证(不推荐)
– ident:操作系统用户认证
– peer:本地用户认证
– ldap:LDAP认证
– radius:RADIUS认证
– cert:SSL证书认证

Part02-生产环境规划与建议

2.1 PostgreSQL远程访问规划

PostgreSQL远程访问规划要点:

# 远程访问需求分析
– 哪些客户端需要远程访问
– 客户端的IP地址或网络范围
– 访问的数据库和权限
– 访问的时间和频率

# 远程访问安全考虑
– 只允许必要的IP地址访问
– 使用安全的认证方式
– 考虑使用SSL加密连接
– 定期审查远程访问权限

# 远程访问架构
– 直接远程访问:客户端直接连接数据库服务器
– 中间层访问:通过应用服务器或连接池访问
– VPN访问:通过VPN连接访问

2.2 PostgreSQL端口规划

PostgreSQL端口规划要点:

# 端口选择
– 默认端口:5432
– 自定义端口:1024-65535
– 避免使用:已被其他服务占用的端口

# 多实例端口规划
– 实例1:5432
– 实例2:5433
– 实例3:5434
– 以此类推

# 端口安全
– 只允许必要的IP地址访问端口
– 考虑使用非标准端口增加安全性
– 定期检查端口访问情况

2.3 PostgreSQL防火墙规划

PostgreSQL防火墙规划要点:

# 防火墙规则规划
– 允许的IP地址或网络范围
– 允许的端口
– 协议类型(TCP/UDP)
– 规则的优先级

# 防火墙策略
– 默认拒绝所有访问
– 只允许必要的访问
– 定期审查和更新规则
– 记录防火墙日志

# 不同防火墙系统
– iptables(Linux)
– firewalld(Linux)
– Windows防火墙
– 硬件防火墙

2.4 PostgreSQL认证规划

PostgreSQL认证规划要点:

# 认证方式选择
– 本地连接:peer或ident认证
– 远程连接:md5或SSL认证
– 生产环境:推荐使用md5或SSL认证
– 测试环境:可以使用trust认证

# 认证配置文件
– pg_hba.conf:主认证配置文件
– 配置格式:TYPE DATABASE USER ADDRESS METHOD
– 配置顺序:从具体到一般

# 密码策略
– 使用强密码
– 定期更换密码
– 密码加密存储
– 限制密码尝试次数

风哥提示:合理的远程访问规划对于数据库的安全性和可用性至关重要,需要根据业务需求和安全要求进行详细规划。

Part03-生产环境项目实施方案

3.1 PostgreSQL端口配置

3.1.1 查看当前端口配置

# 以超级用户登录
$ psql -U pgsql

# 查看当前端口
postgres=# SHOW port;

port
——
5432
(1 row)

# 查看监听地址
postgres=# SHOW listen_addresses;

listen_addresses
——————
localfgedu.net.cn
(1 row)

3.1.2 修改端口配置

# 修改postgresql.conf文件
$ vi /postgresql/data/postgresql.conf

# 修改监听地址(允许所有地址访问)
listen_addresses = ‘*’

# 修改端口(可选)
# port = 5432

# 重新加载配置
$ pg_ctl reload -D /postgresql/data

# 验证配置修改
postgres=# SHOW listen_addresses;

listen_addresses
——————
*
(1 row)

3.2 PostgreSQL防火墙配置

3.2.1 使用iptables配置防火墙

# 查看当前iptables规则
$ iptables -L -n

# 添加PostgreSQL端口规则(允许特定IP访问)
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 –dport 5432 -j ACCEPT

# 添加PostgreSQL端口规则(允许所有IP访问)
$ iptables -A INPUT -p tcp –dport 5432 -j ACCEPT

# 保存iptables规则
$ service iptables save

# 重启iptables服务
$ service iptables restart

# 验证iptables规则
$ iptables -L -n | grep 5432

3.2.2 使用firewalld配置防火墙

# 查看当前firewalld规则
$ firewall-cmd –list-all

# 添加PostgreSQL服务
$ firewall-cmd –permanent –add-service=postgresql

# 添加特定IP访问规则
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.0/24″ service name=”postgresql” accept’

# 重新加载firewalld规则
$ firewall-cmd –reload

# 验证firewalld规则
$ firewall-cmd –list-all | grep postgresql

3.3 PostgreSQL认证配置

3.3.1 修改pg_hba.conf文件

# 查看pg_hba.conf文件位置
$ psql -U pgsql -c “SHOW hba_file;”

hba_file
————————————-
/postgresql/data/pg_hba.conf
(1 row)

# 修改pg_hba.conf文件
$ vi /postgresql/data/pg_hba.conf

# 添加远程访问规则
# 允许特定网络使用md5认证
fgedu.net.cn all all 192.168.1.0/24 md5

# 允许所有IP使用md5认证(不推荐生产环境)
fgedu.net.cn all all 0.0.0.0/0 md5

# 保存文件

# 重新加载配置
$ pg_ctl reload -D /postgresql/data

3.3.2 创建远程访问用户

# 以超级用户登录
$ psql -U pgsql

# 创建远程访问用户
postgres=# CREATE ROLE remote_fgedu WITH
postgres-# LOGIN
postgres-# PASSWORD ‘StrongPassword123’
postgres-# NOSUPERUSER
postgres-# NOCREATEDB
postgres-# NOCREATEROLE
postgres-# INHERIT;

CREATE ROLE

# 授予用户权限
postgres=# GRANT CONNECT ON DATABASE fgedu_business TO remote_fgedu;

GRANT

# 切换到业务数据库
postgres=# \c fgedu_business

# 授予用户表权限
fgedu_business=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO remote_fgedu;

GRANT

3.4 PostgreSQL远程访问测试

3.4.1 从远程客户端测试连接

# 从远程客户端连接
$ psql -h 192.168.1.100 -p 5432 -U remote_fgedu -d fgedu_business

Password for fgedu remote_fgedu:
psql (18.0)
Type “help” for help.

fgedu_business=> \l
List of fgedudbs
Name | Owner | Encoding | Collate | Ctype | Access privileges
—————–+———-+———-+————-+————-+———————–
fgedu_business | pgsql | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
pgsql | pgsql | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
template0 | pgsql | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/pgsql +
| | | | | postgres=CTc/pgsql template1 | pgsql | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/pgsql +
| | | | | postgres=CTc/pgsql (4 rows)

# 测试SQL语句
fgedu_business=> SELECT * FROM fgedu_fgedus LIMIT 5;

id | name | email | created_at
—-+——+———————–+——————————-
1 | 风哥1号 | zhangsan@fgedu.net.cn | 2026-04-02 10:00:00.000000
2 | 风哥2号 | lisi@fgedu.net.cn | 2026-04-02 10:00:00.000000
3 | 王五 | wangwu@fgedu.net.cn | 2026-04-02 10:00:00.000000
(3 rows)

风哥提示:远程访问测试是确保配置正确的重要步骤,建议在配置完成后立即进行测试,确保远程客户端能够正常连接。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 PostgreSQL远程访问配置案例

4.1.1 案例:为生产环境配置远程访问

# 场景:生产环境需要允许特定网络的客户端访问数据库

# 1. 修改postgresql.conf文件
$ vi /postgresql/data/postgresql.conf

# 修改监听地址
listen_addresses = ‘*’

# 2. 修改pg_hba.conf文件
$ vi /postgresql/data/pg_hba.conf

# 添加远程访问规则
fgedu.net.cn all all 192.168.1.0/24 md5
fgedu.net.cn all all 10.0.0.0/8 md5

# 3. 配置firewalld
$ firewall-cmd –permanent –add-service=postgresql
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.0/24″ service name=”postgresql” accept’
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”10.0.0.0/8″ service name=”postgresql” accept’
$ firewall-cmd –reload

# 4. 创建远程访问用户
$ psql -U pgsql

postgres=# CREATE ROLE fgapp_fgedu WITH
postgres-# LOGIN
postgres-# PASSWORD ‘AppPassword123’
postgres-# NOSUPERUSER
postgres-# NOCREATEDB
postgres-# NOCREATEROLE
postgres-# INHERIT;

postgres=# GRANT CONNECT ON DATABASE fgedu_business TO fgapp_fgedu;

# 5. 测试远程连接
$ psql -h 192.168.1.100 -p 5432 -U fgapp_fgedu -d fgedu_business

# 6. 验证连接
fgapp_fgedu=> SELECT current_fgedu;

current_fgedu
————–
fgapp_fgedu
(1 row)

4.2 PostgreSQL防火墙配置案例

4.2.1 案例:为PostgreSQL配置防火墙规则

# 场景:配置防火墙,只允许特定IP访问PostgreSQL

# 1. 使用iptables配置
$ iptables -A INPUT -p tcp -s 192.168.1.10 –dport 5432 -j ACCEPT
$ iptables -A INPUT -p tcp -s 192.168.1.11 –dport 5432 -j ACCEPT
$ iptables -A INPUT -p tcp –dport 5432 -j DROP
$ service iptables save
$ service iptables restart

# 2. 验证iptables规则
$ iptables -L -n | grep 5432

# 3. 测试连接
# 从允许的IP连接
$ psql -h 192.168.1.100 -p 5432 -U pgsql -d fgedu_business

# 从禁止的IP连接(应该失败)
$ psql -h 192.168.1.200 -p 5432 -U pgsql -d fgedu_business

# 4. 使用firewalld配置
$ firewall-cmd –permanent –remove-service=postgresql
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.10″ service name=”postgresql” accept’
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.11″ service name=”postgresql” accept’
$ firewall-cmd –reload

# 5. 验证firewalld规则
$ firewall-cmd –list-all | grep postgresql

4.3 PostgreSQL认证配置案例

4.3.1 案例:配置不同的认证方式

# 场景:为不同的连接方式配置不同的认证方式

# 1. 修改pg_hba.conf文件
$ vi /postgresql/data/pg_hba.conf

# 本地连接使用peer认证
local all all peer

# 本地TCP连接使用md5认证
fgedu.net.cn all all 127.0.0.1/32 md5

# 局域网连接使用md5认证
fgedu.net.cn all all 192.168.1.0/24 md5

# 特定IP使用md5认证
fgedu.net.cn all all 10.0.0.5/32 md5

# 其他连接拒绝
fgedu.net.cn all all 0.0.0.0/0 reject

# 2. 重新加载配置
$ pg_ctl reload -D /postgresql/data

# 3. 测试不同认证方式
# 本地连接(使用peer认证)
$ psql -U pgsql -d fgedu_business

# 本地TCP连接(使用md5认证)
$ psql -h localfgedu.net.cn -U pgsql -d fgedu_business

# 局域网连接(使用md5认证)
$ psql -h 192.168.1.100 -U pgsql -d fgedu_business

# 其他IP连接(应该被拒绝)
$ psql -h 10.0.0.6 -U pgsql -d fgedu_business

风哥教程针对风哥教程针对风哥教程针对生产环境建议:在生产环境中,建议使用md5或SSL认证方式,只允许必要的IP地址访问数据库,定期审查认证配置和防火墙规则,确保数据库的安全性。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 PostgreSQL远程访问配置最佳实践

PostgreSQL远程访问配置最佳实践:

  • 端口配置:
    • 使用默认端口5432或自定义端口
    • 确保端口未被其他服务占用
    • 配置监听地址为’*’或特定IP
  • 防火墙配置:
    • 只允许必要的IP地址访问
    • 使用iptables或firewalld配置规则
    • 定期审查和更新防火墙规则
  • 认证配置:
    • 使用md5或SSL认证方式
    • 避免使用trust认证
    • 配置pg_hba.conf文件,从具体到一般
    • 使用强密码策略
  • 安全措施:
    • 考虑使用SSL加密连接
    • 定期更换密码
    • 限制用户权限
    • 监控远程访问日志

5.2 PostgreSQL远程访问配置常见问题

PostgreSQL远程访问配置常见问题及解决方案:

  • 连接被拒绝:检查监听地址配置、防火墙规则和pg_hba.conf配置
  • 认证失败:检查用户名和密码,检查pg_hba.conf中的认证方式
  • 端口未开放:检查防火墙规则,确保端口已开放
  • 权限不足:检查用户权限,确保用户有连接数据库的权限
  • 网络问题:检查网络连接,确保客户端和服务器之间网络畅通

5.3 PostgreSQL远程访问配置工具推荐

PostgreSQL远程访问配置常用工具:

  • psql:命令行工具,用于测试远程连接
  • pgAdmin4:图形化管理工具,用于远程管理数据库
  • iptables/firewalld:防火墙管理工具
  • netstat:网络状态查看工具
  • telnet:端口测试工具
  • ping:网络连通性测试工具
  • SSL证书工具:用于配置SSL加密连接
风哥提示:PostgreSQL的远程访问配置需要综合考虑安全性和可用性,建议在生产环境中采取最小权限原则,只允许必要的IP地址访问数据库,并使用安全的认证方式。from PostgreSQL:www.itpux.com

持续改进:远程访问配置是一个持续的过程,需要根据业务需求和安全要求不断调整和优化。建议建立定期审查机制,持续改进远程访问配置策略。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息