服务器总被暴力破解骚扰?本文基于亲身实战,从修改SSH端口、密钥登录,到配置Fail2ban自动封禁、设置防火墙规则,最终实现监控告警,提供一套5层递进式防护终极方案,并附赠累积的黑名单IP,让你的服务器固若金汤。
如何防止服务器被暴力破解?2026年5层防护终极指南
你是否在 /var/log/auth.log 或 /var/log/secure 里见过满屏的 Failed password for root from ?这可不是什么行为艺术,而是你的服务器正在被黑客“暴力破解”——他们用成千上万的密码组合,试图撞开你的大门。轻则浪费资源,重则服务器沦陷,数据被盗,网站被挂黑页。
就在不久前,我的服务器也经历了这场风暴。在记一次处理服务器被暴力破解一文中,我记录了当时的应急处理过程。但亡羊补牢不如未雨绸缪。今天,我将这次实战经验系统化,为你梳理出一套从外到内、从基础到进阶的 「5层服务器防护体系」。遵循这个指南,你可以极大提升服务器的攻击门槛,让暴力破解徒劳无功。
第一层:基础加固 - 告别“出厂设置”
黑客攻击往往从最简单的默认配置开始。第一步就是改变这些“众所周知”的设定。
1. 修改SSH默认端口(22)
将SSH端口从22改为一个大于1024的非知名端口,能立刻过滤掉绝大部分漫无目的的扫描流量。
# 编辑SSH配置文件
sudo vim /etc/ssh/sshd_config
# 找到 #Port 22, 去掉注释,并修改端口号,例如:
Port 58234
# 保存后重启SSH服务
sudo systemctl restart sshd
⚠️ 重要:修改前,务必确保新端口已在防火墙中放行,并且不要关闭当前连接,建议开两个会话测试新端口连通性后再退出。
2. 禁止Root用户直接登录
Root账户权限太大,禁止其直接登录,能迫使攻击者必须同时猜中用户名和密码。
# 同样在 /etc/ssh/sshd_config 中修改
PermitRootLogin no
3. 禁用密码登录,强制使用SSH密钥对
这是最重要、最有效的一步。密钥认证的加密强度远超任何密码。
- 生成密钥对(在本地电脑):
ssh-keygen -t rsa -b 4096 - 上传公钥到服务器:
ssh-copy-id -p 你的端口 -i ~/.ssh/id_rsa.pub 用户名@服务器IP - 禁用密码登录:
重启SSH服务后,你的服务器将只认密钥不认密码。# 在 /etc/ssh/sshd_config 中设置 PasswordAuthentication no ChallengeResponseAuthentication no
第二层:主动防御 - 用Fail2ban自动封禁“惯犯”
基础操作能防“懒”黑客,但对于持续的暴力破解,我们需要一个自动警察——Fail2ban。它会监控日志,当同一IP在短时间内多次认证失败,就自动将其IP加入防火墙黑名单。
1. 安装Fail2ban
# Ubuntu/Debian
sudo apt update && sudo apt install fail2ban -y
# CentOS/RHEL
sudo yum install epel-release && sudo yum install fail2ban -y
2. 配置防护策略
Fail2ban的配置位于 /etc/fail2ban/jail.local(推荐覆盖jail.conf)。
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
找到 [sshd] 部分并进行如下配置(这是关键):
[sshd]
enabled = true
port = 你的SSH端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 604800
- maxretry = 3:允许的最大失败次数。
- findtime = 300:在300秒(5分钟)内的失败计入。
- bantime = 604800:违规IP将被封禁604800秒(一周)。可以设置为
-1永久封禁,但需谨慎。
3. 启动与查看
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
# 查看sshd监狱的封禁状态
sudo fail2ban-client status sshd
第三层:网络隔离 - 用防火墙构筑“护城河”
即使端口改了,也应该用防火墙严格限制访问来源。
使用UFW(简单)
# 允许特定IP段(如你的办公网IP)访问SSH端口
sudo ufw allow from 203.0.113.0/24 to any port 58234
# 默认拒绝所有入站
sudo ufw default deny incoming
sudo ufw enable
使用iptables(通用)
# 允许特定IP,拒绝其他所有对SSH端口的访问
sudo iptables -A INPUT -s 203.0.113.100 -p tcp --dport 58234 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 58234 -j DROP
# 记得保存规则(取决于你的发行版)
云服务器安全组:在阿里云、腾讯云等控制台,设置安全组规则,只放行你的IP地址到SSH端口,这是最外一层也是最有效的防护。
第四层:深度监控 - 设立“预警哨所”
防护体系需要眼睛。我们需要知道谁在试探,以及何时该提高警戒。
1. 增强日志
确保SSH日志级别足够。在/etc/ssh/sshd_config中可设置 LogLevel VERBOSE。
2. 设置日志告警
可以写一个简单的脚本,用cron定时任务扫描日志,发现大量失败尝试就发邮件或通过Server酱、Telegram Bot通知你。
#!/bin/bash
# 简易日志监控脚本示例
FAILED_COUNT=$(sudo tail -100 /var/log/auth.log | grep "Failed password" | wc -l)
if [ $FAILED_COUNT -gt 10 ]; then
echo "警告:过去100条日志中发现 $FAILED_COUNT 次SSH失败登录!" | mail -s "服务器安全告警" [email protected]
fi
第五层:进阶策略与工具
对于有更高安全需求的服务器,可以考虑:
- 部署蜜罐(Honeypot):如用
cowrie伪装成一个易攻破的SSH服务,引诱攻击者进入,记录其行为并浪费其时间,同时保护真实服务。 - 使用现代替代品:CrowdSec 可以看作是Fail2ban的“下一代”,它采用分布式情报共享,不仅基于本地日志,还能利用社区共享的攻击IP情报进行防护,更为智能。
实战附录:一份来自实战的黑名单IP段
在我的防御过程中,我积累了一些高频攻击的来源IP段。请注意,IP是动态的,此列表仅供参考,直接封禁整个段可能误伤,建议优先使用Fail2ban动态封禁。 你可以在服务器防火墙的“预置黑名单”中酌情使用。
| IP段/国家 | 备注 |
|---|---|
| 103.102.128.0/18 (某地区) | SSH暴力破解高频源 |
| 45.95.0.0/16 (某网络) | 近期非常活跃的攻击段 |
| 185.174.136.0/22 (某地) | 常与Web漏洞扫描结合 |
(欢迎大家在评论区补充你遇到的可疑IP,我们一起维护这份清单!)
总结
服务器的安全防护是一个纵深体系,没有一劳永逸的银弹。让我们回顾一下这5层策略:
- 基础加固:改端口、禁root、用密钥——让攻击面最小化。
- 主动防御:部署Fail2ban——让持续攻击者自动上黑名单。
- 网络隔离:配置防火墙/安全组——只允许可信IP访问。
- 深度监控:设置日志告警——让自己对攻击态势心中有数。
- 进阶探索:考虑蜜罐或CrowdSec——从被动防御转向主动干扰。
按照从1到5的顺序逐步实施,你的服务器安全性将得到质的飞跃。安全是一个持续的过程,定期更新系统、检查日志、审视规则同样重要。
如果你在配置过程中遇到问题,或者有更好的工具推荐,欢迎在下方留言讨论。保护我们的数字资产,从今天这5步开始。
评论