CentOS 上 PostgreSQL 的安全加固清单
一 系统与安装安全基线
- 保持系统与数据库最新:执行 sudo yum update -y,及时修补漏洞。
- 安装组件:使用系统仓库安装 postgresql-server 与 postgresql-contrib。
- 初始化与自启:运行 sudo postgresql-setup initdb,随后 sudo systemctl start postgresql && sudo systemctl enable postgresql。
- 原则:默认仅本地访问,按需开放;坚持最小权限与最小暴露面。
二 网络与防火墙
- 监听地址:在 postgresql.conf 中优先设置 listen_addresses = ‘localhost’;确需远程时再改为指定内网地址或谨慎使用 ‘*’。
- 端口策略:保持默认 5432/TCP,或改为非标准端口以降低噪音暴露;在 postgresql.conf 设置 port = 5432(或自定义端口)。
- firewalld 规则:仅放通必要来源,例如
- 放通某网段:sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“5432” protocol=“tcp” accept’
- 或放通单 IP:sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“203.0.113.10” port port=“5432” protocol=“tcp” accept’
- 使配置生效:sudo firewall-cmd --reload
- 验证:sudo firewall-cmd --list-all
- SELinux:如启用,确保与数据库端口策略一致;不建议为便利直接改为 permissive,必要时使用 semanage port 等工具做精细化放行。
三 认证与访问控制
- 本地认证:在 pg_hba.conf 优先使用 peer 或 ident 用于本机管理连接,避免口令在网络中明文传输。
- 远程认证:对远程仅开放必要来源与账户,采用强口令或证书,并使用 md5/scram-sha-256 等安全方法;示例
- 仅内网:host all all 192.168.1.0/24 md5
- 禁止公网 0.0.0.0/0 的全放开规则
- 动态生效:修改 postgresql.conf 或 pg_hba.conf 后执行 sudo systemctl restart postgresql;变更前先在测试环境验证。
四 加密与传输安全
- 启用 TLS:在 postgresql.conf 设置 ssl = on,并配置
- ssl_cert_file = ‘/path/to/server.crt’
- ssl_key_file = ‘/path/to/server.key’
- 可选增强:ssl_ciphers = ‘HIGH:MEDIUM:+3DES:!aNULL’、ssl_prefer_server_ciphers = on
- 证书管理:生产环境使用受信任 CA 签发的证书;自签名证书仅用于测试或内部受控网络。
- 客户端强制:在 pg_hba.conf 对远程主机使用 hostssl 条目,确保仅 TLS 连接被允许。
五 审计、备份与持续运维
- 日志与审计:开启日志收集与关键语句审计
- 基础:logging_collector = on、log_directory = ‘pg_log’、log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log’
- 审计:log_statement = ‘all’(或至少 ddl、error),并定期审阅日志
- 系统级审计:启用 auditd,使用 ausearch/aureport 分析 /var/log/audit/audit.log
- 备份与恢复:定期做逻辑或物理备份并验证可恢复性
- 逻辑:pg_dump -U user -W -F t -f backup.tar dbname
- 物理:pg_basebackup -D /var/lib/pgsql/backup -U backupuser -v -P --wal-method=stream
- 补丁与核查:定期 yum update 与配置复查;验证仅必要端口对外开放、仅可信来源可连、TLS 生效、权限最小化。