欢迎访问易策 · ZeroToOne,从0到1的成长与探索!

Fail2ban安装教程 - 防止SSH暴力破解

公网服务器经常会遇到 SSH 扫描和暴力破解。攻击者会不断尝试 rootadminubuntutest 等常见用户名,批量撞库或尝试弱密码。

即使已经修改了 SSH 端口,也仍然可能被扫描到。比较实用的防护方式是安装 Fail2ban。它可以自动读取 SSH 登录日志,当某个 IP 在短时间内多次失败登录时,自动将该 IP 加入防火墙封禁列表。

本文将介绍如何在 Ubuntu 和 Debian 服务器上安装并配置 Fail2ban,用于防止 SSH 暴力破解。按照本文步骤操作后,你可以有效减少恶意尝试,提升服务器的基础安全性。

本文适用于:

  • Ubuntu 20.04 / 22.04 / 24.04
  • Debian 10 / 11 / 12

一、Fail2ban 是什么

Fail2ban 是一个自动封禁工具,主要作用包括以下几项:

监控 SSH 登录日志
识别失败登录次数过多的 IP
自动调用防火墙封禁该 IP
到期后自动解封

例如可以设置为:

10 分钟内失败 5 次
自动封禁 1 小时

这样可以明显减少 SSH 爆破日志和恶意尝试。

二、安装 Fail2ban

1. 更新软件源

先更新软件源:

sudo apt update

2. 安装 Fail2ban

安装 Fail2ban:

sudo apt install -y fail2ban

3. 设置开机自启并启动服务

设置开机自启并立即启动:

sudo systemctl enable --now fail2ban

4. 检查运行状态

查看运行状态:

sudo systemctl status fail2ban

如果看到 active (running),说明 Fail2ban 已经启动。

三、查看 SSH 端口

如果你已经修改过 SSH 端口,需要先确认当前 SSH 监听端口:

sudo ss -tulnp | grep ssh

例如输出:

LISTEN 0 128 0.0.0.0:22722

这说明 SSH 端口是 22722

如果仍然使用默认端口,则一般是:

22

下面示例以 22722 为例。如果你的服务器使用的是其他端口,需要替换成自己的实际端口。

四、配置 Fail2ban 保护 SSH

1. 创建 SSH 防护配置文件

创建 SSH 防护配置文件:

sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF2'
[sshd]
enabled = true
port = 22722
filter = sshd
logpath = /var/log/auth.log
backend = auto
maxretry = 5
findtime = 10m
bantime = 1h
EOF2

2. 配置说明

以上配置项的含义如下:

enabled = true
启用 SSH 防护

port = 22722
SSH 端口,如果你是 22,就改成 22

filter = sshd
使用 Fail2ban 内置的 SSH 规则

logpath = /var/log/auth.log
Ubuntu / Debian 的 SSH 登录日志路径

maxretry = 5
允许失败 5 次

findtime = 10m
统计时间窗口为 10 分钟

bantime = 1h
封禁 1 小时

3. 调整封禁时长

如果你希望封禁更久,可以改成:

bantime = 24h

或者:

bantime = 7d

五、重启 Fail2ban

配置完成后,重启服务:

sudo systemctl restart fail2ban

检查状态:

sudo fail2ban-client status

正常情况下会看到类似输出:

