Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

NETCONF Call Home 会话

总结 NETCONF Call Home 使 NETCONF 服务器能够发起与 NETCONF 客户端的安全连接。然后,NETCONF 客户端可以与服务器建立 SSH 会话和 NETCONF 会话。

NETCONF Call Home 使 NETCONF 客户端能够在客户端无法发起与网络设备的连接时远程管理 Junos 设备。充当 NETCONF 服务器的 Junos 设备启动并维护与一组预定义的 NETCONF 客户端的安全连接。以下各节讨论 NETCONF Call Home 功能。

了解 NETCONF Call Home

NETCONF Call Home 概述

对于通过 SSH 进行的正常 NETCONF 会话,NETCONF 客户端会首先启动与充当 NETCONF 服务器的 Junos 设备的 TCP 连接。然后,客户端启动 SSH 会话,然后启动 NETCONF 会话。在 NETCONF 呼叫总部场景中,TCP 服务器和客户端的角色是相反的。NETCONF 服务器启动到 NETCONF 客户端的 TCP 连接。建立连接后,NETCONF 客户端将照常启动 SSH 会话和 NETCONF 会话。

通过 NETCONF Call Home,您可以远程管理可能无法通过其他方式访问的 Junos 设备。例如,如果设备位于防火墙后面,而防火墙或其他安全工具限制了对设备的管理访问或实施了网络地址转换 (NAT),则可能会出现这种情况。在这种情况下,NETCONF 客户端可能无法启动与 Junos 设备的连接。但是,您可以将 Junos 设备配置为启动、建立和维护与一组预定义的网络管理系统的连接。

您可以在以下场景中使用 NETCONF Call Home:

  • 初始部署

  • 常规设备管理

图 1 概述了呼叫回拨顺序。在 NETCONF 呼叫总部场景中,网络管理系统 (NMS) 是 TCP 服务器,Junos 设备是 TCP 客户端。将 TCP 服务器配置为侦听指定端口上的连接请求。NETCONF Call Home 标准端口为 4334,但您可以配置不与其他服务冲突的任何有效端口号。您可以将 Junos 设备配置为连接到指定端口上的一个或多个预定义网络管理系统。设备建立TCP连接后,NMS将承担SSH客户端和NETCONF客户端的角色。

图 1:NETCONF Call Home 连接 NETCONF Call Home Connection

NETCONF 客户端通过 TCP 连接发起 SSH 会话。在建立 SSH 会话期间,NETCONF 客户端必须通过验证服务器提供的主机密钥或证书来验证服务器的身份验证。NETCONF 服务器还必须对客户端进行身份验证。客户端可以选择服务器支持的任何 SSH 身份验证方法。服务器首先检查基于证书的身份验证,然后检查基于密钥的身份验证,最后检查基于密码的身份验证。

建议对用户和主机使用基于 SSH 证书的身份验证。通过基于证书的身份验证,您可以通过无密码登录为用户设置对设备的 SSH 访问,并提供信任主机而无需验证密钥指纹的能力。此外,您还可以定义给定证书的有效时间长度。对于基于证书的身份验证,服务器和客户端各自发送其 SSH 证书。您必须使用用于验证服务器证书的 CA 公钥配置客户端。同样,您必须使用用于验证客户端证书的 CA 公钥配置服务器。

有关 NETCONF Call Home 的详细信息,请参阅 RFC 8071、 NETCONF Call Home 和 RESTCONF Call Home

NETCONF Call Home 的优势

  • NETCONF Call Home 可以简化设备的初始部署。

  • 与传统基于密码的方法相比,使用基于证书的身份验证的 NETCONF Call Home 可以简化身份验证密钥的管理和扩展,并提供更强的安全性。

如何设置 NETCONF Call Home

要配置 NETCONF Call Home,请执行以下部分中介绍的步骤:

配置 Junos 用户帐户

对于所有 SSH 身份验证方法,NETCONF 客户端在建立 NETCONF 会话的每台设备上都需要一个本地用户帐户或用户模板帐户。

要创建本地用户模板帐户,请执行以下操作:

  1. [edit system login]层次结构级别配置user语句并指定用户名。包括语class句,并指定一个登录名类,该类具有用户要执行的所有操作所需的权限。

  2. 提交配置

  3. 在客户端应用程序建立 NETCONF 会话的每个 Junos 设备上重复上述步骤。

