Skip to content

SSH 安全

这页解决什么问题

SSH 安全 用来保护宿主机上的 SSH 登录入口。

它做的不是“把 SSH 代理进 fknock 网页登录”,而是:

  1. 读取系统里的 SSH 登录日志
  2. 识别成功登录和失败登录
  3. 按地区范围、失败次数和封锁时长生成防护策略
  4. 把封锁 IP 和允许网段同步到底层防火墙

适合这些场景:

  • 你仍然需要从公网或固定外部网络访问 SSH
  • SSH 端口经常被扫描或撞密码
  • 你希望只允许特定地区或固定 CIDR 触碰 SSH
  • 你希望 SSH 登录成功、失败和封锁事件能进入事件中心

开启入口

先进入:

  • 系统设置 → 功能

打开:

  • SSH安全

开启后,左侧导航会出现:

  • SSH安全

需要注意:

  • Docker 部署通常不显示这项能力
  • 当前环境必须支持宿主机防火墙管理
  • 系统需要能读取 journalctl/var/log/auth.log

如果这些条件不满足,页面会显示不可用原因。

它依赖哪些日志

系统会优先读取:

  • journalctl

如果不可用,再尝试:

  • /var/log/auth.log
  • /var/log/auth.log.1
  • /var/log/auth.log.1.gz

能识别的典型 SSH 日志包括:

  • Accepted ... for ... from ...
  • Failed ... for ... from ...
  • Failed ... for invalid user ... from ...

所以这项功能主要服务于系统 SSH 登录,不是任意 TCP 服务的通用登录审计。

SSH 安全配置怎么理解

启用 SSH 安全

打开后,系统会开始监听 SSH 登录日志,并同步专用防火墙链。

关闭后:

  • 会停止监听日志
  • 会清理 FN-KNOCK-SSH 相关防火墙规则
  • 活动封锁记录会标记为已解除

统计窗口

表示失败登录要在多长时间内累计。

默认是:

  • 10 分钟

失败阈值

表示同一个来源 IP 在统计窗口内失败多少次后会被封锁。

默认是:

  • 5 次

封锁时长

表示命中规则后封锁多久。

默认是:

  • 1 天

可选单位包括:

  • 分钟
  • 小时

允许地区

你可以按省份和城市添加允许范围。

这部分会依赖系统的 CIDR 地址库,最终会被解析成一组允许访问 SSH 的网段。

如果某个来源成功登录 SSH,但它不在允许范围内,系统也会把它封锁,原因会显示为:

  • 地区不允许

所以第一次启用时建议先小范围验证,不要一上来配置得过窄。

自定义 CIDR

如果你知道固定出口网段,可以直接填写:

text
1.2.3.0/24
2408:8000::/24

适合:

  • 公司出口
  • 家宽固定出口
  • 自己的云服务器跳板机
  • 明确可信的 IPv6 网段

页面里能看到什么

登录日志

展示最近的 SSH 登录记录,包括:

  • 时间
  • 成功或失败
  • 用户名
  • 来源 IP
  • 认证方式
  • SSH 端口
  • 原始日志
  • IP 归属地

你可以按成功 / 失败筛选,也可以搜索 IP、用户和归属地。

封锁列表

展示当前仍然有效的 SSH 封锁记录,包括:

  • IP
  • 封锁原因
  • 失败次数
  • 命中的端口
  • 封锁时间
  • 过期时间
  • IP 归属地

你可以手动解除单个或多个封锁。

操作菜单

右上角的 操作 菜单里有两个关键动作:

  • 同步防火墙:按当前配置重新下发允许 CIDR 和活动封锁 IP
  • 清空 SSH 防火墙:清理 SSH 专用防火墙链,并解除活动封锁记录

如果你调整了 SSH 端口、地区范围或怀疑规则没有及时生效,可以先执行一次 同步防火墙

它和协议映射有什么区别

不要把 SSH 安全协议映射 混成一件事。

SSH 安全 保护的是:

  • 宿主机 SSH 登录入口
  • 登录日志
  • SSH 端口上的防火墙封锁

协议映射 处理的是:

  • 在子域模式下额外暴露少量 TCP / UDP 入口
  • 例如 SSH、MySQL、Redis、DNS

如果你只是想把 SSH 作为一个非 Web 协议入口补充到子域模式里,看协议映射。

如果你想根据 SSH 登录失败、地区范围和封锁记录保护宿主机 SSH,看 SSH 安全。

和事件中心的关系

开启后,相关事件会进入:

  • 事件中心

常见事件包括:

  • SSH 登录成功
  • SSH 登录失败
  • SSH IP 被封锁

如果你希望这些事件推送到微信、飞书、Webhook、Telegram 等渠道,可以继续配置:

推荐的第一轮配置

建议先这样做:

  1. 确认自己有可用的 SSH 备用登录方式
  2. 打开 系统设置 → 功能 → SSH安全
  3. 进入 SSH安全 页面
  4. 保持默认 10 分钟 / 5 次 / 1 天
  5. 先添加你自己常用出口所在地区或固定 CIDR
  6. 保存后执行一次 同步防火墙
  7. 从可信外部网络测试一次 SSH 登录
  8. 再观察登录日志和封锁列表

不要第一次就把允许地区收得过窄,尤其是你还没有确认当前公网出口归属地是否准确时。

常见排查思路

页面提示当前环境不可用

优先检查:

  1. 是否是 Docker 部署
  2. 当前环境是否支持宿主机防火墙管理
  3. 是否存在 journalctl/var/log/auth.log

自己突然无法 SSH

优先检查:

  1. 当前出口 IP 是否在允许地区或自定义 CIDR
  2. 是否因为失败次数达到阈值被封锁
  3. 是否可以从局域网或备用入口进入后台解除封锁
  4. 必要时在页面里执行 清空 SSH 防火墙

归属地不准确

SSH 安全里的地区判断依赖 CIDR 地址库 和 IP 归属地能力。

如果你需要切换官方在线服务或自部署服务,先看:

相关阅读

QQ群:1081609274