服务器被暴力破解拦截防护教程指南
先搞清楚:什么是服务器的暴力破解
暴力破解就是攻击者用自动化工具尝试成百上千个用户名和密码组合,试图强行登录你的服务器。
一旦成功,服务器就会被控制,数据可能被窃取或删除。
对于新手站长来说,这是一项最常遇到又最危险的安全威胁。
本文就教你用三个步骤,把这种攻击挡在门外,所有操作都能在终端里直接执行,不需要担心复杂配置。
准备工作:你需要什么
开始防护前,请确保你满足以下条件:
- 一台 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: 0 和 Total banned: 0,说明已经正常工作,还没有攻击进来。
避坑指南:新手最容易踩的坑
- 防火墙没放行新端口就直接重启 SSH:上面已经提醒过,这是导致被锁服务器的首要原因。如果真锁了,只能用服务器自带的 VNC 控制台(云商提供)进去改回来。
- 修改的端口和其他服务冲突:建议先
grep -r "22122" /etc/搜索一下有没有其他程序在用这个端口。 - Fail2Ban 没有监控新端口:
jail.local里port必须和实际 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。
验证防护是否生效
完成以上所有操作后,用以下几个方式确认防护有效:
- 查看 SSH 登录日志:用
sudo journalctl -u sshd -n 20或sudo grep "Failed password" /var/log/auth.log,如果看到大量失败记录,说明攻击还在发生,但 Fail2Ban 应该已经开始封禁。 - 检查 Fail2Ban 封禁列表:运行
sudo fail2ban-client status sshd,看Currently banned行是否有数字。如果你是刚配置的,可以故意输错几次密码测试——连续错 3 次后,再尝试用正确密码登录,就会发现被拒绝。这时再用sudo fail2ban-client set sshd unbanip <你的IP>把自己解封。 - 尝试从其他 IP 暴力测试(可选):可以用一台另外的机器,用工具如
hydra模拟几次失败登录,然后检查 Fail2Ban 是否真的封禁。注意不要在线上环境对公网暴露测试端口,建议用内网或本地虚拟机。
总结:防护不是一劳永逸
通过修改 SSH 端口、配置 Fail2Ban、并禁用 root 直接登录,你已经把服务器的暴力破解抵御能力提升了几个级别。
这套方案对零基础用户非常友好,成本低且效果明显。
请定期检查 Fail2Ban 状态和登录日志,并根据攻击趋势调整 bantime 和 maxretry 参数。
如果你后续遇到某种攻击类型变化(比如针对 FTP 或 SSH 的字典攻击),也可以基于同样的思路扩展 Fail2Ban 的配置。
现在就按照本文步骤操作一遍,你的服务器安全指数会立刻上升。