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 安全防護體系中的一個簡單但有效的組件,特別適合作為防御暴力破解的基礎措施。對于高安全要求的場景,建議將其與其他安全機制結合使用。