4. 数据库连接来源IP白名单配置
业务访问关系与白名单设计
数据库监听层的来源IP白名单,本质是把“哪些主机可以发起连接”这一业务访问关系,翻译成监听器可执行的过滤规则。配置前先梳理访问矩阵,再落到具体参数,避免误封应用服务器或漏放运维跳板机。
| 来源主机 | 角色 | 访问数据库 | 端口 | 是否放行 |
|---|---|---|---|---|
| 10.20.1.11 | 订单应用服务器 | orderdb | 5432 | 是 |
| 10.20.1.12 | 订单应用服务器 | orderdb | 5432 | 是 |
| 10.20.2.30 | 运维跳板机 | 全部实例 | 5432 | 是 |
| 10.20.3.0/24 | 办公网段 | — | 5432 | 否 |
| 0.0.0.0/0 | 任意地址 | — | 5432 | 否 |
PostgreSQL 监听层白名单配置
PostgreSQL 通过 pg_hba.conf 控制连接来源,配合 listen_addresses 限定监听网卡。以下配置仅允许应用服务器与跳板机连接,其余地址在认证前即被拒绝。
# postgresql.conf
listen_addresses = '10.20.0.5' # 仅监听内网业务网卡
# pg_hba.conf(顺序自上而下匹配,命中即停止)
# TYPE DATABASE USER ADDRESS METHOD
host orderdb app_rw 10.20.1.11/32 scram-sha-256
host orderdb app_rw 10.20.1.12/32 scram-sha-256
host all dba_ops 10.20.2.30/32 scram-sha-256
host all all 0.0.0.0/0 reject
host all all ::/0 reject
规则按顺序匹配,
reject 必须放在放行规则之后,否则会拦截合法来源。修改后执行 SELECT pg_reload_conf(); 使配置生效,无需重启实例。白名单生效路径与验证
验证与结果判读
从白名单主机执行连接测试,应能正常进入认证流程并返回查询结果;从办公网段或任意非白名单地址发起连接,监听层在认证前即返回 FATAL: no pg_hba.conf entry for host ...,连接无法建立。
-- 白名单主机(10.20.1.11)执行
psql -h 10.20.0.5 -U app_rw -d orderdb -c "SELECT current_user, inet_server_addr();"
-- 预期:返回 app_rw 与 10.20.0.5
-- 非白名单主机(10.20.3.50)执行
psql -h 10.20.0.5 -U app_rw -d orderdb
-- 预期:FATAL: no pg_hba.conf entry for host "10.20.3.50", user "app_rw", database "orderdb"
若白名单主机连接失败,先检查
listen_addresses 是否包含目标网卡地址,再确认 pg_hba.conf 中规则顺序与网段掩码是否正确。修改后务必执行 pg_reload_conf() 并查看日志确认加载成功。配置检查清单
- 访问矩阵已覆盖全部业务来源,无遗漏应用服务器。
listen_addresses仅绑定内网业务网卡,不监听*或公网地址。pg_hba.conf放行规则在前,reject兜底规则在后。- 每条放行规则使用最小网段(优先 /32),避免使用过宽网段。
- 白名单与非白名单主机均已实测,结果符合预期。
- 配置变更已记录,并保留回滚用的旧版
pg_hba.conf。