实现 SSH 安全防护的方案

Why I close SSH port 22 entirely (and what I use instead)》作者主张:

  1. 彻底关闭公网 SSH 22 端口,而非仅靠密钥登录或 fail2ban。
    传统端口敲门(port knocking)用明文序列开端口,易被抓包重放。
  2. 改用 fwknop 单包授权(SPA):客户端发一个 加密+HMAC-SHA512 签名的 UDP 包,内含时间戳与一次性计数器。
    1. SPA 包加密防窃听、签名防伪造、时间戳/计数器防重放
    2. 加密密钥与 HMAC 密钥分离,一个负责"别让人偷看",一个负责"别让人造假"
  3. 服务端 fwknopd 校验通过后,临时(如 120 秒)向 iptables 插入仅放行客户端 IP 的 22 端口规则,超时自动回收。
  4. 配合 ~/.ssh/config 的 ProxyCommand 可让 ssh server1 透明敲门。
  5. Tailscale 加密隧道作兜底,确保万一 SPA 机制失效还能成功登录机器。

这个方案不是“换端口藏起来”,而是默认全拒+密码学鉴权,把攻击面缩到仅收 SPA 的 UDP 口,好处就是对扫描器而言 22 端口始终 filtered,无 banner、无 RST,OpenSSH 零日无法被触及。

如果你有魔法,你可以看到一个评论框~