当前位置: 首页 > news >正文

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. 触发条件

    • 客户端认证失败
    • 连续失败次数达到配置阈值
  2. 行为表现

    Client PostgreSQL auth_delay 认证请求(错误密码) 记录失败计数 延迟 milliseconds 毫秒 alt [失败次数 ≥ failure_count] 返回认证失败 Client PostgreSQL auth_delay
  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';

五、性能与安全考量

优点

  • 显著增加暴力破解的时间成本
  • 配置简单,无需修改应用代码
  • 对合法用户影响有限(仅在多次失败后触发)

注意事项

  1. 连接池影响

    • 可能导致连接池耗尽
    • 建议配合连接超时设置:
      # postgresql.conf
      authentication_timeout = 60s  # 认证超时时间
      
  2. 分布式攻击

    • 对分布式暴力破解效果有限
    • 应结合其他安全措施:
      # pg_hba.conf
      host all all 192.168.1.0/24 scram-sha-256
      
  3. 合法用户影响

    • 可能影响忘记密码的合法用户
    • 建议设置合理的 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();

七、生产环境建议

  1. 推荐配置

    auth_delay.milliseconds = 3000  # 3秒延迟
    auth_delay.failure_count = 5    # 5次失败后触发
    
  2. 监控设置

    # 监控认证失败日志
    tail -f $PGDATA/log/postgresql-*.log | grep "authentication failed"
    
  3. 组合安全措施

    • 配合 fail2ban 自动封禁恶意IP
    • 使用证书认证提高安全性
    • 定期轮换数据库密码

八、限制与替代方案

当前限制

  1. 无法区分不同IP的失败尝试
  2. 不提供自动封禁功能
  3. 对分布式攻击防护有限

替代/补充方案

  1. fail2ban

    # fail2ban 配置示例
    [postgresql]
    enabled  = true
    filter   = postgresql
    action   = iptables[name=PostgreSQL, port=5432, protocol=tcp]
    logpath  = /var/log/postgresql/postgresql-*.log
    maxretry = 3
    
  2. pg_ident

    # pg_ident.conf
    # 限制特定操作系统用户映射
    
  3. 网络层防护

    • 使用防火墙限制访问IP
    • 通过SSL证书认证

auth_delay 是 PostgreSQL 安全防护体系中的一个简单但有效的组件,特别适合作为防御暴力破解的基础措施。对于高安全要求的场景,建议将其与其他安全机制结合使用。

http://www.xdnf.cn/news/777709.html

相关文章:

  • 【Node.js 深度解析】npm install 遭遇:npm ERR! code CERT_HAS_EXPIRED 错误的终极解决方案
  • SQLite详细解读
  • Matlab数值计算
  • [Linux] MySQL源码编译安装
  • 软考 系统架构设计师系列知识点之杂项集萃(78)
  • Microsoft前后端不分离编程新风向:cshtml
  • OpenCV CUDA模块图像处理------图像融合函数blendLinear()
  • 高效图像处理:使用 Pillow 进行格式转换与优化
  • 【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节
  • OpenCV CUDA模块图像处理------双边滤波的GPU版本函数bilateralFilter()
  • 【Unity开发】控制手机移动端的震动
  • 【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法
  • 【PmHub面试篇】Gateway全局过滤器统计接口调用耗时面试要点解析
  • 网络安全厂商F5推出AI Gateway,化解大模型应用风险
  • Axure-元件流程图
  • 鸿蒙开发:应用内如何做更新
  • 湖南省水利水电安全员b证在哪报名
  • 破局与进阶:ueBIM 在国产 BIM 赛道的差距认知与创新实践
  • Git 使用规范指南
  • Elasticsearch + Milvus 构建高效知识库问答系统《一》
  • 为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
  • Java编程之建造者模式
  • [Java 基础]Java 语言的规范
  • 【如何在IntelliJ IDEA中新建Spring Boot项目(基于JDK 21 + Maven)】
  • [Java 基础]选英雄(配置 IDEA)
  • 深入理解汇编语言中的顺序与分支结构
  • Python+requests+pytest+allure自动化测试框架
  • 鸿蒙UI开发——组件的自适应拉伸
  • 深入解析 Flask 命令行工具与 flask run命令的使用
  • Spark 单机模式部署与启动