MySQL 參數詳解:max_connect_errors 防暴力破解配置指南
max_connect_errors 是 MySQL 安全計數器,用於阻止連續失敗的客戶端連接,防禦密碼暴力破解。與性能調優無直接關係。
參數格式與默認值
max_connect_errors = 10 -- 默認值(若 my.cnf 無配置則為 10)
修改方法
- 編輯
/etc/my.cnf(CentOS/Debian 典型路徑)
- 在
[mysqld] 區段添加/修改:max_connect_errors = 6000
- 重啟 MySQL 生效:
systemctl restart mysqld
工作機制
- 某客戶端連續失敗達到設定次數(如密碼錯誤 6000 次),MySQL 永久封禁該 Host 後續連接。
- 封禁後報錯:
ERROR 1129 (HY000): Host 'xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
- 解封方式: (1) 重啟 MySQL (2) 執行
FLUSH HOSTS; (3) mysqladmin flush-hosts
- 該客戶端一次成功連接即重置計數器歸零。
配置建議
| 場景 | 建議值 | 理由 |
| 內網可信環境、應用自帶重試 | 1000-5000 | 避免誤封正常應用(網絡抖動、部署重啟) |
| 公網暴露、高風險 | 100-500 | 快速封禁攻擊源 |
| 僅本地 Socket 連接 | 可極大或關閉網絡監聽 | 根絕網絡攻擊面 |
最佳實踐:層層設防
- 網絡層: 安全組/防火牆僅放行應用服務器 IP 訪問 3306。
- MySQL 層:
bind-address=127.0.0.1 或內網 IP,skip-networking 禁用 TCP。
- 賬號層: 最小權限、強密碼、禁用 root 遠程、定期輪換。
- 參數層: 設定
max_connect_errors、wait_timeout、max_user_connections。
- 審計層: 開啟審計日誌、慢查詢日誌、異常登入告警。
16GB 內存機器參考配置
max_connect_errors = 6000
# 設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的連接請求,直到mysql服務器重啟或通過flush hosts命令清空此host的相關信息。
提醒: 過小值導致正常業務誤封,過大值失去防護意義。結合業務重試策略、監控告警動態平衡。
- 上一篇文章: 《MySQL必知必會》第四章:SELECT 查詢基礎與數據檢索技巧
- 下一篇文章: 《MySQL必知必會》第五章:ORDER BY 排序檢索完全指南
Copyright ©
程式碼之家 All Rights Reserved