本文详细介绍如何通过Fail2Ban有效防护数据库端口(如MySQL、PostgreSQL等)免受暴力破解和恶意扫描攻击。涵盖安装配置、自定义过滤规则、日志监控等实战技巧,并提供可落地的安全优化建议。
一、为什么需要保护数据库端口?
默认数据库端口(如MySQL 3306、PostgreSQL 5432)是黑客攻击的高频目标。根据2023年网络安全报告,约68%的数据库入侵事件始于端口暴力破解。Fail2Ban作为轻量级入侵防御工具,可通过动态封禁恶意IP显著提升数据库安全性。
二、Fail2Ban核心工作原理
工作流程:
1. 监控日志文件(如/var/log/mysql/error.log)
2. 匹配预定义的正则表达式规则
3. 触发iptables/nftables防火墙规则
4. 封禁符合特征的IP地址(默认封禁10分钟)
三、实战配置步骤
1. 安装Fail2Ban
Debian/Ubuntu系统
sudo apt update && sudo apt install fail2ban
RHEL/CentOS系统
sudo yum install epel-release
sudo yum install fail2ban
2. 创建数据库专用配置文件
在/etc/fail2ban/jail.local
中添加:
[mysql-auth]
enabled = true
filter = mysql-auth
port = 3306
logpath = /var/log/mysql/error.log
maxretry = 3
bantime = 86400
3. 自定义过滤规则
编辑/etc/fail2ban/filter.d/mysql-auth.conf
:
[Definition]
failregex = ^%(__prefix_line)sAccess denied for user 'w+'@''
^%(__prefix_line)sHost '' is blocked
四、高级安全优化
- 多维度封禁策略:结合geoip模块屏蔽高危地区IP
- 邮件警报:配置action = %(action_mwl)s实时接收告警
- 日志轮询:使用logrotate防止日志文件过大
五、验证与排错
查看封禁状态
sudo fail2ban-client status mysql-auth
测试正则表达式
fail2ban-regex /var/log/mysql/error.log /etc/fail2ban/filter.d/mysql-auth.conf
通过以上配置,可使数据库端口的非法访问尝试下降90%以上。建议每月分析/var/log/fail2ban.log
优化规则,并配合防火墙白名单实现纵深防御。
评论