Fail2ban安装教程 - 防止SSH暴力破解
公网服务器经常会遇到 SSH 扫描和暴力破解。攻击者会不断尝试 root、admin、ubuntu、test 等常见用户名,批量撞库或尝试弱密码。
即使已经修改了 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 加固和访问控制策略,整体安全性会更高。
评论