服务器被暴力破解,如何限制登录次数?
服务器SSH端口暴露在公网上,每天都会被各种脚本试探密码。
如果放任不管,一旦弱口令被撞破,服务器就成了别人的“肉鸡”。
限制登录失败次数是最直接的防御手段,今天就用fail2ban帮你把这个防护做起来。
你需要准备什么
- 一台Linux服务器(CentOS 7/8 或 Ubuntu 18.04+),已开启SSH服务
- 拥有root或sudo权限
- 系统已连接外网(用于安装软件包)
- 知道自己的公网IP(配置白名单时用到,避免把自己封了)
安装并配置fail2ban
第一步:安装fail2ban
CentOS 系统执行:
yum install epel-release -y
yum install fail2ban -y
Ubuntu/Debian 系统执行:
apt update
apt install fail2ban -y
第二步:创建SSH防护规则
d fail2ban 的配置文件不建议直接修改 /etc/fail2ban/jail.conf,而是新建一个 jail.local 覆盖默认值。
运行:
vim /etc/fail2ban/jail.local
写入以下内容(注意替换 your_ip 为你的真实IP):
[DEFAULT]
# 白名单:不受限制的IP,多个用空格隔开
ignoreip = 127.0.0.1/8 your_ip
# 封禁时间:单位秒,-1表示永久
bantime = 3600
# 触发封禁前的失败次数
maxretry = 3
# 计数窗口:单位秒
findtime = 600
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
保存退出。
这里 maxretry = 3 表示10分钟内输错3次密码就封1小时,你可以根据需求调整。
第三步:启动并设置开机自启
systemctl start fail2ban
systemctl enable fail2ban
查看运行状态:systemctl status fail2ban,出现绿色 active (running) 就成功了。
避坑指南(新手必看)
- 忘记加白名单:如果
ignoreip没加上自己的IP,你连续输错几次密码可能把自己封掉。建议先开一个临时SSH连接,或者用服务器面板的VNC登录修改。 - 日志路径不对:SSH日志文件通常是
/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS)。如果fail2ban检查不到日志,会一直报错。可以通过fail2ban-client status sshd查看错误日志。 - 配置文件没有生效:改完
jail.local后一定要执行systemctl restart fail2ban。如果还不生效,检查文件是否有语法错误(比如等号前后多空格)。 - 计数器不会自动清零:
findtime窗口结束后失败次数会重置,但如果你反复用小号测试,注意每次测试间隔大于findtime才能清空计数。
效果验证两步走
a. 模拟错误登录:另开一个终端(或换个IP),故意输错SSH密码3次以上。
比如:
ssh root@你的服务器IP
输错三次后,第四次会直接显示 Permission denied (publickey,password) 或者连接超时。
b. 查看封禁列表:登录服务器(用白名单IP或VNC),执行:
fail2ban-client status sshd
输出的 Banned IP list 中应该出现了刚才测试的IP。
如果想解封某个IP:
fail2ban-client set sshd unbanip 被封的IP
日志文件也能看到封禁记录:tail -f /var/log/fail2ban.log。
写在最后
限制登录次数只是服务器安全的第一步,配合禁用密码登录、只允许密钥认证、更换非标准端口等措施效果更好。
如果你的服务器正在被暴力扫描,不妨先按本文把fail2ban跑起来,几分钟就能大幅降低风险。
遇到异常时,优先检查日志和配置文件权限,多数问题都能自己解决。