配置 SSH 身份验证

在 SSH 会话建立期间,NETCONF 客户端通过验证服务器提供的主机密钥或证书来验证服务器的身份。同样,NETCONF 服务器也会对客户端进行身份验证。服务器首先检查基于证书的身份验证,然后检查基于密钥的身份验证,最后检查基于密码的身份验证。您必须为所选的身份验证方法配置服务器和客户端。以下章节介绍了 SSH 身份验证方法:

配置基于密码的身份验证

如果 NETCONF 客户端使用基于密码的身份验证,请使用密码配置 Junos 用户帐户。

要创建基于文本的密码:

  1. 包括用户帐户的 plain-text-password or encrypted-password 语句。

    • 要以文本形式输入密码,请发出以下命令。系统会提示您输入密码,该密码在存储之前会加密。

      要存储预加密密码(例如,以前使用消息摘要 5 (MD5) 创建并进行哈希处理的密码),请发出以下命令:

  2. 提交配置。

  3. 在客户端应用程序使用基于密码的身份验证建立 NETCONF 会话的每台 Junos 设备上重复上述步骤。

配置基于密钥的身份验证

如果 NETCONF 客户端使用基于密钥的身份验证,请先在配置管理服务器上生成用户的 SSH 密钥对。然后在 Junos 设备上的相应用户帐户下配置公钥。

要为 NETCONF 客户端配置基于密钥的身份验证,请执行以下操作:

  1. 为给定用户生成 SSH 密钥对。

    在网络管理系统上,发出 ssh-keygen 命令并提供相应的参数。

    例如:

    默认情况下,ssh-keygen命令将公钥和私钥存储在用户主目录的 .ssh 子目录中的文件中;文件名取决于编码和 SSH 版本。有关命令选项的更多信息,ssh-keygen请参阅手册页。
  2. 在 Junos 设备上,将公钥与该用户的 Junos 登录帐户相关联。

    Junos OS 会将指定文件的内容复制到运行 Junos OS 的设备上。 URL 是包含一个或多个公钥的文件的路径。有关指定 URL 的信息,请参阅 CLI 用户指南

    注意:

    或者,您可以通过在[edit system login user username authentication]层次结构级别包含ssh-rsa或等效语句来配置公钥。

  3. 提交配置。

  4. 在客户端应用程序建立 NETCONF 会话的每台 Junos 设备上重复配置公钥的步骤。

在初始化 SSH 连接期间,客户端可以使用服务器的公钥来验证 NETCONF 服务器的身份。您可以在网络管理系统上安装服务器的公钥,也可以在会话初始化期间传入密钥。

配置基于证书的身份验证

NETCONF Call Home 支持使用 SSH 证书进行身份验证。SSH 证书包含一个由证书颁发机构 (CA) 签名的 SSH 公钥。CA 私钥(签名密钥)对主机公钥进行签名以生成主机证书。同样,CA 私钥对用户公钥进行签名以生成用户证书。主机证书向用户验证主机,用户证书向主机验证用户。

您可以使用 OpenSSH 创建 SSH 证书和关联的 CA 基础架构。OpenSSH 证书指定公钥、身份信息和有效性约束。要使用 SSH 证书进行身份验证,您必须:

  • 创建证书颁发机构并生成 CA 签名密钥。

  • 生成用户的 SSH 密钥对。

  • 使用 CA 私钥对用户公钥和主机公钥进行签名,生成用户和主机证书。

  • 将 CA 公钥配置为在 Junos 设备和网络管理系统上受信任。

  • 在 Junos 设备上配置授权主体。

默认情况下,生成的证书对所有用户都有效。若要将用户证书限制为一组特定的用户(主体),必须在生成证书时指定授权主体。Junos 设备需要指定一个或多个授权主体的证书。您还必须在 Junos 设备上配置授权主体列表。如果设备上配置 的任何 授权主体与证书中的授权主体匹配,则设备将对证书进行身份验证。即使连接用户未在证书中或设备上显式配置为授权主体,连接用户也会获得授权。

要配置基于证书的身份验证,请执行以下步骤:

