教程:如何使用 fail2ban 保护你的 Linux 服务器
如果你在服务器的 lastb 日志中看到了成千上万条失败的登录记录,那么你正在遭受 SSH 暴力破解攻击。fail2ban 是一个自动化的“安保系统”,它会监控这些日志,并自动封禁那些恶意尝试的 IP 地址。
本教程将指导你如何安装、配置 fail2ban,并设置一个严格且安全的策略。
什么是 fail2ban?
你可以把 fail2ban 想象成一个“数字保镖”。
- 它会实时读取你服务器的日志(如
/var/log/auth.log)。 - 当你设置的“规则”(Jail)被触发时(例如:10 分钟内,同一个 IP 登录 SSH 失败 3 次)。
- 它会立即调用防火墙(
iptables)自动添加一条规则,将该 IP 封禁一段时间(例如 1 天)。
步骤 1:安装 fail2ban
首先,更新你的包列表并安装 fail2ban:
sudo apt updatesudo apt install fail2ban -y安装完成后,fail2ban 会自动启动并运行。我们还要设置它开机自启:
sudo systemctl start fail2bansudo systemctl enable fail2ban此时,fail2ban 已经在用它的默认配置保护你的 SSH 了。但默认配置通常太宽松,我们需要自定义它。
步骤 2:创建你自己的配置文件(jail.local)
这是最重要的一步。fail2ban 的默认配置在 /etc/fail2ban/jail.conf。
⚠️ 警告:永远不要直接修改
jail.conf文件!
因为fail2ban将来升级时,会覆盖这个文件,你所有的修改都会丢失。
正确的做法是创建一个 jail.local 文件,这个文件中的配置会覆盖 jail.conf 中的同名设置,并且永远不会被升级覆盖。
# 使用 nano(或 vim)创建并编辑这个新文件sudo nano /etc/fail2ban/jail.local步骤 3:配置你的安全策略
将下面的全部内容复制并粘贴到你刚刚打开的 jail.local 文件中。每一项的含义都已在注释中详细说明。
[DEFAULT]## (重要) 白名单设置 (ignoreip):# ----------------------------------------------------# 用空格分隔的IP地址或网段列表。这些地址永远不会被封禁。# 127.0.0.1/8 ::1 是本地回环地址,必须保留。## !! 把 "YOUR_STATIC_IP_HERE" 替换成你自己的公网IP !!# (在本地浏览器搜 "what is my ip" 找到它)#ignoreip = 127.0.0.1/8 ::1 YOUR_STATIC_IP_HERE## 封禁时间 (bantime):# ----------------------------------------------------# 默认封禁 10 分钟太短了,攻击者很快就会回来。# 1d = 1 天# 1h = 1 小时#bantime = 1d## 寻找时间 (findtime):# ----------------------------------------------------# 在这段时间内达到 "maxretry" 次数就会被封禁。#findtime = 10m## 最大尝试次数 (maxretry):# ----------------------------------------------------# 默认的 5 次太宽容了。我们设为 3 次。#maxretry = 3## [sshd] - 针对 SSH 服务的特定设置# ----------------------------------------------------# 默认情况下 [DEFAULT] 区的设置会应用到所有服务,# 我们在这里明确启用 sshd 监狱(Jail)。#[sshd]enabled = true配置说明:
我们这份配置的含义是:
“对于 SSH 服务,如果任何一个 IP 地址(不在白名单
ignoreip内)在 10 分钟(findtime)内登录失败达到 3 次(maxretry),则立即封禁该 IP 1 天(bantime)。”
保存并退出:
在 nano 编辑器中,按 Ctrl + O,回车(Enter)保存,然后按 Ctrl + X 退出。
步骤 4:重启 fail2ban 使配置生效
这是必须的一步,否则你的 jail.local 配置不会被加载。
sudo systemctl restart fail2ban步骤 5:验证 fail2ban 是否在工作
等待几分钟,让 fail2ban 开始读取日志并抓捕那些攻击者。然后运行以下命令:
# 检查 sshd "监狱" (Jail) 的状态sudo fail2ban-client status sshd✅ 输出示例(刚启动时):
Status for the jail: sshd|- Filter| |- Currently failed: 0| |- Total failed: 0| `- File list: /var/log/auth.log`- Actions|- Currently banned: 0|- Total banned: 0`- Banned IP list:✅ 运行一段时间后(成功封禁):
Status for the jail: sshd|- Filter| |- Currently failed: 2| |- Total failed: 1392| `- File list: /var/log/auth.log`- Actions|- Currently banned: 14 <-- 成功封禁了 14 个 IP|- Total banned: 58`- Banned IP list: 116.88.x.x 104.22.x.x ...当你看到 Banned IP list 中出现 IP 地址时,恭喜你,你的“安保系统”已经开始自动工作了!
(附)紧急情况:如何解封你自己的 IP?
如果你不小心把自己锁在了外面(例如,你没有设置白名单,然后在手机上输错了 3 次密码),你需要通过其他方式(如云服务商的 VNC 控制台)登录服务器,然后执行以下命令:
# 假如你不小心封了 IP "8.8.8.8"sudo fail2ban-client set sshd unbanip 8.8.8.8这条命令会立即将该 IP 从 sshd 监狱中解封。
评论 (0)