PostgreSQL教程FG076-PG远程访问配置:端口/防火墙/认证综合设置
本文档风哥主要介绍PostgreSQL的远程访问配置,包括端口设置、防火墙配置和认证配置,以及生产环境中的实战案例和最佳实践。风哥教程参考PostgreSQL官方文档Server Administration内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PostgreSQL远程访问的概念
PostgreSQL远程访问是指从远程客户端连接到PostgreSQL数据库服务器的能力。默认情况下,PostgreSQL只允许本地连接,需要进行配置才能允许远程连接。更多视频教程www.fgedu.net.cn
- 默认只允许本地连接
- 需要配置监听地址和端口
- 需要配置防火墙规则
- 需要配置认证方式
- 远程访问可能带来安全风险
1.2 PostgreSQL端口配置的概念
PostgreSQL端口配置是指设置数据库服务器监听的网络端口,默认端口为5432。端口配置决定了客户端如何连接到数据库服务器。
– 默认端口:5432
– 可配置范围:1-65535
– 建议使用:1024以上的端口
– 注意事项:避免使用已被其他服务占用的端口
1.3 PostgreSQL防火墙配置的概念
PostgreSQL防火墙配置是指设置防火墙规则,允许或拒绝特定IP地址或网络访问PostgreSQL数据库服务器的端口。学习交流加群风哥微信: itpux-com
from oracle:www.itpux.com
- 控制哪些IP地址可以访问数据库服务器
- 增强数据库服务器的安全性
- 防止未授权的访问
- 减少安全漏洞的风险
1.4 PostgreSQL认证配置的概念
PostgreSQL认证配置是指设置客户端连接到数据库服务器时的认证方式,包括密码认证、MD5认证、SSL认证等。认证配置决定了客户端如何证明自己的身份。
– 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 修改端口配置
$ 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 -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配置防火墙
$ 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文件
$ 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)
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配置防火墙规则
# 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
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加密连接
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