生成证书颁发机构
  1. 在任何 Linux/FreeBSD 系统上,生成证书颁发机构签名密钥。

    例如,以下命令创建单独的 CA 签名密钥,用于对用户证书和主机证书进行签名。

  2. 将网络管理系统配置为信任主机 CA。

    复制主机 CA 公钥的内容,并将其添加到全局或用户的 SSH 已知主机文件中,以将其标记为受信任的 CA。在以下示例中,我们将复制主机 CA 公钥内容并添加到 @cert-authority * host-ca-public-key 用户的 known_hosts 文件中。

    注意:

    网管通过主机CA公钥验证主机证书。要仅信任特定主机或域的证书,请将通配符 (*) 替换为相应的主机或域名。

  3. 将用户 CA 公钥复制到 Junos 设备。

    例如:

  4. 在 Junos 设备上,将用户 CA 公钥配置为受信任的 CA 密钥。

    以下示例将存储在 user_ca.pub 文件中的 CA 公钥添加为受信任的用户 CA 密钥。

    配置此语句时,设备会将用户 CA 公钥添加到 /var/etc/ssh_trusted_user_ca.pub 文件中。Junos 设备在建立 SSH 会话期间使用用户 CA 公钥验证用户证书。

生成用户证书

要为 NETCONF 客户端生成 SSH 证书,请执行以下操作:

  1. 在客户端 NMS 上,为用户生成 SSH 密钥对。

    例如:

  2. 如果设备不同,请将用户的公钥复制到具有 CA 签名密钥的 CA 服务器。

  3. 生成用户证书。

    使用用户 CA 私钥对用户的公钥进行签名,并指定可以使用此证书访问 Junos 设备的授权主体(用户)列表。

    以下命令使用存储在 user_ca 中的 CA 私钥对存储在 id_rsa.pub 中的用户公钥进行签名。该证书对两个主体有效:lab 和 netconf-user。

  4. 验证是否已创建用户证书。

    在上一步中,命令创建 id_rsa-cert.pub 文件。

  5. 如果设备不同,请将用户证书复制到网络管理系统。

  6. 确保用户证书、文件所有者和权限正确无误。

  7. 将 SSH 密钥和证书标识添加到 ssh 代理应用程序(如果它们不是自动添加的)。例如:

生成主机证书

Junos 设备将 SSH 密钥存储在 /etc/ssh 目录中。要生成主机证书,请先将主机的公钥复制到 CA 服务器,然后使用主机 CA 私钥对主机公钥进行签名。

  1. 在 Junos 设备上,验证主机公钥。

  2. 将 Junos 设备的公钥复制到具有 CA 签名密钥的 CA 服务器。

  3. 生成主机证书。

    使用主机 CA 私钥对主机的公钥进行签名,并指定 -h 创建主机证书的选项。

    以下命令使用存储在 host_ca 中的 CA 私钥对存储在 ssh_host_rsa_key.pub 中的主机公钥进行签名。

  4. 验证是否已创建主机证书。

    在上一步中,命令创建 ssh_host_rsa_key-cert.pub 文件。

  5. 将主机证书复制到 Junos 设备。

    例如:

  6. 在 Junos 设备上,配置主机证书。

    配置此语句时,设备会将主机证书添加到 /var/etc/ssh_host_ca.pub 文件中。

配置授权委托人

用户证书可以绑定到特定用户或主体。Junos 设备要求用户证书指定一个或多个授权主体。还必须在 Junos 设备上配置授权主体。如果设备上配置的至少一个授权主体与证书中的授权主体匹配,则 Junos 设备将对证书进行身份验证。

您可以使用多种方法配置授权主体列表。您可以加载一个文件,其中包含授权主体列表,每个主体位于单独的行上。您也可以直接在配置中配置授权主体列表。

要配置授权主体,请执行以下操作:

  1. (选答)创建授权主体文件并将其复制到 Junos 设备。

  2. 配置可使用 SSH 证书访问系统的授权主体。

    • 要加载包含已授权主体的文件,请配置 authorized-principals-file 语句并指定要加载的文件的路径。

      例如:

    • 要直接在配置中配置一个或多个授权主体,请使用语 authorized-principals 句并指定主体名称或主体名称列表。

      例如:

  3. 提交配置。

    配置授权主体时,设备会将授权主体列表添加到 /var/etc/ssh_authorized_principals 文件中。

