首页软件使用教程Fail2Ban保护SSH教程:自动封禁暴力破解IP

Fail2Ban保护SSH教程:自动封禁暴力破解IP

2026-08-26 906

Fail2Ban是一款开源入侵防御工具,可以持续分析系统日志。当某个IP在规定时间内多次登录失败时,Fail2Ban会调用服务器防火墙,临时或永久封禁该IP,从而降低SSH暴力破解风险。

需要注意的是,原始命令同时混用了Ubuntu的apt和Rocky Linux的firewalld配置。下面分别说明安装方法,后续配置以Rocky Linux配合firewalld为主。

一、安装Fail2Ban

1、Rocky Linux安装方法

Rocky Linux通常需要先启用EPEL软件源:

dnf install epel-release -y
dnf install fail2ban fail2ban-firewalld -y

启动firewalld并设置开机自动运行:

systemctl enable --now firewalld

2、Ubuntu和Debian安装方法

Ubuntu或Debian可以执行:

apt update
apt install fail2ban -y

Ubuntu默认不使用firewalld。如果服务器准备继续使用UFW或Fail2Ban默认防火墙动作,不应直接套用下文的firewallcmd配置。

Fail2Ban安装后的主要信息如下:

配置目录:/etc/fail2ban
服务名称:fail2ban
主配置文件:/etc/fail2ban/jail.conf
自定义配置:/etc/fail2ban/jail.local

二、创建SSH防护配置

Fail2Ban默认配置文件是:

/etc/fail2ban/jail.conf

不建议直接修改该文件,因为软件升级时可能覆盖其中的内容。应新建jail.local保存自定义规则:

vim /etc/fail2ban/jail.local

写入以下配置:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = firewallcmd-rich-rules

[sshd]
enabled = true
port = ssh
filter = sshd

保存并退出。如果系统没有安装vim,也可以使用:

nano /etc/fail2ban/jail.local

使用backend = systemd时,Fail2Ban会从systemd日志中读取SSH登录记录,通常不需要另外指定logpath

三、配置参数说明

1、ignoreip

ignoreip = 127.0.0.1/8 ::1

用于设置不会被封禁的地址。默认示例只包含本地回环地址。

如果服务器有固定的管理出口IP,可以将其加入白名单:

ignoreip = 127.0.0.1/8 ::1 203.0.113.10

不要填写当前并不固定的公网IP,否则IP变化后可能给其他地址留下不必要的白名单权限。

2、bantime

bantime = 1h

表示攻击IP被封禁1小时,也可以使用分钟或天数:

bantime = 30m
bantime = 1d

设置为-1表示永久封禁:

bantime = -1

永久封禁可能长期积累规则,也可能误封合法用户,通常建议先使用有限封禁时间。

3、findtime和maxretry

findtime = 10m
maxretry = 5

表示同一个IP在10分钟内登录失败达到5次后触发封禁。

如果管理员经常输错密码,可以适当提高maxretry;公网服务器遭遇频繁扫描时,也可以根据日志收紧规则。

4、backend

backend = systemd

表示通过systemd读取日志,适合使用systemd日志管理的Rocky Linux等发行版。

5、banaction

banaction = firewallcmd-rich-rules

表示通过firewalld富规则封禁IP。使用该动作前,需要确保firewalld正在运行,并已安装Fail2Ban的firewalld支持组件。

6、port

port = ssh

ssh通常对应22端口。如果服务器修改了SSH端口,应填写实际端口,例如:

port = 2222

修改端口前还应同步检查firewalld、云平台安全组和SSH服务配置,避免失去服务器连接。

四、检查Fail2Ban配置

启动服务前,建议先测试配置:

fail2ban-client -t

如果输出类似以下内容,说明配置文件能够正常加载:

OK: configuration test is successful

如果出现Have not found any log fileUnknown action或配置解析错误,应先处理问题,不要直接启动服务。

还可以检查SSH服务在systemd日志中是否存在记录:

