SSH 天天被扫登录?用 fail2ban 给它加一道自动封禁

举报
yd_272823509 发表于 2026/11/09 10:11:21 2026/11/09
【摘要】 把一台服务器挂上公网没几天,去翻 SSH 的登录日志就会吓一跳:成排的陌生 IP 在挨个试用户名和密码。这不代表你的机器已经被盯上,互联网上的扫描器就是这么无差别地撞。与其天天提心吊胆,不如让 fail2ban 盯着日志:同一个 IP 短时间内失败太多次,就自动把它封一段时间,省心又有效。 第一步:先看清谁在撞你的门grep 'Failed password' /var/log/auth.l...

把一台服务器挂上公网没几天,去翻 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,密钥登录确认可用后再收紧密码策略,别把自己锁外面。

装好之后再去翻日志,世界会清净很多:剩下的失败记录零零星星,封禁名单自己慢慢长,这才是公网服务器该有的日常。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。