针对 SSH、MySQL 和 Laravel 登录保护的 Fail2ban 详细配置指南,涵盖安装、规则配置和优化建议:
1. 安装 Fail2ban
# Debian/Ubuntu
sudo apt update && sudo apt install fail2ban
# CentOS/RHEL
sudo yum install epel-release && sudo yum install fail2ban
# 启动并设置开机自启
sudo systemctl enable --now fail2ban
2. 保护 SSH(默认已配置,可优化)
配置文件
编辑 /etc/fail2ban/jail.local
(若不存在则新建):
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log # Debian/Ubuntu
# logpath = /var/log/secure # CentOS/RHEL
maxretry = 3 # 允许的失败次数
findtime = 10m # 检测窗口(10分钟内)
bantime = 24h # 封禁时长(24小时)
ignoreip = 127.0.0.1/8 192.168.1.0/24 # 白名单IP段(按需修改)
3. 保护 MySQL
步骤 1:创建过滤器规则
新建 /etc/fail2ban/filter.d/mysql-auth.conf
:
[Definition]
failregex = ^.* Access denied for user .* from <HOST>.*$
ignoreregex =
步骤 2:配置监狱规则
在 /etc/fail2ban/jail.local
中添加:
[mysql]
enabled = true
port = 3306
filter = mysql-auth
logpath = /var/log/mysql/error.log # 根据实际路径调整
maxretry = 3 # 3次失败后封禁
findtime = 10m
bantime = 1d
4. 保护 Laravel 登录
步骤 1:确保 Laravel 记录登录失败日志
在 Laravel 的 .env
中启用日志:
LOG_CHANNEL=daily
步骤 2:创建过滤器规则
新建 /etc/fail2ban/filter.d/laravel-auth.conf
:
[Definition]
failregex = ^.*\[.*\] .* Login attempt failed from <HOST>.*$
ignoreregex =
步骤 3:配置监狱规则
在 /etc/fail2ban/jail.local
中添加:
[laravel]
enabled = true
port = http,https
filter = laravel-auth
logpath = /var/www/html/storage/logs/laravel.log # Laravel日志路径
maxretry = 5 # 5次失败后封禁
findtime = 1h
bantime = 12h
5. 通用优化配置
全局设置(在 [DEFAULT]
部分)
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
ignoreip = 127.0.0.1/8 192.168.1.0/24
邮件通知(可选)
action = %(action_mwl)s
destemail = admin@example.com
sender = fail2ban@example.com
6. 验证与调试
# 重启 Fail2ban
sudo systemctl restart fail2ban
# 查看运行状态
sudo fail2ban-client status
sudo fail2ban-client status sshd # 检查SSH监狱
sudo fail2ban-client status mysql # 检查MySQL监狱
sudo fail2ban-client status laravel # 检查Laravel监狱
# 测试正则匹配(调试用)
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
注意事项
- 日志路径:确保
logpath
与实际日志路径一致(如 MySQL 和 Laravel 的日志位置可能不同)。 - 白名单:通过
ignoreip
避免封禁可信IP(如管理后台或内部网络)。 - 测试规则:使用
fail2ban-regex
测试正则表达式是否匹配日志中的失败记录。 - 封禁IP列表:可通过
sudo fail2ban-client get sshd banned
查看当前被封禁的IP。
通过以上配置,Fail2ban 可有效防御针对 SSH、MySQL 和 Laravel 的暴力破解攻击。建议定期检查日志和封禁记录以优化规则。