journalctl -u sshd --since "10 minutes ago"

五、启动Fail2Ban

启动Fail2Ban并设置开机自动运行:

systemctl enable --now fail2ban

查看服务状态:

systemctl status fail2ban

如果修改了jail.local,可以重新启动服务使配置生效:

systemctl restart fail2ban

不需要重复执行下面两个命令:

systemctl enable fail2ban
systemctl start fail2ban

systemctl enable --now fail2ban已经同时完成开机自启和立即启动。

六、查看SSH防护状态

查看当前已经启用的Jail:

fail2ban-client status

正常情况下,输出中应包含:

Jail list: sshd

查看sshd Jail详细状态:

fail2ban-client status sshd

输出内容通常包括:

  • 当前登录失败次数
  • 累计登录失败次数
  • 当前被封禁IP数量
  • 累计封禁IP数量
  • 已封禁IP列表

如果看不到sshd,可以检查配置是否启用,以及Fail2Ban日志中是否存在错误:

journalctl -u fail2ban --no-pager -n 100

七、手动封禁与解封IP

手动封禁某个IP:

fail2ban-client set sshd banip 1.2.3.4

手动解封某个IP:

fail2ban-client set sshd unbanip 10.0.0.111

操作完成后可以重新查看状态:

fail2ban-client status sshd

执行封禁命令前务必核对IP,避免误封当前使用的管理地址。

八、测试Fail2Ban是否生效

建议从另一台测试设备连接服务器,并故意输入几次错误密码。失败次数达到maxretry后,测试设备的IP应被临时封禁。

测试时需要注意:

  1. 不要使用唯一的服务器管理入口测试。
  2. 保留云服务器控制台或其他恢复方式。
  3. 确认测试IP没有写入ignoreip
  4. 不要在正式业务高峰期间反复尝试。
  5. 测试结束后及时解除测试IP。

查看SSH近期登录失败记录:

journalctl -u sshd --since "30 minutes ago"

查看Fail2Ban处理记录:

journalctl -u fail2ban --since "30 minutes ago"

九、Fail2Ban不能代替SSH基础加固

Fail2Ban能够降低重复尝试密码带来的风险,但不能解决弱密码、密钥泄露和高权限账号暴露等问题。

建议同时采取以下措施:

  • 使用SSH密钥登录
  • 为私钥设置保护密码
  • 禁止Root账号直接远程登录
  • 确认密钥登录正常后关闭密码认证
  • 只开放必要的SSH访问来源
  • 及时更新操作系统和OpenSSH
  • 检查登录日志及异常账户
  • 保留服务器控制台恢复入口

修改SSH配置后,应先保持当前连接,再新开一个终端测试登录。确认新配置可用后,才能关闭原连接。

十、常见问题

1、Fail2Ban启动后为什么没有sshd Jail?

检查/etc/fail2ban/jail.local中的[sshd]是否设置了enabled = true,然后执行:

fail2ban-client -t
systemctl restart fail2ban
fail2ban-client status

2、为什么配置了firewalld却无法封禁IP?

确认firewalld及相关Fail2Ban组件已经安装并运行:

systemctl status firewalld
rpm -q fail2ban-firewalld

同时检查banaction是否属于当前系统可用的动作。

3、可以把封禁时间设置为永久吗?

可以设置bantime = -1,但永久规则可能持续积累,并带来误封风险。一般建议先使用1小时或1天,再根据实际攻击情况调整。

4、修改SSH端口后如何配置?

[sshd]中的port改为实际端口,例如:

port = 2222

同时确认防火墙和云服务器安全组已经放行新端口。

5、Fail2Ban能完全阻止SSH攻击吗?

不能。它主要限制重复登录失败的IP。服务器仍需使用密钥登录、最小权限、防火墙规则和系统更新等措施。

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。
Fail2Ban保护SSH教程
下一篇:

已经没有下一篇了!

相关文章