远程访问概述
您(网络管理员)可以使用 DHCP、Finger、FTP、rlogin、SSH 和 Telnet 服务等服务远程访问路由器、交换机或安全设备。本主题介绍如何使用 Telnet、SSH、FTP 和 Finger 服务配置远程访问。
系统服务概述
出于安全原因,默认情况下禁用对路由器的远程访问。您必须显式配置路由器,以便远程系统上的用户可以访问它。用户可以通过 DHCP、finger、FTP、rlogin、SSH 和 Telnet 服务从远程系统访问路由器。此外,Junos XML 协议客户端应用程序可以使用安全套接字层 (SSL) 或特定于 Junos XML 协议的明文服务等服务。
为了保护系统资源,可以限制服务接受的同时连接数和单个用户拥有的进程数。如果超过任一限制,连接尝试将失败。
配置 Telnet 服务以远程访问路由器或交换机
要将路由器或交换机配置为接受 Telnet 作为接入服务,请在层次结构级别包含[edit system services]该telnet语句:
[edit system services] telnet { connection-limit limit; rate-limit limit; }
默认情况下,路由器或交换机每分钟支持的同步 Telnet 会话和连接尝试次数有限。
或者,您可以包含以下任一或两语句来更改默认值:
-
connection-limit limit— 每个协议的最大同时连接数(IPV4 和 IPv6)。范围从 1 到 250。默认值为 75。配置连接限制时,该限制适用于每个协议(IPv4 和 IPv6)的 telnet 会话数。例如,连接限制为 10 时允许 10 个 IPv6 telnet 会话和 10 个 IPv4 telnet 会话。 -
rate-limit limit- 每 分钟接受的最大连接尝试次数(从 1 到 250)。默认值为 150。配置速率限制时,该限制适用于每个协议(IPv4 和 IPv6)的连接尝试次数。例如,速率限制为 10 则每分钟允许 10 次 IPv6 telnet 会话连接尝试,每分钟允许 10 次 IPv4 telnet 会话连接尝试。
您不能在运行 Junos-FIPS 软件的设备上包含该 telnet 语句。建议不要在通用标准 环境中使用 Telnet。
配置 FTP 服务以远程访问路由器或交换机
要将设备配置为接受 FTP 作为接入服务,请在[edit system services]层次结构级别包含该ftp语句:
[edit system services] ftp { connection-limit limit; rate-limit limit; }
默认情况下,路由器或交换机每分钟支持的同步 FTP 会话和连接尝试次数有限。您可以包含以下任一或两项语句来更改默认设置:
-
connection-limit limit— 每个协议的最大同时连接数(IPV4 和 IPv6)。范围是 1 到 250 之间的值。默认值为 75。配置连接限制时,该限制适用于每个协议(IPv4 和 IPv6)的会话数。例如,连接限制为 10 时,允许 10 个 IPv6 FTP 会话和 10 个 IPv4 FTP 会话。 -
rate-limit limit- 每 分钟接受的最大连接尝试次数(值从 1 到 250)。默认值为 150。配置速率限制时,该限制适用于每个协议(IPv4 和 IPv6)的连接尝试次数。例如,速率限制为 10 时,允许 10 次 IPv6 FTP 会话连接尝试和 10 次 IPv4 FTP 会话连接尝试。
您可以使用无源 FTP 访问仅接受无源 FTP 服务的设备。所有使用 FTP 的命令和语句也接受被动 FTP。在层次结构级别包含[edit system services]该ftp语句,以使用主动 FTP 或被动 FTP。
要启动被动 FTP 会话,请使用pasvftp标准 FTP 格式 (ftp://destination) 中的 (而不是 ftp )。例如:
request system software add pasvftp://name.com/jinstall.tgz
不能在运行 Junos-FIPS 软件的路由器或交换机上包含该 ftp 语句。建议不要在通用标准环境中使用 FTP 服务。
配置手指服务以远程访问路由器
要将路由器配置为接受手指作为接入服务,请在层次结构级别包含[edit system services]以下finger语句:
[edit system services] finger { connection-limit limit; rate-limit limit; }
默认情况下,路由器支持有限数量的同时手指会话和每分钟连接尝试。或者,您可以包含以下任一或两语句来更改默认值:
-
connection-limit limit— 每个协议的最大同时连接数(IPv4 和 IPv6)。范围是 1 到 250 之间的值。默认值为 75。配置连接限制时,该限制适用于每个协议(IPv4 和 IPv6)的会话数。例如,连接限制为 10 时允许 10 个 IPv6 明文服务会话和 10 个 IPv4 明文服务会话 -
rate-limit limit- 每 分钟接受的最大连接尝试次数(值从 1 到 250)。默认值为 150。配置速率限制时,该限制适用于每个协议(IPv4 和 IPv6)的连接尝试次数。例如,速率限制为 10 则每分钟允许 10 次 IPv6 会话连接尝试,每分钟允许 10 次 IPv4 会话连接尝试。
不能在运行 Junos-FIPS 软件的路由器上包含该 finger 语句。建议不要在 Common Criteria 环境中使用手指服务。
配置 SSH 服务以远程访问路由器或交换机
要将路由器或交换机配置为接受 SSH 作为接入服务,请在[edit system services]层次结构级别包含以下ssh语句:
[edit system services] ssh { authentication-order [method 1 method2...]; authorized-keys-command authorized-keys-command; authorized-keys-command-user authorized-keys-command-user; authorized-principals-file filename authorized-principals-command program-path ciphers [ cipher-1 cipher-2 cipher-3 ...]; client-alive-count-max number; client-alive-interval seconds; connection-limit limit; fingerprint-hash (md5 | sha2-256); host-certificate-file filename hostkey-algorithm (algorithm | no-algorithm); key-exchange [algorithm1 algorithm2...]; log-key-changes log-key-changes; macs [algorithm1 algorithm2...]; max-pre-authentication-packets number; max-sessions-per-connection number; no-challenge-response; no-password-authentication; no-passwords; no-public-keys; no-tcp-forwarding; port port-number; protocol-version [v2]; rate-limit number; rekey { data-limit bytes; time-limit minutes; } root-login (allow | deny | deny-password); sftp-server; tcp-forwarding; trusted-user-ca-key-file filename }
默认情况下,路由器或交换机每分钟支持的同步 SSH 会话和连接尝试次数有限。使用以下语句更改默认值:
-
connection-limit limit— 每个协议的最大同时连接数(IPv4 和 IPv6)。范围是 1 到 250 之间的值。默认值为 75。配置连接限制时,该限制适用于每个协议(IPv4 和 IPv6)的 SSH 会话数。例如,连接限制为 10 时,允许 10 个 IPv6 SSH 会话和 10 个 IPv4 SSH 会话。 -
max-sessions-per-connection number— 包含此语句以指定每个单个 SSH 连接允许的最大 SSH 会话数。这允许您限制在单个 SSH 连接中建立隧道的克隆会话数。默认值为 10。 -
rate-limit limit- 每 分钟接受的最大连接尝试次数(值从 1 到 250)。默认值为 150。配置速率限制时,该限制适用于每个协议(IPv4 和 IPv6)的连接尝试次数。例如,速率限制为 10 则每分钟允许 10 次 IPv6 SSH 会话连接尝试,每分钟允许 10 次 IPv4 SSH 会话连接尝试。 -
data-limit— 重新协商会话密钥之前的数据限制(字节) -
time-limit— 重新协商会话密钥前的时间限制(分钟)
从 Junos OS 19.4R1 版和 Junos OS 17.4R3 版开始,您可以使用 [edit system services ssh] 层级的和no-password-authenticationno-challenge-response选项禁用 SSH 登录密码或质询-响应身份验证。
默认情况下,用户可以通过 CLI 会话通过 SSH 创建到运行 Junos OS 的路由器的 SSH 隧道。这种类型的隧道可用于转发 TCP 流量,绕过任何防火墙过滤器或访问控制列表。通过绕过防火墙过滤器或访问控制列表,这种类型的隧道允许访问路由器以外的资源。使用此选项可 no-tcp-forwarding 防止用户通过 SSH 创建到路由器的 SSH 隧道。
有关其他配置设置的信息,请参阅以下主题:
通过 SSH 配置 root 登录
默认情况下,当 身份验证 方法不需要密码时,允许用户路由器通过 SSH 登录 AS 或切换 ASroot。要通过 SSH 控制用户访问,请在层次结构级别包含[edit systems services ssh]该root-login语句:
[edit system services ssh] root-login (allow | deny | deny-password);
allow— 允许用户通过 SSH 以 root 身份登录到路由器或交换机。
deny— 禁止用户通过 SSH 以 root 身份登录到路由器或交换机。
deny-password—当身份验证方法(例如 RSA)不需要密码时,允许用户以 root 身份登录路由器或通过 SSH 进行交换。
默认值为 deny-password。
配置传入 SFTP 连接
SSH 文件传输协议 (SFTP) 是一种网络协议,可通过任何可靠的数据流提供文件访问、文件传输和文件管理。从 Junos OS 19.1R1 版开始,默认情况下,我们已全局禁用传入的 SFTP 连接。如果需要,您可以通过在层次结构级别配置[edit system services ssh]该语句sftp-server来全局启用传入 SFTP 连接。在 Junos OS 19.1R1 版之前,默认情况下会全局启用传入 SFTP 连接。
默认情况下,仅禁用传入 SFTP 连接。例如,给定设备 A 和 B(其中设备 A 运行的是 19.1R1),默认情况下无法通过 SFTP 从 B 连接到 A。但是,如果您在设备 A 上进行配置 sftp-server ,则可以通过 SFTP 从设备 B 连接到设备 A。
默认情况下,传入 SFTP 连接处于禁用状态。要启用传入 SFTP 连接:
配置 SSH 协议版本
默认情况下,仅启用 SSH 协议版本 2。
要将路由器或交换机配置为使用版本 2 的 SSH 协议,请包含该 protocol-version 语句并在 v2 层次结构级别指定 [edit system services ssh] :
[edit system services ssh] protocol-version [ v2 ];
FIPS 模式下的系统始终使用 SSH 协议版本 v2。
配置客户端活动机制
当客户端或服务器依赖于知道连接何时变为非活动状态时,客户端活动机制很有价值。它与标准激活机制不同,因为客户端激活消息是通过加密通道发送的。默认情况下,不启用客户端活动机制。要启用它,请配置 client-alive-count-max and client-alive-interval 语句。此选项仅适用于 SSH 协议版本 2。
在以下示例中,无响应的 SSH 客户端将在大约 100 秒 (20 x 5) 后断开连接:
[edit system ssh] client-alive-count-max 5; client-alive-interval 20;
配置 SSH 指纹散列算法
要配置 SSH 服务器在显示密钥指纹时使用的散列算法,请包含该fingerprint-hash语句并在层次结构级别指定 md5 [edit system services ssh] orsha2-256:
[edit system services ssh] fingerprint-hash (md5 | sha2-256);
md5散列算法在 FIPS 模式下的系统上不可用。
基于 SSH 证书的身份验证概述
从 Junos OS 和 Junos OS 演化版 22.4R1 开始,您可以为用户和主机配置基于 SSH 证书的身份验证。使用此功能,您无需验证密钥指纹,即可为用户和信任主机建立无密码 SSH 访问。
SSH 基于证书的身份验证的优势
-
SSH 基于证书的身份验证消除了用户记住和输入密码的需要,从而简化了登录过程。
-
与传统的基于密码的方法相比,SSH 证书提供更强的安全性。由于没有密码可供猜测或破解,它们更难被攻破。
-
SSH 证书简化了身份验证密钥的管理。管理员可以从集中的证书颁发机构颁发和撤销证书,而不是为每个用户和主机管理单独的密钥。
生成签名密钥
签名密钥是基于 SSH 证书的身份验证中使用的专用加密密钥。配置基于 SSH 证书的身份验证的第一步是生成签名密钥。您可以在任何 Linux/FreeBSD 系统上生成签名密钥。请按照以下步骤为基于 SSH 证书的身份验证生成签名密钥:
-
运行命令:
ssh-keygen -f <filename_ca>。这将创建一个名为<filename_ca>的私钥和一个名为<filename_ca.pub>的相应公钥。 -
登录到您的瞻博网络设备,并通过执行命令配置 SSH 可信用户证书颁发机构 (证书颁发机构) 密钥文件:
set system services ssh trusted-user-ca-key-file <path-to-public-key>然后提交配置。 -
每个用户都可以使用以下 CLI 命令生成自己的用户密钥:
ssh-keygen -t <rsa|ecdsa|ed25519>。 -
将用户创建的公密钥复制到具有用户证书
<filename_ca><filename_ca.pub>和 的计算机上。 -
对文件中的
<filename_ca.pub>用户公钥进行签名。
配置
要配置基于 SSH 证书的身份验证,请使用以下 CLI 配置语句:
-
[system services ssh trusted-user-ca-key-file filename]— 配置TrustedUserCAKey包含 SSH 证书公钥的文件。 -
[system services ssh host-certificate-file filename]—配置HostCertificate包含已签名主机证书的文件。 -
[system services ssh authorized-principals-file filename]- 配置包含AuthorizedPrincipals名称列表的文件,其中一个名称必须出现在证书中才能被接受进行身份验证。 -
[system services ssh authorized-principals-command program-path]- 指定用于生成文件中找到AuthorizedPrincipals的允许证书主体列表的程序。
禁用 SSH
如果启用了 SSH 并想要禁用它,只需从层次结构级别中[edit system services]移除该ssh语句即可。
如果您只想禁用外部 SSH,请在层次结构级别使用[edit system services ssh]该access-disable-external语句。
从 Junos OS 21.4R1 版开始,安装了虚拟机主机的 Junos 平台默认启用 SSH。
默认情况下启用 SSH 后,您无法像往常一样通过层次结构禁用 [edit system services] 它。相反,您可以配置防火墙过滤器来拒绝 SSH 访问:
set firewall family inet filter SSH-FILTER term 1 from protocol tcp set firewall family inet filter SSH-FILTER term 1 from port ssh set firewall family inet filter SSH-FILTER term 1 from interface fxp0 set firewall family inet filter SSH-FILTER term 1 then discard set firewall family inet filter SSH-FILTER term 2 then accept
分步程序
请按照以下步骤配置防火墙过滤器以拒绝 SSH 访问:
-
定义过滤器术语 1。此术语拒绝来自 SSH 的 TCP 流量:
[edit] user@R1# set firewall family inet filter SSH-FILTER term 1 from protocol tcp user@R1# set firewall family inet filter SSH-FILTER term 1 from port ssh user@R1# set firewall family inet filter SSH-FILTER term 1 from interface fxp0 user@R1# set firewall family inet filter SSH-FILTER term 1 then discard
-
定义过滤器术语 2。此术语允许过滤器术语 1未拒绝的任何流量:
[edit] user@R1# set firewall family inet filter SSH-FILTER term 2 then accept
有关使用防火墙过滤器禁用 SSH 的更多信息,请参阅 示例:配置过滤器以阻止 Telnet 和 SSH 访问。
telnet 命令
您可以使用 CLI telnet 命令打开到远程设备的 Telnet 会话:
user@host> telnet host <8bit> <bypass-routing> <inet> <interface interface-name> <no-resolve> <port port> <routing-instance routing-instance-name> <source address>
在 SRX100、SRX210、SRX220、SRX240、SRX300、SRX320、SRX340、SRX345 和 SRX1500 设备上,下表所示了最大并发 Telnet 会话数。平台支持取决于设备安装的 Junos OS 版本。
| SRX100 |
SRX210、SRX220 |
SRX240 |
SRX300、SRX320、SRX340 |
SRX345 |
SRX1500 |
|---|---|---|---|---|---|
| 3 |
3 |
5 |
3 |
5 |
5 |
要退出 Telnet 会话并返回到 Telnet 命令提示符,请按 Ctrl-]。
要退出 Telnet 会话并返回到 CLI 命令提示符,请输入 quit。
| 选项 |
描述 |
|---|---|
|
|
使用 8 位数据路径。 |
|
|
绕过路由表,仅对直接连接接口上的主机打开 Telnet 会话。如果主机不在直接连接的接口上,则返回一条错误消息。 |
|
|
打开到指定主机名或 IP 地址的 Telnet 会话。 |
|
|
将 Telnet 会话强制到 IPv4 目标。 |
|
|
在指定接口上打开与主机的 Telnet 会话。如果未包含此选项,将使用所有接口。 |
|
|
抑制显示符号名称。 |
|
|
指定主机上的端口号或服务名称。 |
|
|
对 Telnet 会话使用指定的路由实例。 |
|
|
为 Telnet 会话使用指定的源地址。 |
ssh 命令
您可以使用 CLI ssh 命令使用安全外壳 (SSH) 程序打开与远程设备的连接:
user@host> ssh host <bypass-routing> <inet> <interface interface-name> <routing-instance routing-instance-name> <source address> <v1> <v2>
在 SRX100、SRX210、SRX220、SRX240、SRX300、SRX320、SRX340、SRX345 和 SRX1500 设备上,下表显示了并发 SSH 会话的最大数。平台支持取决于设备安装的 Junos OS 版本。
| SRX100 |
SRX210、SRX220 |
SRX240 |
SRX300、SRX320、SRX340 |
SRX345 |
SRX1500 |
|---|---|---|---|---|---|
| 3 |
3 |
5 |
3 |
5 |
5 |
表 2 介绍 ssh 了命令选项。
| 选项 |
描述 |
|---|---|
|
|
绕过路由表,仅打开与直接连接接口上的主机的 SSH 连接。如果主机不在直接连接的接口上,则返回一条错误消息。 |
|
|
打开到指定主机名或 IP 地址的 SSH 连接。 |
|
|
强制将 SSH 连接到 IPv4 目标。 |
|
|
在指定接口上打开与主机的 SSH 连接。如果未包含此选项,将使用所有接口。 |
|
|
将指定的路由实例用于 SSH 连接。 |
|
|
对 SSH 连接使用指定的源地址。 |
|
|
强制 SSH 使用版本 1 进行连接。 |
|
|
强制 SSH 使用版本 2 进行连接。 |
配置 SSH 已知主机密钥以安全复制数据
安全外壳 (SSH) 使用 加密 算法生成主机、服务器和会话密钥系统,以确保数据传输的安全。您可以将 SSH 主机密钥配置为支持安全复制 (SCP),作为 FTP 的替代方法,用于配置存档和事件日志等数据的后台传输。要为 SCP 配置 SSH 支持,您必须完成以下任务:
-
通过在路由引擎配置层次结构中包含主机名和主机密钥信息来指定 SSH 已知主机。
-
设置 SCP URL 以指定接收数据的主机。设置此属性会自动从 SCP 服务器检索 SSH 主机密钥信息。
-
验证主机密钥是否真实。
-
接受安全连接。接受此连接会自动将主机密钥信息存储在本地主机密钥数据库中。将主机密钥信息存储在配置层次结构中可自动进行安全握手,并允许使用 SCP 进行后台数据传输。
配置 SSH 主机密钥以安全复制数据的任务包括:
配置 SSH 已知主机
要配置 SSH 已知主机,请包含该 host 语句,并在层次结构级别为 [edit security ssh-known-hosts] 受信任的服务器指定主机名和主机密钥选项:
[edit security ssh-known-hosts]
host corporate-archive-server {
dsa-key key;
}
host archive-server-url {
rsa-key key;
}
host server-with-ssh-version-1 {
rsa1-key key;
}
主机密钥为以下类型之一:
-
dsa-key key— 用于 SSH 版本 2 的 Base64 编码数字签名算法 (DSA) 密钥。 -
ecdsa-sha2-nistp256-keykey—Base64 编码的 ECDSA-SHA2-NIST256 密钥。 -
ecdsa-sha2-nistp384-keykey—Base64 编码的 ECDSA-SHA2-NIST384 密钥。 -
ecdsa-sha2-nistp521-keykey—Base64 编码的 ECDSA-SHA2-NIST521 密钥。 -
ed25519-keykey—Base64 编码ED25519密钥。 -
rsa-key key— Base64 编码公钥算法,支持 SSH 版本 1 和 SSH 版本 2 的加密和数字签名。 -
rsa1-key key— Base64 编码的 RSA 公钥算法,支持 SSH 版本 1 的加密和数字签名。
配置对 SCP 文件传输的支持
要将已知主机配置为支持后台 SCP 文件传输,请在层次结构级别包含[edit system archival configuration]该archive-sites语句。
[edit system archival configuration]
archive-sites {
scp://username<:password>@host<:port>/url-path;
}
使用 IPv6 主机地址在 Junos OS 语句中指定 URL 时,必须用引号 (“ ”) 将整个 URL 括起来,并将 IPv6 主机地址括在括号 ([ ]) 中。例如, “scp://username<:password>@[host]<:port>/url-path”;
将语句设置为指向 SCP URL 会 archive-sites 触发自动主机密钥检索。此时, Junos OS 连接到 SCP 主机以获取 SSH 公钥,将主机密钥消息摘要或指纹显示为控制台的输出,并终止与服务器的连接。
user@host# set system archival configuration archive-sites “<scp-url-path>” The authenticity of host <my-archive-server (<server-ip-address>)> can’t be established. RSA key fingerprint is <ascii-text key>. Are you sure you want to continue connecting (yes/no)?
要验证主机密钥是否真实,请将此指纹与您使用可信来源从同一主机获得的指纹进行比较。如果指纹相同,请在提示时输入 yes 以接受主机密钥。然后,主机密钥信息存储在路由引擎配置中,并支持使用 SCP 进行后台数据传输。
更新 SSH 主机密钥信息
通常,当您在层次结构级别使用[edit system]语archival configuration archive-sites句为 SCP 设置 URL 属性时,会自动检索 SSH 主机密钥信息。但是,如果您需要手动更新主机密钥数据库,请使用以下方法之一。
手动检索主机密钥信息
要手动检索 SSH 公共主机密钥信息,请在层次结构级别配置[edit security ssh-known-hosts]该fetch-from-server选项。您必须指定要从中检索 SSH 公钥的主机。
user@host# set security ssh-known-hosts fetch-from-server <hostname>
从文件导入主机密钥信息
要从 known_hosts 文件手动导入 SSH 主机密钥信息,请在层次结构级别添加[edit security ssh-known-hosts]该load-key-file选项。您必须指定要从中导入主机密钥信息的文件路径。
user@host# set security ssh-known-hosts load-key-file /var/tmp/known-hosts
配置 SSH 服务以支持传统加密
您可以将 Junos OS 配置为支持旧有加密密码和密钥交换方法。
设备中缺乏对传统加密技术的支持,会导致 Junos Space 设备发现失败。要解决此问题,请将设备配置为支持3des-cbcblowfish-cbc或密码或两者dh-group1-sha1以及密钥交换方法。此问题不会影响通过升级版 FreeBSD 运行 Junos OS 的设备。
默认情况下,Junos OS 支持以下密码集:
-
chacha20-poly1305@openssh.com -
aes128-ctr -
aes192-ctr -
aes256-ctr -
aes128-gcm@openssh.com -
aes256-gcm@openssh.com
在 Junos OS 中,默认情况下不支持以下密码,但您可以配置设备以支持它们。它们从最安全到最不安全列出:
-
aes256-cbc -
aes192-cbc -
aes128-cbc -
3des-cbc
默认情况下,Junos OS 支持以下一组密钥交换方法:
-
curve25519-sha256 -
ecdh-sha2-nistp256 -
ecdh-sha2-nistp384 -
ecdh-sha2-nistp521 -
group-exchange-sha2 -
dh-group14-sha1
在 Junos OS 中,默认情况下不支持以下密钥交换方法,但您可以将设备配置为支持这些方法:
-
group-exchange-sha1 -
dh-group1-sha1
要配置 SSH 服务以支持传统加密:
通过配置一组有序的密码、密钥交换方法或消息身份验证代码 (MAC),新定义的密码集将应用于服务器和客户端命令。使用安全复制协议 (SCP) 时,对默认值的更改会影响 file copy 命令。
也可以看看
配置出站 SSH 服务
您可以配置运行 Junos OS 的设备,以发起与客户端管理应用的 TCP/IP 连接。如果管理应用未到达瞻博网络设备(例如,该设备用作防火墙)。在这种情况下, outbound-ssh 可以在瞻博网络设备上进行配置。配置将 outbound-ssh 启动从服务器到客户端再到管理应用的反向 SSH 连接。只有在从设备中删除配置后,此出站 SSH 连接才会关闭。
出站 SSH 没有初始化命令。配置并提交出站 SSH 后,设备将开始根据提交的配置发起出站 SSH 连接。设备会反复尝试创建此连接,直到成功。如果设备与客户端管理应用程序之间的连接断开,设备将再次尝试创建新的出站 SSH 连接,直到成功为止。此连接将一直保持,直到从配置中除去出站 SSH 部分。
要为出站 SSH 连接配置设备,请在[edit system services]层次结构级别包含该outbound-ssh语句:
[edit system services outbound-ssh]
以下主题介绍配置出站 SSH 服务的任务。
- 将公共 SSH 主机密钥发送到出站 SSH 客户端
- 为出站 SSH 连接配置激活消息
- 配置新的出站 SSH 连接
- 配置出站 SSH 客户端以接受 NETCONF 作为可用服务
- 配置出站 SSH 客户端
- 为出站 SSH 客户端配置路由实例
将公共 SSH 主机密钥发送到出站 SSH 客户端
每次路由器或交换机建立出站 SSH 连接时,都会先向管理客户端发送一个初始化序列。此序列标识到管理客户端的路由器或交换机。在此传输中是 的值 device-id。
要配置路由器或交换机的设备标识符,请在层次结构级别包含[edit system services outbound-ssh client client-id]该device-id语句:
[edit system services outbound-ssh client client-id] device-id device-id;
未配置时 secret 的启动顺序:
MSG-ID: DEVICE-CONN-INFO\r\n MSG-VER: V1\r\n DEVICE-ID: <device-id>\r\n
在初始化 SSH 连接期间,客户端会使用设备的公共 SSH 主机密钥来验证设备的身份。因此,在客户端启动 SSH 序列之前,客户端需要设备的公共 SSH 密钥。配置该 secret 语句时,设备将将其公共 SSH 密钥作为出站 SSH 连接初始化序列的一部分传递。
设置该 secret 语句且设备建立出站 SSH 连接时,设备将传输其设备 ID、公共 SSH 密钥以及部分源自该 secret 语句的 SHA1 散列。语 secret 句的值在设备和管理客户端之间共享。客户端使用共享密钥对接收的公共 SSH 主机密钥进行身份验证,以确定公共密钥是否来自语句标识的 device-id 设备。
使用 secret 该语句传输公共 SSH 主机密钥是可选的。您可以手动将公钥传输并安装到客户端系统上。
包含该 secret 语句意味着设备每次与客户端建立连接时都会发送其公共 SSH 主机密钥。如果客户端已经拥有该设备的 SSH 密钥,则由客户端决定如何处理该 SSH 主机密钥。建议将客户端的 SSH 主机密钥副本替换为新密钥。主机密钥可能因各种原因而更改。通过在每次建立连接时替换密钥,可以确保客户端具有最新的密钥。
要在设备连接到客户端时发送路由器或交换机的公共 SSH 主机密钥,请在[edit system services outbound-ssh client client-id]层次结构级别包含该secret语句:
[edit system services outbound-ssh client client-id] secret password;
配置属性时 secret ,设备将发送以下消息:
MSG-ID: DEVICE-CONN-INFO\r\n MSG-VER: V1\r\n DEVICE-ID: <device-id>\r\n HOST-KEY: <public-host-key>\r\n HMAC:<HMAC(pub-SSH-host-key, <secret>>)>\r\n
为出站 SSH 连接配置激活消息
客户端应用拥有路由器或交换机的公共 SSH 主机密钥后,即可启动 SSH 序列,就像创建了 TCP/IP 连接一样。然后,客户端可以使用其路由器或交换机的公共主机 SSH 密钥副本来对设备进行身份验证,作为该序列的一部分。设备通过 Junos OS 支持的机制(RSA/DSA 公共字符串或密码身份验证)对客户端用户进行身份验证。
要使设备能够向客户端应用程序发送 SSH 协议激活消息,请在层次结构级别配置[edit system services outbound-ssh client client-id]该keep-alive语句:
[edit system services outbound-ssh client client-id]
keep-alive {
retry number;
timeout seconds;
}
配置新的出站 SSH 连接
断开连接后,设备将开始发起新的出站 SSH 连接。要指定设备在连接断开后如何重新连接到服务器,请在层次结构级别包含该 reconnect-strategy 语句 [edit system services outbound-ssh client client-id] :
[edit system services outbound-ssh client-id] reconnect-strategy (sticky | in-order);
您还可以指定重试尝试次数,并设置重新连接尝试停止之前的时间量。请参阅 为出站 SSH 连接配置激活消息。
配置出站 SSH 客户端以接受 NETCONF 作为可用服务
要将应用程序配置为接受 NETCONF 作为可用服务,请在[edit system services outbound-ssh client client-id]层次结构级别包含以下services netconf语句:
[edit system services outbound-ssh client client-id]
services {
netconf;
}
配置出站 SSH 客户端
要配置可用于此出站 SSH 连接的客户端,请在层次结构级别列出 [edit system services outbound-ssh client client-id] 每个客户端并使用单独的地址语句:
[edit system services outbound-ssh client client-id]
address address {
retry number;
timeout seconds;
port port-number;
}
出站 SSH 连接支持 IPv4 和 IPv6 地址格式。
为出站 SSH 客户端配置路由实例
要使用管理路由实例,请先使用命令set system management-instance启用mgmt_junos路由实例。
要使用任何其他路由实例,请先在层次结构中 [edit routing-instances] 配置路由实例。
如果未指定路由实例,设备将使用默认路由表建立出站 SSH 连接。
在指定的 TCP 端口上配置 NETCONF-over-SSH 连接
借助 Junos OS,您可以在不配置防火墙的情况下,将传入的 NETCONF 连接限制到指定的 TCP 端口。要配置用于 NETCONF-over-SSH 连接的 TCP 端口,请在层次结构级别包含[edit system services netconf ssh]该port语句。配置的端口仅接受 NETCONF-over-SSH 会话。对此端口的常规 SSH 会话请求将被拒绝。
您可以按照 RFC 4742, 使用安全外壳上的 NETCONF 配置协议 (SSH) 中所述,为通过 SSH 的 NETCONF 连接配置默认端口 830,也可以配置 1 到 65535 之间的任意端口。
-
即使配置了 NETCONF 服务器端口,默认 SSH 端口 (22) 也会继续接受 NETCONF 会话。要禁用 SSH 端口接受 NETCONF 会话,请在登录事件脚本中指定此设置。
-
不建议将 FTP (21) 和 Telnet (23) 服务的默认端口配置为配置 NETCONF-over-SSH 连接。
为 Telnet 和 SSH 访问配置密码重试限制
为防止暴力攻击和字典攻击,设备默认对 Telnet 或 SSH 会话执行以下操作:
-
在最多连续尝试 10 次密码后断开会话连接。
-
第二次密码重试后,后续密码重试之间会延迟 5 秒的倍数。
例如,设备在第三次和第四次密码重试之间引入 5 秒的延迟,在第四次和第五次密码重试之间引入 10 秒的延迟,依此类推。
-
强制执行最短 20 秒的会话时间,在此期间不能断开会话连接。配置最短会话时间可防止恶意用户在密码重试延迟生效之前断开会话连接。配置最短会话时间还可以防止他们尝试多次登录的暴力攻击和字典攻击。
您可以为 Telnet 和 SSH 访问配置密码重试限制。在此示例中,您将设备配置为对 Telnet 和 SSH 会话执行以下操作:
-
在断开会话连接之前,最多允许密码连续重试四次。
-
在第二次密码重试之后,在密码重试之间引入以 5 秒倍为单位的延迟。
-
强制执行最短会话时间为 40 秒,在此期间不能断开会话连接。
要为 Telnet 和 SSH 访问配置密码重试限制:
示例:配置过滤器以阻止 Telnet 和 SSH 访问
要求
您需要两台通过共享网络链路运行 Junos OS 的设备。配置此示例之前,不需要除基本设备初始化(管理接口、远程访问、用户登录帐户等)之外的特殊配置。虽然不是严格要求,但建议对 R2 设备进行控制台访问。
我们的内容测试团队已验证并更新了此示例。
概述和拓扑
在此示例中,您将创建一个 IPv4 无状态防火墙过滤器,用于记录并拒绝发送至本地路由引擎的 Telnet 或 SSH 数据包,除非数据包源自 192.168.1.0/30 子网。过滤器应用于环路接口,以确保仅发往本地设备的流量受到影响。在输入方向上应用滤波器。不使用输出滤波器。因此,允许所有本地生成的流量。
-
要匹配来自特定子网或 IP 前缀的数据包,请使用在输入方向上应用的
source-addressIPv4 匹配条件。 -
要匹配发往 Telnet 端口和 SSH 端口的数据包,请将
protocol tcp匹配条件与port telnet在输入方向上应用的 a 和port sshIPv4 匹配条件结合使用。
示例拓扑
图 1 显示了此示例的测试拓扑。防火墙过滤器将应用于 R2 设备,使其成为被测设备 (DUT)。R1 和 R2 设备共享一个链路,该链路分配了 192.168.1.0/30 的子网。两台设备均使用 /32 子网掩码从 192.168.255.0/30 前缀分配的环路地址。静态路由提供环路地址之间的可访问性,因为此基本示例中未配置内部网关协议。
配置
下面的示例要求您在各个配置层级中进行导航。有关导航 CLI 的信息,请参阅在 配置模式下使用 CLI 编辑器。
根据设计,示例过滤器会限制 Telnet 和 SSH 对 R2 的访问,除非它源自 R1 上的共享子网。如果使用 SSH 或 Telnet 直接访问 R2 设备,则在应用过滤器时将断开连接。配置此示例时,建议您具有控制台访问权限。如果需要,您可以将 R1 设备用作跳转主机,以在应用过滤器后启动到 R2 的 SSH 会话。或者,请考虑修改示例过滤器,以允许分配给用于访问 R2 设备的计算机的 IP 子网。
执行以下任务以配置此示例:
CLI 快速配置
R1 设备的快速配置
要快速配置 R1 设备,请根据需要编辑以下命令并将其粘贴到层次结构级别的 [edit] CLI 中。请务必在配置模式下发出 以 commit激活更改。
set system host-name R1 set system services ssh root-login allow set interfaces ge-0/0/0 description "Link from R1 to R2" set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/30 set interfaces lo0 unit 0 family inet address 192.168.255.1/32 set routing-options static route 192.168.255.2/32 next-hop 192.168.1.2
R2 设备的快速配置
要快速配置 R2 设备,请根据需要编辑以下命令,并将其粘贴到层次结构级别的 [edit] CLI 中。请务必在配置模式下发出 以 commit 激活更改。
在进行可能影响远程访问设备的更改时,请考虑使用 commit-confirmed 。 正在激活 Junos OS 配置,但需要确认
set system host-name R2 set system services ssh root-login allow set system services telnet set interfaces ge-0/0/0 description "Link from R2 to R1" set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.2/30 set interfaces lo0 unit 0 family inet filter input local_acl set interfaces lo0 unit 0 family inet address 192.168.255.2/32 set firewall family inet filter local_acl term terminal_access from source-address 192.168.1.0/30 set firewall family inet filter local_acl term terminal_access from protocol tcp set firewall family inet filter local_acl term terminal_access from port ssh set firewall family inet filter local_acl term terminal_access from port telnet set firewall family inet filter local_acl term terminal_access then accept set firewall family inet filter local_acl term terminal_access_denied from protocol tcp set firewall family inet filter local_acl term terminal_access_denied from port ssh set firewall family inet filter local_acl term terminal_access_denied from port telnet set firewall family inet filter local_acl term terminal_access_denied then log set firewall family inet filter local_acl term terminal_access_denied then reject set firewall family inet filter local_acl term tcp-estab from protocol tcp set firewall family inet filter local_acl term tcp-estab from tcp-established set firewall family inet filter local_acl term tcp-estab then accept set firewall family inet filter local_acl term default-term then accept set routing-options static route 192.168.255.1/32 next-hop 192.168.1.1
配置 R1 设备
分步程序
请按照以下步骤配置 R1 设备:
-
配置接口:
[edit] user@R1# set interfaces ge-0/0/0 description "Link from R1 to R2" user@R1# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/30 user@R1# set interfaces lo0 unit 0 family inet address 192.168.255.1/32
-
将主机名和静态路由配置为 R2 设备的环路地址。您还可以配置 Telnet 和 SSH 访问:
[edit] user@R1# set system host-name R1 user@R1# set system services ssh root-login allow user@R1# set system services telnet user@R1# set routing-options static route 192.168.255.2/32 next-hop 192.168.1.2
验证并提交 R1 设备上的配置
分步程序
完成以下步骤,在 R1 设备上验证并提交候选配置:
-
使用配置模式命令确认
show interfaces接口配置。如果命令输出未显示预期的配置,请重复此示例中的说明以更正配置。[edit] user@R1# show interfaces ge-0/0/0 { description "Link from R1 to R2"; unit 0 { family inet { address 192.168.1.1/30; } } } lo0 { unit 0 { family inet { address 192.168.255.1/32; } } } -
验证用于到达 R2 设备环路地址的静态路由,以及是否已启用 SSH 和 Telnet 访问。使用 和
show routing-optionsshow system services配置模式命令。如果命令输出未显示预期的配置,请重复此示例中的说明以更正配置。[edit] user@R1# show routing-options static { route 192.168.255.2/32 next-hop 192.168.1.2; } user@R1# show system services ssh { root-login allow; } telnet; -
对 R1 设备上的配置感到满意时,提交候选配置。
[edit] user@R1# commit
配置 R2 设备
分步程序
完成以下步骤以配置 R2 设备。首先,您可以定义选择性地阻止 Telnet 和 SSH 访问的无状态防火墙过滤器:
-
将自己定位在层
edit firewall family inet filterlocal_acl 次结构中:[edit] user@R2# edit firewall family inet filter local_acl
-
定义过滤器术语 terminal_access。此术语允许来自指定源前缀的 Telnet 和 SSH:
[edit firewall family inet filter local_acl] user@R2# set term terminal_access from source-address 192.168.1.0/30 user@R2# set term terminal_access from protocol tcp user@R2# set term terminal_access from port ssh user@R2# set term terminal_access from port telnet user@R2# set term terminal_access then accept
-
定义过滤器术语 terminal_access_denied。此术语拒绝来自 所有其他 源地址的 SSH 和 Telnet。此术语配置为记录与术语的匹配项,并生成对数据包源的显式互联网控制消息协议 (ICMP) 目标不可达响应。有关过滤器日志记录选项的详细信息,请参阅 防火墙过滤器日志记录操作 。
提示:您可以使用该
discard操作来抑制将 ICMP 错误消息生成回源。有关详细信息,请参阅 防火墙过滤器终止操作 。[edit firewall family inet filter local_acl] user@R2# set term terminal_access_denied from protocol tcp user@R2# set term terminal_access_denied from port ssh user@R2# set term terminal_access_denied from port telnet user@R2# set term terminal_access_denied then log user@R2# set term terminal_access_denied then reject user@R2# set term default-term then accept
- 可选。
定义过滤器术语 tcp-estab。此术语允许出站访问互联网以支持与瞻博网络 Mist 云的连接(tcp-established 是位字段匹配条件, tcp-flags "(ack | rst)"表示已建立的 TCP 会话,但不是 TCP 连接的第一个数据包):
[edit firewall family inet filter local_acl] user@R2# set term tcp-estab from protocol tcp user@R2# set term tcp-estab from tcp-established user@R2# set term tcp-estab then accept
-
定义过滤器术语 default-term。此术语接受所有其他流量。回想一下, Junos OS 无状态过滤器末尾有一个隐式 拒绝 术语。通过 default-term 使用显式 接受 操作终止过滤器来覆盖此行为。过滤器终止将导致文件管理器接受所有其他流量。
注意:在本例中,我们允许所有其他流量,但对于您的网络,您可能需要保护路由引擎。更多信息,请参阅 保护路由引擎 。
[edit firewall family inet filter local_acl] user@R2# set term default-term then accept
-
配置环路接口,并在输入方向上应用过滤器:
[edit] user@R2# set interfaces lo0 unit 0 family inet filter input local_acl user@R2# set interfaces lo0 unit 0 family inet address 192.168.255.2/32
-
配置主机名、ge-0/0/0 接口、到 R1 设备环路地址的静态路由,并通过 SSH 和 Telnet 启用远程访问:
[edit] user@R2# set system host-name R2 user@R2# set system services ssh root-login allow user@R2# set system services telnet user@R2# set interfaces ge-0/0/0 description "Link from R2 to R1" user@R2# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.2/30 user@R2# set routing-options static route 192.168.255.1/32 next-hop 192.168.1.1
验证并提交设备 R2 上的配置
分步程序
完成以下步骤,在 R2 设备上验证并提交候选配置:
-
使用
show firewall配置模式命令确认无状态防火墙过滤器的配置。如果命令输出未显示预期的配置,请重复此示例中的说明以更正配置。[edit] user@R2# show firewall family inet { filter local_acl { term terminal_access { from { source-address { 192.168.1.0/30; } protocol tcp; port [ssh telnet]; } then accept; } term terminal_access_denied { from { protocol tcp; port [ssh telnet]; } then { log; reject; } } term default-term { then accept; } } } -
使用配置模式命令确认
show interfaces接口配置和过滤应用。如果命令输出未显示预期的配置,请重复此示例中的说明以更正配置。[edit] user@R2# show interfaces ge-0/0/0 { description "Link from R2 to R1"; unit 0 { family inet { address 192.168.1.2/30; } } } lo0 { unit 0 { family inet { filter { input local_acl; } address 192.168.255.2/32; } } } -
验证用于到达 R1 设备环路地址的静态路由,并验证是否已启用 Telnet 和 SSH 访问。使用 和
show routing-optionsshow system services配置模式命令。如果命令输出未显示预期的配置,请重复此示例中的说明以更正配置。[edit] user@R2# show routing-options static { route 192.168.255.1/32 next-hop 192.168.1.1; } user@R2# show system services ssh { root-login allow; } telnet; -
如果对 R2 设备上的配置感到满意,请提交候选配置。
提示:在进行可能影响远程访问设备的更改时,请考虑使用
commit-confirmed。[edit] user@R2# commit
验证无状态防火墙过滤器
确认用于限制 Telnet 和 SSH 访问的防火墙过滤器工作正常。
验证接受的数据包
目的
验证当流量源自 192.168.1.0/30 子网时,防火墙过滤器是否正确允许 SSH 和 Telnet。
行动
-
清除路由器或交换机上的防火墙日志。
user@R2> clear firewall log
-
在 192.168.1.0/30 子网 中 IP 地址的主机上,使用命令
ssh 192.168.255.2验证是否可以从允许的源地址使用 SSH 登录设备。应接受此数据包,但不应将此数据包的数据包标头信息记录在数据包转发引擎的防火墙过滤器日志缓冲区中。如果这是这些设备之间的第一次 SSH 登录 user ,系统将提示您保存 SSH 主机密钥。注意:默认情况下,R1 设备将从用于到达目标的出口接口获取 SSH 流量。因此,此流量源自分配给 R1 设备 ge-0/0/0 接口的 192.168.1.1 地址。
user@R1>ssh 192.168.255.2 Password: Last login: Wed Aug 19 09:23:58 2020 from 192.168.1.1 --- JUNOS 20.2R1.10 Kernel 64-bit JNPR-11.0-20200608.0016468_buil user@R2>
-
注销 R2 设备上的 CLI 以关闭 SSH 会话。
user@R2> exit logout Connection to 192.168.255.2 closed. user@R1>
-
在 192.168.1.0/30 子网 中 IP 地址的主机上,使用命令
telnet 192.168.255.2验证是否可以从允许的源地址使用 Telnet 登录到路由器或交换机。应接受此数据包,但不应将此数据包的数据包标头信息记录在数据包转发引擎的防火墙过滤器日志缓冲区中。user@host-A> telnet 192.168.255.2 Trying 192.168.255.2... Connected to 192.168.255.2. Escape character is '^]'. login: user Password: --- JUNOS 20.2R1.10 Kernel 64-bit JNPR-11.0-20200608.0016468_buil user@R2>
-
注销 CLI 以关闭与 R2 设备的 Telnet 会话。
user@R2:~ # exit Connection closed by foreign host. root@R1>
-
使用此
show firewall log命令验证 R2 设备数据包转发引擎 (PFE ) 上的 防火墙日志缓冲区是否不包含源地址位于 192.168.1.0/30 子网中的任何条目。user@R2> show firewall log
验证已记录和被拒绝的数据包
目的
验证防火墙过滤器是否正确拒绝 并非 源自 192.168.1.0/30 子网的 SSH 和 Telnet 流量。
行动
-
清除路由器或交换机上的防火墙日志。
user@R2> clear firewall log
-
生成源自 R1 设备环路地址的 SSH 流量。此流量的源地址位于允许的 192.168.1.0/30 子网 之外 。使用此
ssh 192.168.255.2 source 192.168.255.1命令验证您是否 无法 使用此源地址使用 SSH 登录到设备。应拒绝此数据包,并将数据包标头信息记录在防火墙过滤器日志缓冲区中。user@R1 ssh 192.168.255.2 source 192.168.255.1 ssh: connect to host 192.168.255.2 port 22: Connection refused root@R1>
输出显示 SSH 连接被拒绝。此输出确认过滤器正在生成 ICMP 错误消息,以及当从不允许的源地址发送时,过滤器是否正确阻止了 SSH 流量。
-
生成源自 R1 设备环路地址的 Telnet 流量。此流量的源地址位于允许的 192.168.1.0/30 子网 之外 。使用此
telnet 192.168.255.2 source 192.168.255.1命令验证您 是否无法 使用此源地址使用 Telnet 登录设备。此数据包应被拒绝,并且此数据包的数据包标头信息应记录在 PFE 的防火墙过滤器日志缓冲区中。user@R1> telnet 192.168.255.2 source 192.168.255.1 Trying 192.168.255.2... telnet: connect to address 192.168.255.2: Connection refused telnet: Unable to connect to remote host
输出显示 Telnet 连接被拒绝。此输出确认过滤器正在生成 ICMP 错误消息,以及当从不允许的源地址发送时,是否会正确阻止 Telnet 流量。
-
使用该
show firewall log命令验证 R2 设备上的防火墙日志缓冲区是否包含显示源地址为 192.168.255.1 的数据包被拒绝的条目。user@R2> show firewall log Log : Time Filter Action Interface Protocol Src Addr Dest Addr 15:17:11 pfe R ge-0/0/0.0 TCP 192.168.255.1 192.168.255.2 15:12:04 pfe R ge-0/0/0.0 TCP 192.168.255.1 192.168.255.2
输出确认来自 192.168.255.1 源地址的流量与过滤器的 terminal_access_denied 期限匹配。该
Action列显示 ,R表示这些数据包已被拒绝。还会列出接口、传输协议以及源地址和目标地址。这些结果证实,在此示例中,防火墙过滤器工作正常。
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。
edit system services ssh] 层级的和
no-password-authentication
no-challenge-response选项禁用 SSH 登录密码或质询-响应身份验证。
[edit system services ssh]该语句
sftp-server来全局启用传入 SFTP 连接
ssh-dss
ssh-dsa将弃用 和 hostkey 算法,而不是立即删除,以提供向后兼容性并让您的配置符合新配置。
[edit system services outbound-ssh]以下
routing-instance语句来指定需要在其上建立出站 SSH 连接的路由实例的名称: