给你的 VPS 加一道锁:fail2ban 防暴力破解入门
如果你有一台对公网开放 SSH 的 VPS,翻一下日志就会发现:每天都有来自各地的陌生 IP 在试密码,root、admin、test 这些用户名轮番出现。改端口、只用密钥登录当然是最重要的防线,但再加一道自动封禁,就能把这种无休止的试探挡在门外。fail2ban 就是干这件事的轻量工具。
fail2ban 是怎么工作的
它并不改 SSH 本身,而是盯着系统日志:某个 IP 在短时间内连续登录失败达到阈值,就通过防火墙规则临时封掉这个 IP。一段时间后自动解封,正常用户几乎无感,暴力破解脚本却要不断换 IP,成本一下子就上去了。
安装与启动
Ubuntu / Debian 系统:
sudo apt update
sudo apt install -y fail2ban
Rocky / RHEL 系系统,先装 EPEL 再装:
sudo dnf install -y epel-release
sudo dnf install -y fail2ban
装好后启动并设开机自启,再确认状态:
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
sudo fail2ban-client status
看到服务正常运行和已加载的 jail 列表,说明服务已经在跑。
给 SSH 写一条 jail 规则
不要直接改 /etc/fail2ban/jail.conf,升级时会被覆盖。正确做法是新建 /etc/fail2ban/jail.local,只写自己要改的部分:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1
这条规则的意思是:10 分钟内失败 5 次,就封 1 小时。logpath 在不同发行版上不一样,Debian / Ubuntu 是 /var/log/auth.log,RHEL 系一般是 /var/log/secure,写错路径等于规则没生效,一定要按自己的系统改。
改完配置要重载生效:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
查看封禁、手动解封
想知道现在封了谁、封了多久,用这两条命令:
sudo fail2ban-client status sshd
sudo fail2ban-client get sshd banip
输出里会列出当前被封的 IP 和封禁总数。如果自己输错密码被误封了,不要干等一小时,手动解封:
sudo fail2ban-client set sshd unbanip 203.0.113.10
把地址换成被封的 IP 即可。经常登录的固定 IP,可以写进 ignoreip 做白名单,例如 ignoreip = 127.0.0.1/8 ::1 203.0.113.10,改完同样要重启 fail2ban。注意:白名单只写你确实信任的出口 IP,不要图省事写一大段地址。
几个容易踩的坑
第一,bantime 别一上来就设成永久。先从 1 小时起步,确认规则没有误伤正常登录,再慢慢加长。第二,改了 SSH 端口的,要同步改 port,否则规则盯的是默认端口。第三,fail2ban 只能防“反复试密码”,防不住密钥泄露、弱口令本身被猜中,所以密钥登录加禁用密码登录仍然是更根本的做法。第四,定期看一眼日志和封禁列表,如果某个网段长期高频出现,可以考虑在云厂商安全组层面直接拉黑。
小结
装好 fail2ban、写好一条 sshd jail、会查封禁会解封,一台 VPS 的 SSH 就多了一道自动上锁的门。它不贵、不占资源,也不需要天天盯着,适合作为每一台新开 VPS 的标准动作:先上锁,再对外提供服务。
- 点赞
- 收藏
- 关注作者
评论(0)