fail2ban防护暴力破解SSH登录

暴力破解SSH是服务器最常见的安全威胁之一。
今天这篇文章会带着你一步步完成 fail2ban防护暴力破解SSH登录 的完整配置。
全文不假设你有任何运维基础,每个命令我都会说明它在做什么,你只需要照着复制粘贴就行。

检查系统环境与安装fail2ban

首先确认你使用的Linux发行版。
大部分教程都基于Ubuntu/Debian或CentOS。
下面给出两种主流系统的安装命令。

Ubuntu/Debian(使用apt):

sudo apt update
sudo apt install fail2ban -y

CentOS/RHEL(使用yum,需先安装EPEL):

sudo yum install epel-release -y
sudo yum install fail2ban -y

安装完成后,可以用 dpkg -l | grep fail2banrpm -qa | grep fail2ban 确认是否成功。

配置SSH保护的默认设置

fail2ban的配置文件在 /etc/fail2ban 目录下。重要的一条铁律:不要直接修改 jail.conf,而是创建一个 jail.local 文件,里面覆盖你需要的配置项
这样做的好处是未来升级不会覆盖你的设置。

创建一个 jail.local(如果不存在):

sudo nano /etc/fail2ban/jail.local

写入以下内容(注意缩进,每行不要有多余空格):

[DEFAULT]
# 白名单设置,填入你信任的IP(可以填你当前的IP或公司出口IP),多个用空格分隔
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

# 封禁时间单位是秒,这里设为一小时(3600秒)
bantime = 3600

# 在指定时间(findtime)内失败达到 maxretry 次就封禁
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
  • ignoreip 添加你信任的IP,避免自己把自己关在外。
  • bantime 是封禁时长;findtime 是检测窗口(秒);maxretry 是该窗口内允许的最大失败次数。
  • [sshd] 段专门对SSH服务生效。

如果你修改了SSH默认端口(比如改成2222),必须把 port 改为你实际用的端口号,否则fail2ban无法正确匹配。

启动服务并验证封锁效果

配置完成后,启动并启用fail2ban开机自启:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

查看服务状态:

sudo systemctl status fail2ban

出现 active (running) 就说明运行正常。

现在模拟一次暴力破解(不要在线上服务器做,最好用一个测试环境):

  1. 从另一台机器(假设IP是 192.168.1.100)用错误密码多次尝试SSH登录你的服务器。
  2. 连续输错6次以上(超过上面设置的 maxretry=5)。
  3. 在服务器上输入:
sudo fail2ban-client status sshd

如果配置成功,你会看到类似输出:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed: 8
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 1
   `- Banned IP list:   192.168.1.100

Currently banned: 1 表示已成功封禁了一个IP。

你还可以通过查看系统日志确认:

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

里面会记录每次ban和unban的事件。

避坑指南:常见错误与白名单设置

错误1:忽略白名单,把自己锁在外面
这是最惨的坑。配置时一定要在 ignoreip 中加入你的当前IP(或VPN IP)。如果已经把自己封了,可以用VNC或云控制台里的“救援模式”进入系统,然后执行:

sudo fail2ban-client set sshd unbanip <你的IP>

错误2:修改了jail.conf而不是jail.local
系统更新会覆盖jail.conf,导致配置丢失。请始终使用 jail.local

错误3:SSH端口不是22,但忘记修改 port 参数
如果SSH端口是2222,必须写 port = 2222,否则fail2ban监控的是22端口,永远不会触发封禁。

错误4:iptables或firewalld冲突
有些系统默认使用firewalld,而fail2ban默认调用iptables。建议统一为firewalld的rich rule。但更简单的做法是:保持默认的iptables,如果系统装了firewalld,执行 sudo systemctl stop firewalld && sudo systemctl disable firewalld

额外高频问题解答

Q1:如何查看当前被封禁的所有IP?

sudo fail2ban-client banned

或针对特定jail:sudo fail2ban-client status sshd 看Banned IP list。

Q2:如何手动解封一个IP?

sudo fail2ban-client set sshd unbanip 192.168.1.100

Q3:可以设置永久封禁吗?
可以,将 bantime 设为负数(如 -1),或者设一个很大的值(如 31536000 代表一年)。不过建议先设一个合理时长,避免误封后解封困难。

Q4:fail2ban日志在哪里?
/var/log/fail2ban.log,可以用 tail -f 实时查看。

总结

fail2ban防护暴力破解SSH登录是提高服务器安全的基础操作。
你只需要按照上面步骤安装、配置jail.local、设置白名单和合理阈值,就能有效拦截大量暴力扫描。
最后别忘了用 fail2ban-client status sshd 确认封锁是否生效。
如果在配置过程中遇到其他问题,优先检查日志文件 /var/log/fail2ban.log,大部分异常都能在那里找到线索。

分享到:
上一篇
服务器访问控制黑白名单设置零基础教程
下一篇
Linux虚拟内存swap分区配置详解:从创建到验证的教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意