服务器被暴力破解拦截防护教程指南

先搞清楚:什么是服务器的暴力破解

暴力破解就是攻击者用自动化工具尝试成百上千个用户名和密码组合,试图强行登录你的服务器。
一旦成功,服务器就会被控制,数据可能被窃取或删除。
对于新手站长来说,这是一项最常遇到又最危险的安全威胁。
本文就教你用三个步骤,把这种攻击挡在门外,所有操作都能在终端里直接执行,不需要担心复杂配置。

准备工作:你需要什么

开始防护前,请确保你满足以下条件:

  • 一台 Linux 服务器(Ubuntu 或 CentOS 都可以)
  • 能够通过 SSH 连接服务器(比如用终端软件或宝塔面板的 SSH 工具)
  • 拥有 sudo 或 root 权限(执行命令时需要提权)
  • 服务器已经安装了基本的防火墙(如 ufw 或 firewalld),如果没有,稍后我们会一起装

如果你用宝塔面板,大部分命令依然可以用,只是在操作 SSH 时切换到终端即可。

核心操作:三步实现拦截防护

第一步:修改 SSH 默认端口

默认的 SSH 端口是 22,攻击者第一个就会扫描它。
换成非常用端口能瞬间过滤掉大量自动扫描。

使用命令编辑 SSH 配置文件:

sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,去掉 #,把 22 改成你喜欢的数字,比如 22122。
注意不要用 1-1024 范围内的端口(系统保留),建议选 40000 以上的高位端口。

修改后保存退出(vi 下按 :wq)。
然后重启 SSH 服务:

sudo systemctl restart sshd

重要提醒: 重启前先确认防火墙已经放行新端口,否则你会被自己锁在外面。
下面马上说到防火墙配置。

第二步:配置防火墙放行新端口

使用 ufw(Ubuntu)或 firewalld(CentOS)放行新端口。

Ubuntu 示例:

sudo ufw allow 22122/tcp
sudo ufw enable  # 如果防火墙未启用
sudo ufw status verbose  # 查看当前规则

CentOS 示例:

sudo firewall-cmd --permanent --add-port=22122/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports  # 验证

放行后再用新的端口重新 SSH 连接一次,确认能登录,再考虑关闭旧端口 22(后面可以留作备用或彻底禁用)。

第三步:安装并配置 Fail2Ban 自动拦截

Fail2Ban 是一个日志监控工具,它能分析登录失败的记录,在短时间内连续出错时自动封禁来源 IP。
这是阻挡暴力破解最有效的方法之一。

安装命令:

# Ubuntu/Debian
sudo apt update && sudo apt install fail2ban -y

# CentOS/RHEL
sudo yum install epel-release -y
sudo yum install fail2ban -y

安装后,复制默认配置文件作为你的自定义配置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 jail.local,找到 [sshd] 段落,做几项调整:

[sshd]
enabled = true
port    = 22122          # 这里是你修改后的 SSH 端口
maxretry = 3             # 允许连续失败 3 次后封禁
bantime  = 3600          # 封禁 1 小时(单位秒)
findtime = 600           # 10 分钟内统计失败次数

保存后启动 Fail2Ban 并设为开机自启:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

查看运行状态:

sudo fail2ban-client status sshd

如果看到 Status 信息显示 Currently banned: 0Total banned: 0,说明已经正常工作,还没有攻击进来。

避坑指南:新手最容易踩的坑

  • 防火墙没放行新端口就直接重启 SSH:上面已经提醒过,这是导致被锁服务器的首要原因。如果真锁了,只能用服务器自带的 VNC 控制台(云商提供)进去改回来。
  • 修改的端口和其他服务冲突:建议先 grep -r "22122" /etc/ 搜索一下有没有其他程序在用这个端口。
  • Fail2Ban 没有监控新端口jail.localport 必须和实际 SSH 端口一致,否则 Fail2Ban 会看日志但找不到对应的端口,无法封禁。
  • 忘记启用 Fail2Ban 或忘记设为开机自启:有些新手安装后只启动了服务,重启服务器后 Fail2Ban 却没运行。务必用 systemctl enable 确保开机启动。
  • 禁用 root 登录前没有建立普通用户:很多人想直接 PermitRootLogin no,但忘了先建一个有 sudo 权限的普通账号。建议先创建用户并测试 sudo,再修改配置。

创建普通用户并赋予 sudo 权限的命令参考:

sudo adduser myadmin            # 创建一个叫 myadmin 的用户,会提示设置密码
sudo usermod -aG sudo myadmin   # Ubuntu 赋予 sudo 权限
# CentOS 用: sudo usermod -aG wheel myadmin

test 新用户能 SSH 登录后,
再编辑 /etc/ssh/sshd_config
PermitRootLogin yes 改成 PermitRootLogin no
重启 SSH。

验证防护是否生效

完成以上所有操作后,用以下几个方式确认防护有效:

  1. 查看 SSH 登录日志:用 sudo journalctl -u sshd -n 20sudo grep "Failed password" /var/log/auth.log,如果看到大量失败记录,说明攻击还在发生,但 Fail2Ban 应该已经开始封禁。
  2. 检查 Fail2Ban 封禁列表:运行 sudo fail2ban-client status sshd,看 Currently banned 行是否有数字。如果你是刚配置的,可以故意输错几次密码测试——连续错 3 次后,再尝试用正确密码登录,就会发现被拒绝。这时再用 sudo fail2ban-client set sshd unbanip <你的IP> 把自己解封。
  3. 尝试从其他 IP 暴力测试(可选):可以用一台另外的机器,用工具如 hydra 模拟几次失败登录,然后检查 Fail2Ban 是否真的封禁。注意不要在线上环境对公网暴露测试端口,建议用内网或本地虚拟机。

总结:防护不是一劳永逸

通过修改 SSH 端口、配置 Fail2Ban、并禁用 root 直接登录,你已经把服务器的暴力破解抵御能力提升了几个级别。
这套方案对零基础用户非常友好,成本低且效果明显。
请定期检查 Fail2Ban 状态和登录日志,并根据攻击趋势调整 bantimemaxretry 参数。
如果你后续遇到某种攻击类型变化(比如针对 FTP 或 SSH 的字典攻击),也可以基于同样的思路扩展 Fail2Ban 的配置。
现在就按照本文步骤操作一遍,你的服务器安全指数会立刻上升。

分享到:
上一篇
服务器账号权限分级安全管理从零上手教程
下一篇
服务器CC攻击拦截最新方案:三步搭建基础防护
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意