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.pswp.cn/pingmian/83481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web前端为什么要打包?Webpack 和 Vite 如何助力现代开发?

一. 为什么要使用框架库? 1.1 传统网页与现代前端的差异 在最早期的网页开发中,我们只需要写几个.html文件,配上.css和.js文件,浏览器直接加载就能展现页面,每个文件都是独立的静态资源,简单且直观 但现在网站越来越复杂了: 需要用到最新的js语法(比如ES6)使用框架(Vue…

使用pdm+uv替换poetry

用了好几年poetry了,各方面都还挺满意,就是lock实在太慢; 已经试用pdmuv一段时间了,确实是快,也基本能覆盖poetry的功能。 至于为什么用pdmuv,而不是只用uv,原因很多,有兴趣的可以…

java后端生成心电图-jfreechart

用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…

微软Build 2025:Copilot Studio升级,解锁多智能体协作未来

微软Build 2025大会圆满落幕,作为年度科技盛会,它一直是开发与AI技术突破性创新的重要展示平台。对于工程师、创作者和领域专家来说,这是了解微软生态未来动向的关键时刻。今年,Microsoft Copilot Studio推出了一系列新功能&#…

LabVIEW杂草识别与精准喷洒

基于LabVIEW构建了一套集成机器视觉、智能决策与精准控制的农业杂草识别系统。通过高分辨率视觉传感器采集作物图像,利用 LabVIEW 的 NI Vision 模块实现图像颜色匹配与特征分析,结合 Arduino 兼容的工业级控制硬件,实现杂草定位与除草剂精准…

使用 Akamai 分布式云与 CDN 保障视频供稿传输安全

作者简介:David Eisenbacher 是 EZDRM 公司的首席执行官兼联合创始人,该公司是首家提供 "DRM 即服务" 的企业。作为 CEO,David 始终秉持为企业确立的使命:为视频服务商提供简洁有效的数字版权管理方案,助力其…

javascript 实战案例 二级联动下拉选框

本案例完全使用原生javascript实现,使用时只需填充platform_list二维数组即可,platform_list填充规则如下: [‘一级选项1’,‘二级选项11’,‘二级选项12’,‘二级选项13’,‘二级选项14’,…], [‘一级选项2’,‘二级选项21’,‘二级选项22’…

Elasticsearch集群最大分片数设置详解:从问题到解决方案

目录 前言 1 问题背景:重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)? 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少? 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…

Redis Sorted Set 深度解析:从原理到实战应用

Redis Sorted Set 深度解析:从原理到实战应用 在 Redis 丰富的数据结构家族中,Sorted Set(有序集合)凭借独特的设计和强大的功能,成为处理有序数据场景的得力工具。无论是构建实时排行榜,还是实现基于时间的…

Java并发编程:读写锁与普通互斥锁的深度对比

在Java并发编程中,锁是实现线程安全的重要工具。其中,普通互斥锁(如synchronized和ReentrantLock)和读写锁(ReentrantReadWriteLock)是两种常用的同步机制。本文将从多个维度深入分析它们的区别、适用场景及…

《云原生安全攻防》-- K8s网络策略:通过NetworkPolicy实现微隔离

默认情况下,K8s集群的网络是没有任何限制的,所有的Pod之间都可以相互访问。这就意味着,一旦攻击者入侵了某个Pod,就能够访问到集群中任意Pod,存在比较大的安全风险。 在本节课程中,我们将详细介绍如何通过N…

Log4j2、Fastjson特征流量分析

文章目录 一、Log4j2流量特征分析1. 漏洞原理简述2. 核心流量特征(1)请求特征(2)响应特征(3)日志特征 3.检测与防御建议 二、fastjson流量特征分析1.漏洞原理简述2.核心流量特征(1)请…

Java编程之建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。这种模式允许你分步骤构建一个复杂对象,并且可以在构建过程中进行不同的配置。 模式的核…

Spring AI之RAG入门

目录 1. 什么是RAG 2. RAG典型应用场景 3. RAG核心流程 3.1. 检索阶段 3.2. 生成阶段 4. 使用Spring AI实现RAG 4.1. 创建项目 4.2. 配置application.yml 4.3. 安装ElasticSearch和Kibana 4.3.1. 安装并启动ElasticSearch 4.3.2. 验证ElasticSearch是否启动成功 …

mysql数据库实现分库分表,读写分离中间件sharding-sphere

一 概述 1.1 sharding-sphere 作用: 定位关系型数据库的中间件,合理在分布式环境下使用关系型数据库操作,目前有三个产品 1.sharding-jdbc,sharding-proxy 1.2 sharding-proxy实现读写分离的api版本 4.x版本 5.x版本 1.3 说明…

运维视角下的广告系统之理解广告索引级联

广告索引中为什么要级联 这里的“级联”一般指的是多层索引结构,也叫级联索引(Cascade Index 或 Multi-level Index)。 在广告系统的索引中,级联设计有重要作用,主要原因如下: 1. 多维特征筛选的需求 广…

2025年5月24日系统架构设计师考试题目回顾

当前仅仅是个人用于记录&#xff0c;还未做详细分析&#xff0c;待更新… 综合知识 设 x,y 满足约束条件&#xff1a;x-1>0, x-y<0, x-y-x<0, 则 y/x 的最大值是()。 A. 3 B. 2 C. 4 D. 1 申请软件著作权登记时应当向中国版本保护中心提交软件的鉴别材料&#xff…

3D-激光SLAM笔记

目录 定位方案 编译tbb ros2humble安装 命令 colcon commond not found 栅格地图生成&#xff1a; evo画轨迹曲线 安装gtsam4.0.2 安装ceres-solver1.14.0 定位方案 1 方案一&#xff1a;改动最多 fasterlio 建图&#xff0c;加闭环优化&#xff0c;参考fast-lio增加关…

贪心算法应用:分数背包问题详解

贪心算法与分数背包问题 贪心算法&#xff08;Greedy Algorithm&#xff09;是算法设计中一种重要的思想&#xff0c;它在许多经典问题中展现出独特的优势。本文将用2万字篇幅&#xff0c;深入剖析贪心算法在分数背包问题中的应用&#xff0c;从基础原理到Java实现细节&#x…

PyTorch——非线性激活(5)

非线性激活函数的作用是让神经网络能够理解更复杂的模式和规律。如果没有非线性激活函数&#xff0c;神经网络就只能进行简单的加法和乘法运算&#xff0c;没法处理复杂的问题。 非线性变化的目的就是给我们的网络当中引入一些非线性特征 Relu 激活函数 Relu处理图像 # 导入必…