I. 安装 Fail2Ban#
参考 👉 How to install fail2ban packages
1.1 基于 RHEL 的 OS#
- 确保系统为最新版本:
- 安装并启用 EPEL 源:
1
| dnf install epel-release -y && dnf config-manager --set-enabled epel && dnf clean all && dnf makecache
|
- 安装 Fail2Ban:
- 启动并启用 Fail2ban:
1
| systemctl enable fail2ban --now
|
📢 注意:
如果遇到 no directory /var/run/fail2ban to contain the socket file /var/run/fail2ban/fail2ban.sock 的错误,请手动创建该目录:
1
| mkdir /var/run/fail2ban
|
1.2 基于 Debian 的 OS#
- 确保您的系统是最新的:
1
| apt update && apt upgrade
|
- 安装 Fail2Ban:
服务自动启动。
II. 配置规则#
2.1 配置 SSH 防护规则#
fail2ban 的配置文件通常位于 /etc/fail2ban/jail.conf,不过我们推荐修改 jail.local 文件来保留自定义配置(避免在软件更新时覆盖原文件)。
创建默认配置文件的副本:
1
| cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
|
2.2 配置 SSH 防护#
编辑 jail.local 文件添加或修改 [DEFAULT] 和 [SSH] 部分配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [DEFAULT]
......
#ignoreip = 127.0.0.1/8 your_home_IP
......
[sshd]
enabled = true
#port = ssh
filter = sshd
#logpath = /var/log/secure
maxretry = 3
bantime = 1800 # 30 minutes in seconds
findtime = 1800 # 30 minutes in seconds
......
|
📌 参数说明:
ignoreip = 127.0.0.1/8:添加 IP 白名单避免自己被封锁(生产环境很重要)。enabled = true:启用 SSH 防护。port = ssh:指定 SSH 使用的端口(通常是 22,如果你使用自定义端口,可以修改这里)。filter = sshd:指定用于匹配 SSH 登录失败的日志过滤器。logpath = /var/log/secure:指定 SSH 登录日志文件的路径。maxretry = 3:设定最大登录失败次数为 3 次。bantime = 1800:设置 IP 地址被禁止的时间为 1800 秒(即 30 分钟)。findtime = 1800:设置检查的时间窗口为 30 分钟,意味着在这个时间段内超过 3 次失败的登录会触发封禁。
2.3 与 firewalld 协同工作#
1
| cp /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
|
2.4 重启 fail2ban 服务#
保存并退出文件后,重新启动 fail2ban 服务以使配置生效:
1
| systemctl restart fail2ban
|
2.5 验证配置是否生效#
可以通过以下命令查看 fail2ban 的状态:
1
| fail2ban-client status sshd
|
这将显示关于 SSH 防护的当前状态,以及是否有 IP 地址被封禁。
III. 解除限制#
3.1 解除 IP 封锁#
1
| fail2ban-client unban 192.168.x.x
|
IV. 参考文档#
GitHub : Fail2Ban