运维必备技能:配置 Fail2Ban 防 SSH 暴力破解
今天分享一下如何通过Fail2Ban防止SSH暴力破解。
随着服务器暴露在公网,SSH 暴力破解攻击越来越常见。攻击者通过不断尝试用户名和密码试图登录你的服务器,这不仅威胁安全,还可能拖慢系统性能。
1. 什么是 Fail2Ban?
Fail2Ban 是一款开源入侵防御工具,它可以实时监控日志文件,一旦检测到暴力破解行为(如多次登录失败),就会自动使用防火墙(如 firewalld)将攻击者 IP 临时或永久封禁。
2. 安装 Fail2Ban
环境信息:
- 系统版本:Rocky Linux 8 / 9
- SSH 登录端口:默认 22(如你自定义端口,请注意替换)
- 默认 SSH 日志路径:/var/log/secure
Rocky Linux 默认没有内置 Fail2Ban,需要启用 EPEL 仓库:
# 启用 EPEL 仓库
dnf install epel-release -y
# 安装 Fail2Ban
dnf install fail2ban -y
安装完成后,Fail2Ban 的核心文件路径为:
配置目录:/etc/fail2ban
服务名:fail2ban
3. 配置 Fail2Ban 保护 SSH
Fail2Ban 的默认配置文件为 /etc/fail2ban/jail.conf,请不要直接修改,我们应该创建一个新的配置文件:
vim /etc/fail2ban/jail.local
推荐配置如下:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 # 忽略本地 IP
bantime = 1h # 封禁时间(1 小时)
findtime = 10m # 查找时间窗(10 分钟)
maxretry = 5 # 最大失败次数(超出则封禁)
backend = systemd # 使用 systemd 读取日志
banaction = firewallcmd-ipset # 使用 firewalld 封禁 IP
[sshd]
enabled = true # 启用 SSH 防护
port = ssh # 监控的端口(或自定义端口号)
logpath = %(sshd_log)s # 自动识别 /var/log/secure
filter = sshd # 使用默认 sshd 筛选规则
参数说明:
- ignoreip:允许的 IP 地址(比如你家/公司白名单 IP)
- bantime:封禁时长,可设置为 -1 实现永久封禁
- findtime + maxretry:在 findtime 时间内失败超过 maxretry 次,就封禁
- banaction:配合 firewalld 封 IP
- backend = systemd:Rocky 使用 systemd 管理日志,比传统文件读取更稳定
4. 启动并启用 Fail2Ban
启动并设置开机自启:
systemctl enable --now fail2ban
设置开机自动启动:
systemctl enable fail2ban
启用防火墙 firewalld:
systemctl enable --now firewalld
查看运行状态:
systemctl status fail2ban
查看 Fail2Ban 状态:
fail2ban-client status
查看 sshd Jail 的详细状态:
fail2ban-client status sshd
刚安装还没有被封禁的IP,接下来手动进行封禁。
5. 手动封禁与解封 IP
封禁某 IP:
fail2ban-client set sshd banip 10.0.0.111
现在可以查看到10.0.0.111被封禁了。
通过10.0.0.111是无法登录10.0.0.110的,因为已经被封禁。
解封某 IP:
fail2ban-client set sshd unbanip 10.0.0.111
解封后顺利登录10.0.0.110
【温馨提示】我是设置firewalld进行封禁IP的,必须保证firewalld是运行中的,不然无法进行禁用。
6. 附加建议
除了使用 Fail2Ban,还有一些硬核建议:
修改 SSH 默认端口: 编辑 /etc/ssh/sshd_config,例如:
Port 2222
然后重启 SSH 服务。
禁止 root 登录:
PermitRootLogin no
仅允许特定 IP 登录 SSH: 利用 firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的IP" port protocol="tcp" port="22" accept'
firewall-cmd --reload
根据安全要求,Fail2Ban 几乎是必装工具。如果你还没配置,赶快动手试试吧!