服务器暴力破解防护实战指南:3步封堵SSH暴力破解
为什么你的服务器总被暴力破解?
服务器暴力破解是新手站长最容易踩的坑——攻击者用脚本不断尝试SSH用户名和密码,一旦猜中就能直接登录。
我见过很多买来VPS三天,root密码就被破了的案例。
其实只要做几个简单设置,就能挡住99%的扫描。
动手之前,先确认这些条件
开始操作前,请确保:
- 你有一台Linux服务器(本教程以CentOS 7/8为例,Ubuntu命令也类似,我会顺便标注差异)
- 已经通过SSH登录到服务器(如果还没连上,可以用Xshell、Putty或者直接终端ssh root@你的IP)
- 有一个非root的普通用户(如果还没有,先创建一个,因为后面我们要禁止root远程登录)
创建普通用户的命令:
useradd myuser # 替换成你想要的用户名
passwd myuser # 设置密码
并给这个用户sudo权限:
usermod -aG wheel myuser # CentOS
# 或者 Ubuntu: usermod -aG sudo myuser
封堵SSH暴力破解的具体操作
第一步:修改SSH默认端口
默认端口22是攻击者重点扫描对象。
改成高位端口(比如2222或10086)能大幅减少扫描命中率。
编辑SSH配置文件:
vi /etc/ssh/sshd_config
找到 #Port 22 这一行,去掉注释,把22改成你的新端口,比如:
Port 22222
注意: 改完先别重启ssh,等第二步一起做。
第二步:禁止root用户直接密码登录
接着在同一文件里找到 PermitRootLogin yes,改成:
PermitRootLogin prohibit-password
这样root只能通过密钥登录,密码登录被禁止。
如果希望完全禁止root登录,可以改成 PermitRootLogin no,但我建议保留密钥登录方式,方便紧急管理。
然后保存文件,重启SSH服务:
systemctl restart sshd # CentOS / systemd 系统
# 或者 service ssh restart # 老系统
千万别直接退出当前会话! 先另开一个终端窗口测试新端口能否连上:
ssh -p 22222 myuser@你的服务器IP
如果能正常登录,再关闭原窗口。
如果连不上,用原端口的窗口排查。
第三步:安装Fail2ban自动封锁IP
Fail2ban能监控SSH登录失败次数,超过阈值(比如5次)就临时封掉来源IP10分钟。
CentOS安装:
yum install epel-release -y
yum install fail2ban -y
Ubuntu:
apt update
apt install fail2ban -y
安装后配置SSH防护:
vim /etc/fail2ban/jail.local
写入以下内容(如果文件不存在则新建):
[DEFAULT]
bantime = 600 # 封禁10分钟
findtime = 600 # 检测窗口10分钟
maxretry = 5 # 失败5次触发
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
注意:如果你修改了SSH端口,要把 port = ssh 改成实际端口号,比如 port = 22222。
启动Fail2ban并设为开机自启:
systemctl start fail2ban
systemctl enable fail2ban
查看当前封禁列表:
fail2ban-client status sshd
这样服务器暴力破解防护的三步就完成了。
避坑:新手最容易忽略的几个地方
- 防火墙放行新端口:修改SSH端口后,必须在服务器防火墙(firewalld/iptables)和云平台安全组同时放行新端口。以firewalld为例:
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --reload
云平台(阿里云、腾讯云、AWS等)还要去控制台安全组添加入方向规则。
- Fail2ban不生效:检查日志路径是否准确,可以手动模拟失败登录然后查
tail -f /var/log/fail2ban.log。 - 密钥登录设置:如果打算彻底抛弃密码,建议先生成SSH密钥对并测试通过,再关闭密码认证。生成密钥命令:
ssh-keygen -t rsa -b 4096,然后把公钥传到服务器ssh-copy-id -p 端口 用户@IP。
验证防护效果及高频问题
怎么知道防护起了作用?
用另一个终端模拟暴力破解:
# 用错误的密码连续登录6次,注意替换IP和新端口
for i in {1..6}; do ssh -p 22222 user@你的服务器IP; done
之后再次用正确密码登录,会提示被拒绝或连接被重置。
然后查看Fail2ban状态:
fail2ban-client status sshd
会看到被禁的IP。
过10分钟后再试,应该恢复。
常见问题Q&A
Q:修改端口后自己连不上服务器怎么办?
A:如果在机房/控制台有VNC或救援模式,可以从后台直接修改sshd_config文件恢复;或者用云平台“一键登录”等功能进入系统。所以建议先保留一个root会话不要关闭。
Q:Fail2ban误封自己的IP怎么办?
A:可以手动解封:fail2ban-client set sshd unbanip 你的IP。如果频繁误封,可以调大 maxretry 值或减小 findtime。
Q:我不喜欢Fail2ban,有其他替代吗?
A:可以用云平台自带的DDoS高防或安全组黑名单,或者使用DenyHosts等工具。但Fail2ban最通用灵活。
---
如果你正在处理服务器暴力破解防护,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
这套方案我已经帮几十个朋友部署过,只要配置时小心别断连,基本半小时内就能搞定。