基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

SSH 的工作原理是什么?如何加固 SSH 服务?

知识点图片

SSH (Secure Shell) 是目前互联网上最常用的安全网络协议,主要用于远程登录系统、执行命令和传输文件。它取代了不安全的 Telnet 和 FTP。

以下是关于 SSH 工作原理的详细解释,以及如何加固 SSH 服务的完整指南。


第一部分:SSH 的工作原理

SSH 的核心在于利用加密技术建立一个安全的通道。它的工作过程主要分为三个阶段:

1. 版本协商与算法协商 (Handshake)

  • 连接建立:客户端(Client)向服务器(Server)发起 TCP 连接(默认端口 22)。
  • 版本协商:双方互通版本号,确保协议兼容(目前主流是 SSH-2)。
  • 算法协商:双方协商接下来要使用的加密算法(如 AES)、哈希算法(如 SHA-2)和密钥交换算法(如 Diffie-Hellman)。

2. 密钥交换与服务器认证 (Key Exchange)

这是 SSH 安全的基石,目的是在不安全的网络中协商出一个会话密钥(Session Key)

  • 服务器身份验证:服务器将自己的主机公钥(Host Key)发给客户端。客户端会检查这个公钥是否在自己的 ~/.ssh/known_hosts 文件中。
    • 如果是第一次连接,系统会提示用户核对指纹(Fingerprint),确认后保存。这主要为了防止中间人攻击(MITM)
  • 生成会话密钥:利用 Diffie-Hellman (DH) 算法,双方在不直接传输密钥的情况下,各自计算出相同的会话密钥
  • 后续通信:此后所有传输的数据都使用这个“会话密钥”进行对称加密(速度快)。

3. 用户认证 (User Authentication)

通道建立后,服务器需要验证“你是谁”。主要有两种方式:

  • 密码认证(Password Authentication)

    • 客户端将用户输入的密码加密后发送给服务器。
    • 服务器解密并验证。
    • 缺点:容易受到暴力破解攻击。
  • 公钥认证(Public Key Authentication)

    • 这是基于非对称加密的。
    • 用户事先在客户端生成一对密钥(公钥+私钥),并将公钥上传到服务器的 ~/.ssh/authorized_keys 文件中。
    • 流程
      1. 客户端发起认证请求。
      2. 服务器生成一个随机字符串(Challenge),用用户的公钥加密,发给客户端。
      3. 客户端用自己的私钥解密,得到原始字符串,再发回给服务器。
      4. 服务器比对一致,允许登录。
    • 优点:私钥永不离身,极其安全,不怕暴力破解。

第二部分:如何加固 SSH 服务

SSH 是黑客攻击服务器的首选入口(尤其是暴力破解)。以下是加固 SSH 的最佳实践,按重要性排序。

注意:在修改配置前,请保持一个活动的 SSH 会话,防止配置错误导致自己被锁在外面。

配置文件通常位于:/etc/ssh/sshd_config

1. 基础配置加固(必须做)

  • 禁止 Root 用户直接登录
    Root 权限太大,且用户名是固定的,容易被针对。应使用普通用户登录后通过 sudo 提权。

    bash
    PermitRootLogin no
  • 禁用密码认证,强制使用密钥登录
    这是防止暴力破解最有效的方法。一旦禁用密码,黑客就算试出密码也无法登录。

    bash
    PasswordAuthentication no
    PubkeyAuthentication yes
  • 禁止空密码登录

    bash
    PermitEmptyPasswords no

2. 网络与访问控制

  • 修改默认端口
    将默认的 22 端口改为高位非常用端口(如 22222)。虽然这属于“隐匿式安全”(Security by Obscurity),但能过滤掉 99% 的自动化扫描脚本。

    bash
    Port 22222

    记得在防火墙放行新端口。

  • 限制允许登录的用户/组
    只允许特定用户登录,拒绝其他所有用户。

    bash
    AllowUsers myuser anotheruser
    # 或者
    AllowGroups sshusers
  • 安装 Fail2Ban
    Fail2Ban 是一个入侵防御软件。它会监控 SSH 日志,如果发现某个 IP 多次尝试登录失败,会自动修改防火墙规则(iptables/firewalld)封禁该 IP。

    • 安装命令(Ubuntu/Debian): sudo apt install fail2ban

3. 进阶安全配置

  • 启用双因素认证 (2FA/MFA)
    结合 Google Authenticator。即使私钥被盗,黑客没有你的手机动态码也无法登录。

    • 需要安装 libpam-google-authenticator 并配置 PAM 模块。
  • 设置空闲超时自动断开
    防止管理员离开电脑后,SSH 会话被他人利用。

    bash
    ClientAliveInterval 300  # 300秒检测一次
    ClientAliveCountMax 0    # 检测失败0次即断开
  • 使用强加密算法
    禁用老旧、不安全的加密算法(如 SHA1, RC4)。

    bash
    # 示例(具体取决于SSH版本)
    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
    MACs hmac-sha2-512-etm@openssh.com
  • 使用堡垒机 (Jump Server)
    对于企业环境,不要将所有服务器的 SSH 端口暴露在公网。只暴露一台“堡垒机”,所有连接必须先跳到堡垒机,再由堡垒机访问内部服务器。

4. 总结:加固清单

  1. 生成 SSH 密钥对,上传公钥。
  2. 编辑 /etc/ssh/sshd_config
    • Port <非22>
    • PermitRootLogin no
    • PasswordAuthentication no
    • AllowUsers <你的用户名>
  3. 重启 SSH 服务:sudo systemctl restart sshd
  4. 配置防火墙(UFW/IPTables)放行新端口。
  5. 安装并配置 Fail2Ban。

通过以上步骤,你的 SSH 服务将变得固若金汤,普通的扫描和暴力破解将完全失效。

00:00
00:00