I. 安装 Fail2Ban

参考 👉 How to install fail2ban packages

1.1 基于 RHEL 的 OS

  1. 确保系统为最新版本:
1dnf update -y
  1. 安装并启用 EPEL 源:
1dnf install epel-release -y && dnf config-manager --set-enabled epel && dnf clean all && dnf makecache
  1. 安装 Fail2Ban:
1dnf install fail2ban
  1. 启动并启用 Fail2ban:
1systemctl enable fail2ban --now

📢 注意:
如果遇到 no directory /var/run/fail2ban to contain the socket file /var/run/fail2ban/fail2ban.sock 的错误,请手动创建该目录:

1mkdir /var/run/fail2ban

1.2 基于 Debian 的 OS

  1. 确保您的系统是最新的:
1apt update && apt upgrade
  1. 安装 Fail2Ban:
1apt install fail2ban

服务自动启动。

II. 配置规则

2.1 配置 SSH 防护规则

fail2ban 的配置文件通常位于 /etc/fail2ban/jail.conf,不过我们推荐修改 jail.local 文件来保留自定义配置(避免在软件更新时覆盖原文件)。

创建默认配置文件的副本:

1cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

2.2 配置 SSH 防护

编辑 jail.local 文件添加或修改 [DEFAULT] 和 [SSH] 部分配置:

 1[DEFAULT]
 2......
 3#ignoreip = 127.0.0.1/8 your_home_IP
 4......
 5
 6[sshd]
 7enabled = true
 8#port = ssh
 9filter = sshd
10#logpath = /var/log/secure
11maxretry = 3
12bantime = 1800  # 30 minutes in seconds
13findtime = 1800  # 30 minutes in seconds
14......

📌 参数说明:

  • 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 协同工作

1cp /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local

2.4 重启 fail2ban 服务

保存并退出文件后,重新启动 fail2ban 服务以使配置生效:

1systemctl restart fail2ban

2.5 验证配置是否生效

可以通过以下命令查看 fail2ban 的状态:

1fail2ban-client status sshd

这将显示关于 SSH 防护的当前状态,以及是否有 IP 地址被封禁。

III. 解除限制

3.1 解除 IP 封锁

1fail2ban-client unban 192.168.x.x

IV. 参考文档

GitHub : Fail2Ban