暴力破解SSH防护,fail2ban安装配置教程
服务器暴露在公网,SSH端口每天都会收到大量暴力破解尝试。
fail2ban 是一款用 Python 编写的入侵防御工具,它通过监控日志文件,在发现多次认证失败后自动修改防火墙规则,临时封禁来源 IP。
本文面向零基础用户,手把手完成 fail2ban 安装配置,让你的 SSH 防护立刻生效。
准备工作:检查系统与防火墙
fail2ban 依赖系统日志和防火墙,目前主流 Linux 发行版(CentOS 7+、Ubuntu 18.04+、Debian 10+)均可安装。
开始前,请确认:
- 你拥有 root 权限或 sudo 权限的账号。
- 服务器已开启防火墙(iptables、firewalld 或 nftables),fail2ban 默认使用 iptables 封禁 IP。
- SSH 服务正常运行,且日志文件路径已知(通常为
/var/log/secure或/var/log/auth.log)。
执行以下命令检查防火墙状态:
# 查看 firewalld 状态(CentOS/RHEL)
systemctl status firewalld
# 查看 ufw 状态(Ubuntu/Debian)
ufw status
如果防火墙未启动,请先启用它,否则 fail2ban 无法添加封禁规则。
安装 fail2ban 并设置开机自启
根据你的系统包管理器选择命令:
CentOS/RHEL 系:
yum install epel-release -y
yum install fail2ban -y
Ubuntu/Debian 系:
apt update
apt install fail2ban -y
安装完成后,启动服务并设置开机自启:
systemctl start fail2ban
systemctl enable fail2ban
验证服务状态:
systemctl status fail2ban
看到 active (running) 即表示安装成功。
默认配置下 fail2ban 已经启用 sshd 防护,但参数较为宽松,建议按需调整。
配置 SSH 防护规则
fail2ban 的配置文件位于 /etc/fail2ban/。
不要直接修改 jail.conf,而是创建 jail.local 覆盖默认设置。
使用编辑器新建文件:
vim /etc/fail2ban/jail.local
写入以下内容(根据实际情况调整):
[DEFAULT]
# 封禁时长(秒),默认 600 秒
bantime = 3600
# 检测时间窗口(秒),默认 600 秒
findtime = 600
# 最大失败次数,默认 5 次
maxretry = 3
# 忽略本机 IP,避免把自己封禁
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd
关键参数说明:
bantime:封禁时长,建议设为 1 小时以上,提高攻击成本。maxretry:允许的失败次数,设为 3 次可更快触发封禁。ignoreip:白名单,务必加入你的管理 IP,防止误封。
保存后重启 fail2ban 使配置生效:
systemctl restart fail2ban
避坑指南:常见问题与处理
配置过程中容易遇到以下问题,提前了解可少走弯路:
- 服务启动失败:检查日志
tail -f /var/log/fail2ban.log,常见原因是日志路径错误或防火墙未安装。 - 无法封禁 IP:确认防火墙后端与 fail2ban 匹配,例如 firewalld 需安装
python3-firewall包。 - 误封自己:务必在
ignoreip中加入你的固定 IP 或内网网段。 - 日志格式不匹配:不同发行版 SSH 日志路径不同,可通过
fail2ban-client -d调试。
如果使用宝塔面板,可在“软件商店”搜索 fail2ban 并安装,面板已集成图形化配置,但手动修改 jail.local 仍是最灵活的方式。
验证防护效果与查看状态
配置完成后,需要验证 fail2ban 是否正常工作。
查看当前封禁列表:
fail2ban-client status sshd
输出会显示已封禁的 IP 数量及列表。
如果为空,可以模拟多次 SSH 登录失败(注意不要用生产账号测试),再执行上述命令观察是否出现封禁 IP。
查看详细日志:
tail -f /var/log/fail2ban.log
当日志出现 Ban 记录时,说明防护已生效。
你也可以尝试从另一台机器用错误密码 SSH 登录,多次失败后连接会被拒绝,证明封禁规则起作用。
注意:fail2ban 只能缓解暴力破解,不能替代密钥登录、修改默认端口等基础安全措施。
建议同时启用 SSH 密钥认证并禁用密码登录,以获得更全面的防护。
常见疑问
fail2ban 会影响正常用户登录吗?
只要用户没有多次输错密码,就不会触发封禁。合理设置 maxretry 和 bantime 可以平衡安全与体验。
封禁后如何手动解封某个 IP?
执行 fail2ban-client set sshd unbanip 1.2.3.4 即可解除封禁。
CentOS 7 下 fail2ban 默认后端是什么?
CentOS 7 默认使用 systemd 后端读取日志,若日志路径不同,可改为 backend = polling 并指定 logpath。
是否必须安装防火墙?
是的,fail2ban 依赖防火墙执行封禁动作。如果系统没有防火墙,需要先安装并启用 iptables 或 firewalld。
按照以上步骤完成 fail2ban 安装配置后,你的 SSH 防护能力将显著提升。
遇到异常时,优先检查日志和防火墙状态,多数问题都能快速定位。