PostgreSQL的扩展 auth_delay
PostgreSQL的扩展 auth_delay
auth_delay
是 PostgreSQL 提供的一个安全相关扩展,主要用于防止暴力破解攻击。它通过在认证失败后引入人为延迟来增加暴力破解的难度。
一、扩展基础
- 功能:在认证失败后增加延迟
- 目的:减缓暴力破解和字典攻击
- 适用场景:
- 面向互联网开放的 PostgreSQL 服务
- 有高安全要求的数据库环境
- 多次认证失败后的防护
二、安装与配置
1. 安装方法
-- 安装扩展
CREATE EXTENSION auth_delay;-- 验证安装
SELECT * FROM pg_available_extensions WHERE name = 'auth_delay';
2. 配置参数
在 postgresql.conf
中设置:
# 认证失败后的延迟时间(毫秒)
auth_delay.milliseconds = 1000 # 默认1000ms(1秒)# 失败多少次后开始延迟(避免误伤合法用户)
auth_delay.failure_count = 3 # 默认3次
三、工作原理
-
触发条件:
- 客户端认证失败
- 连续失败次数达到配置阈值
-
行为表现:
-
特点:
- 仅对失败认证延迟
- 成功认证会重置失败计数器
- 延迟在服务端进行,客户端无法绕过
四、使用示例
1. 基本配置
-- 修改配置后重载
ALTER SYSTEM SET auth_delay.milliseconds = 2000;
ALTER SYSTEM SET auth_delay.failure_count = 5;
SELECT pg_reload_conf();
2. 监控失败尝试
-- 查看当前失败计数(需要超级用户权限)
SELECT * FROM pg_stat_activity
WHERE backend_type = 'client backend'
AND state = 'failed';
五、性能与安全考量
优点
- 显著增加暴力破解的时间成本
- 配置简单,无需修改应用代码
- 对合法用户影响有限(仅在多次失败后触发)
注意事项
-
连接池影响:
- 可能导致连接池耗尽
- 建议配合连接超时设置:
# postgresql.conf authentication_timeout = 60s # 认证超时时间
-
分布式攻击:
- 对分布式暴力破解效果有限
- 应结合其他安全措施:
# pg_hba.conf host all all 192.168.1.0/24 scram-sha-256
-
合法用户影响:
- 可能影响忘记密码的合法用户
- 建议设置合理的
failure_count
六、高级配置
1. 与 pg_hba 配合
# pg_hba.conf
# 对互联网访问强制使用auth_delay
host all all 0.0.0.0/0 scram-sha-256 auth_delay
2. 动态调整参数
-- 在攻击期间临时增加延迟
ALTER SYSTEM SET auth_delay.milliseconds = 5000;
SELECT pg_reload_conf();-- 攻击结束后恢复
ALTER SYSTEM SET auth_delay.milliseconds = 1000;
SELECT pg_reload_conf();
七、生产环境建议
-
推荐配置:
auth_delay.milliseconds = 3000 # 3秒延迟 auth_delay.failure_count = 5 # 5次失败后触发
-
监控设置:
# 监控认证失败日志 tail -f $PGDATA/log/postgresql-*.log | grep "authentication failed"
-
组合安全措施:
- 配合 fail2ban 自动封禁恶意IP
- 使用证书认证提高安全性
- 定期轮换数据库密码
八、限制与替代方案
当前限制
- 无法区分不同IP的失败尝试
- 不提供自动封禁功能
- 对分布式攻击防护有限
替代/补充方案
-
fail2ban:
# fail2ban 配置示例 [postgresql] enabled = true filter = postgresql action = iptables[name=PostgreSQL, port=5432, protocol=tcp] logpath = /var/log/postgresql/postgresql-*.log maxretry = 3
-
pg_ident:
# pg_ident.conf # 限制特定操作系统用户映射
-
网络层防护:
- 使用防火墙限制访问IP
- 通过SSL证书认证
auth_delay
是 PostgreSQL 安全防护体系中的一个简单但有效的组件,特别适合作为防御暴力破解的基础措施。对于高安全要求的场景,建议将其与其他安全机制结合使用。