使用Fail2ban保护SSH、MySQL 和 Laravel登录防止暴力破解

发布于:2025-05-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

针对 SSHMySQLLaravel 登录保护的 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

注意事项

  1. 日志路径:确保 logpath 与实际日志路径一致(如 MySQL 和 Laravel 的日志位置可能不同)。
  2. 白名单:通过 ignoreip 避免封禁可信IP(如管理后台或内部网络)。
  3. 测试规则:使用 fail2ban-regex 测试正则表达式是否匹配日志中的失败记录。
  4. 封禁IP列表:可通过 sudo fail2ban-client get sshd banned 查看当前被封禁的IP。

通过以上配置,Fail2ban 可有效防御针对 SSH、MySQL 和 Laravel 的暴力破解攻击。建议定期检查日志和封禁记录以优化规则。


网站公告

今日签到

点亮在社区的每一天
去签到