SSH 天天被扫登录?用 fail2ban 给它加一道自动封禁
把一台服务器挂上公网没几天,去翻 SSH 的登录日志就会吓一跳:成排的陌生 IP 在挨个试用户名和密码。这不代表你的机器已经被盯上,互联网上的扫描器就是这么无差别地撞。与其天天提心吊胆,不如让 fail2ban 盯着日志:同一个 IP 短时间内失败太多次,就自动把它封一段时间,省心又有效。
第一步:先看清谁在撞你的门
grep 'Failed password' /var/log/auth.log | tail -20
# RHEL 系看 /var/log/secure
lastb | head
auth.log 里记着每一次失败登录的来源 IP 和试的用户名。撞库的量级通常是几十几百次起步,偶尔还会有针对 root 的专门尝试。看一眼不是为了慌,是为了确认两件事:你的 SSH 端口确实在被扫,以及稍后装完 fail2ban 之后封禁有没有生效,心里有个对照。
第二步:装好,先只开 SSH 这一项
apt install fail2ban # Debian/Ubuntu
systemctl enable --now fail2ban
配置别去改 jail.conf(升级会被覆盖),在 /etc/fail2ban/ 下新建 jail.local,只写要覆盖的部分:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
四个参数说清楚:maxretry 是失败几次算数,findtime 是统计窗口(10 分钟内失败满 5 次),bantime 是封多久。刚上线别把封禁时间设得太夸张,先 1 小时,确认自己不会被误封再慢慢加。改完配置重启服务:
systemctl restart fail2ban
fail2ban-client status sshd
status 里能看到当前被封的 IP 列表和累计封禁数。故意从另一台机器输错几次密码试一把,看到自己出现在封禁名单里,说明链路真的通了——记得顺手把测试 IP 解封:fail2ban-client set sshd unbanip 对应IP。
第三步:别把自己锁在门外
fail2ban 最经典的事故不是没挡住攻击,而是把管理员本人封了。三个保险:
一是把自己常用的出口 IP 加进白名单,jail.local 里写 ignoreip = 127.0.0.1/8 你的固定IP。二是先配好密钥登录再考虑关密码登录,顺序反了,一旦密钥没生效又赶上密码被禁,进门就只剩云厂商的控制台救援了。三是封禁动作默认走防火墙规则,如果你前面还有云安全组,两边策略别互相打架,排查时先想清楚流量到底在哪一层被拦的。
它能挡什么、挡不了什么
fail2ban 挡的是无脑撞库:同一个 IP 反复试错。它挡不住换着 IP 来的分布式尝试,也挡不住已经偷到正确密码的人——人家一次就进来了,失败次数根本攒不满。所以它只是第一道栓:真正管用的组合还是密钥登录、关掉密码认证、改掉默认的允许 root 直接登录,再加上它,让日志先安静下来。
小结
- 先 grep auth.log 看清被扫的实况,装完用 status 对照验证。
- 配置只写 jail.local:失败 5 次、窗口 10 分钟、先封 1 小时起步。
- 白名单先加上自己的 IP,密钥登录确认可用后再收紧密码策略,别把自己锁外面。
装好之后再去翻日志,世界会清净很多:剩下的失败记录零零星星,封禁名单自己慢慢长,这才是公网服务器该有的日常。
- 点赞
- 收藏
- 关注作者
评论(0)