Status
|- Number of jail: 1
`- Jail list: sshd

查看 SSH jail 状态:

sudo fail2ban-client status sshd

如果配置成功,会看到:

Status for the jail: sshd

其中通常会显示以下信息:

Currently failed
Total failed
Currently banned
Total banned
Banned IP list

六、查看被封禁的 IP

执行以下命令:

sudo fail2ban-client status sshd

重点查看:

Banned IP list

如果有 IP 被封禁,会显示在这里。

你也可以查看 Fail2ban 日志:

sudo tail -f /var/log/fail2ban.log

如果看到类似内容:

Ban 1.2.3.4
Unban 1.2.3.4

说明 Fail2ban 正在自动封禁和解封 IP。

七、手动解封 IP

如果误封了自己的 IP,可以手动解封:

sudo fail2ban-client set sshd unbanip 你的IP

例如:

sudo fail2ban-client set sshd unbanip 69.63.195.143

你也可以先查看当前封禁列表,再进行操作:

sudo fail2ban-client status sshd

八、手动封禁恶意 IP

如果你发现某个 IP 一直在扫描,也可以手动封禁:

sudo fail2ban-client set sshd banip 恶意IP

例如:

sudo fail2ban-client set sshd banip 210.211.102.248

九、推荐的更严格配置

如果你的服务器经常被扫描,可以使用更严格的配置:

sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF2'
[sshd]
enabled = true
port = 22722
filter = sshd
logpath = /var/log/auth.log
backend = auto
maxretry = 3
findtime = 10m
bantime = 24h
EOF2

其含义是:

10 分钟内失败 3 次
封禁 24 小时

如果服务器长期被批量扫描,这个配置通常会更有效。

十、配合 UFW 使用

1. 查看 UFW 状态

Fail2ban 可以配合 UFW 使用。先确认 UFW 状态:

sudo ufw status verbose

2. 仅开放必要端口

建议至少只开放必要端口,例如:

sudo ufw allow 22722/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

3. 仅允许固定 IP 登录 SSH

如果你的 SSH 只允许固定 IP 登录,更推荐使用以下规则:

sudo ufw allow from 你的IP to any port 22722 proto tcp

例如:

sudo ufw allow from 69.63.195.143 to any port 22722 proto tcp

确认自己能正常登录后,再删除公网 SSH 放行:

sudo ufw delete allow 22722/tcp

十一、推荐 SSH 安全配置

Fail2ban 不是唯一防线,建议同时加固 SSH。

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

建议设置:

通过安装 Fail2ban 并结合 UFW、SSH 基础加固配置,可以显著降低 SSH 暴力破解带来的风险。即使修改过 SSH 端口,也建议继续启用 Fail2ban,形成更稳妥的防护机制。

在完成 Fail2ban 的基础配置后,还需要进一步检查 SSH 安全设置,并了解常见故障的排查方法。下面这部分内容将帮助你完善防护策略,同时提供一键安装配置命令,便于快速落地。

十一、SSH 安全加固补充

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

检查配置:

sudo sshd -t

重启 SSH:

sudo systemctl restart ssh

注意:修改 SSH 配置前,不要关闭当前 SSH 连接。请先新开一个终端测试能否正常登录,确认无误后,再退出旧连接。

十二、常见问题

1. Fail2ban 启动失败

可以先查看错误信息:

sudo systemctl status fail2ban
sudo journalctl -u fail2ban --no-pager -n 100

常见原因通常是配置文件格式有误,或者日志路径设置不正确。

2. 查看不到 sshd jail

先执行以下命令:

sudo fail2ban-client status

如果结果中没有 sshd,请检查配置文件:

sudo cat /etc/fail2ban/jail.d/sshd.local

修改完成后,重启 Fail2ban:

sudo systemctl restart fail2ban

3. 自己被封了怎么办

如果你仍然可以进入服务器控制台,可执行以下命令解封:

sudo fail2ban-client set sshd unbanip 你的IP

如果已经无法通过 SSH 登录,则需要借助云厂商提供的 VNC、救援模式或控制台进入服务器进行处理。

十三、一键安装配置命令

如果你的 SSH 端口是 22722,可以直接执行以下命令:

sudo apt update && sudo apt install -y fail2ban && sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF2'
[sshd]
enabled = true
port = 22722
filter = sshd
logpath = /var/log/auth.log
backend = auto
maxretry = 3
findtime = 10m
bantime = 24h
EOF2
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

如果你的 SSH 使用默认端口 22,只需将:

port = 22722

改成:

port = 22

总结

Fail2ban 能有效降低 SSH 被批量扫描和暴力破解带来的风险,比较推荐的配置如下:

maxretry = 3
findtime = 10m
bantime = 24h

同时建议配合以下安全措施一起使用:

  • 修改 SSH 默认端口
  • 关闭密码登录
  • 使用 SSH 密钥登录
  • 限制 SSH 只允许固定 IP 访问
  • 关闭不必要的公网端口

总的来说,Fail2ban 不能替代完整的服务器安全加固,但它确实是 Linux 服务器防御 SSH 爆破时非常实用的一道自动防线。结合 SSH 加固和访问控制策略,整体安全性会更高。

评论