启用 NETCONF 服务

要在 Junos 设备上为 NETCONF Call Home 配置 NETCONF 服务:
  1. 在默认 NETCONF 端口 (830) 或用户定义的端口上启用 NETCONF 服务。
    • 要使用默认的 NETCONF 端口 (830),请勿指定端口号。

    • 要使用特定端口,请配置端口号。

      端口的范围可以从 1 到 65535,但是,您应避免在通常分配给其他服务的端口上配置访问。

  2. 配置符合 RFC 的 NETCONF 会话。
  3. 配置符合 YANG 标准的 NETCONF 会话。
  4. 提交配置:

配置 Junos 设备以连接到 NETCONF Call Home 客户端

在 NETCONF 呼叫总部场景中,TCP 服务器和客户端的角色是相反的。您可以将 Junos 设备配置为启动、建立和维护与一组预定义的网络管理系统的连接。NETCONF Call Home 使用出站 SSH 连接到指定的 NETCONF 客户端。

开始之前:

  • 如果使用 SSH 证书进行身份验证,请配置用户 CA 证书、主机证书和授权主体。

注意:

NETCONF Call Home 客户端配置会在您提交客户端配置时注册 SSH 证书配置。在提交客户端配置时,必须配置主机证书以及至少一个用户 CA 证书和一个授权主体。如果稍后添加这些初始值,则必须停用并提交客户端配置,然后激活并提交客户端配置才能使值生效。如果在首次激活客户端配置时配置了初始值,则客户端配置将自动注册对现有值的任何更新。

要在 Junos 设备上配置 NETCONF Call Home 客户端,请执行以下操作:

  1. [edit system services ssh]在层次结构级别,将 SSH 版本设置为 v2。
  2. 导航到出站 SSH 客户端层次结构,并定义一个标识符,用于唯一标识 NETCONF Call Home 客户端。

    例如:

  3. 为 NETCONF 客户端配置主机名或者 IPv4 或 IPv6 地址。此外,指定 NETCONF 客户端(充当 TCP 服务器)侦听连接请求的端口。

    例如:

  4. 定义设备标识符,这是一个用户定义的字符串,用于在初始序列期间向客户端标识 Junos 设备。

    例如:

  5. 将用于重新建立断开连接的出站 SSH 连接sticky的方法定义为或in-order
  6. 为会话配置 NETCONF 服务。
  7. (可选)将 Junos 设备配置为向管理服务器发送激活消息。

    例如,以下配置每 15 秒发送一次激活信号(默认),并在发送 3 条未收到响应的消息(默认)后终止 SSH 连接。

  8. (可选)如果要在会话初始化期间将设备的公钥传递给管理服务器,请配置secret语句。

    配置此语句时,设备会在会话初始化期间将其公钥以及部分从语句派生的 secret SHA1 哈希传递给管理服务器。客户端应用程序可以使用共享密钥和哈希来验证提供的主机密钥是否来自语句标识的 device-id 设备。

  9. 对将管理 Junos 设备的每个 NETCONF Call Home 客户端重复上述步骤。
  10. 提交配置。

将设备配置为连接到 NETCONF Call Home 客户端并提交配置后,设备将尝试启动与客户端的 TCP/IP 连接。设备将继续创建此连接,直到成功或直到 NETCONF 呼叫家庭客户端配置被删除或停用。

每次 Junos 设备建立出站 SSH 连接时,都会向客户端发送一个用于识别设备的初始序列。在此传输中是 的值 device-id。未配置 secret 语句时,初始顺序为:

如果配置该 secret 语句,则初始序列将包括 Junos 设备的公钥和部分从语 secret 句派生的 SHA1 哈希。客户端可以计算预期的哈希值,并将其与 HMAC 值进行比较,以验证显示的主机密钥是否来自语句标识的 device-id 设备。

客户端通过验证提供的主机密钥或证书来验证 Junos 设备。同样,NETCONF 服务器也会对客户端进行身份验证。服务器首先检查基于证书的身份验证,然后检查基于密钥的身份验证,最后检查基于密码的身份验证。SSH 会话建立后,客户端将启动 NETCONF 会话。