远程访问概述
您(网络管理员)可以使用 DHCP、Finger、FTP、rlogin、SSH 和 Telnet 服务等服务远程访问路由器、交换机或安全设备。本主题介绍如何使用 Telnet、SSH、FTP 和 Finger 服务配置远程访问。
系统服务概述
出于安全原因,默认情况下禁用对路由器的远程访问。您必须显式配置路由器,以便远程系统上的用户可以访问它。用户可以通过 DHCP、finger、FTP、rlogin、SSH 和 Telnet 服务从远程系统访问路由器。此外,Junos XML 协议客户端应用程序可以使用安全套接字层 (SSL) 或特定于 Junos XML 协议的明文服务等服务。
若要保护系统资源,可以限制服务接受的同时连接数和单个用户拥有的进程数。如果超出任一限制,连接尝试将失败。
配置 Telnet 服务以远程访问路由器或交换机
要将路由器或交换机配置为接受 Telnet 作为接入服务,请在层次结构级别包含 telnet
以下语句 [edit system services]
:
[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 远程登录会话连接尝试和每分钟 10 次 IPv4 telnet 会话连接尝试。
不能在运行 Junos-FIPS 软件的设备上包含该 telnet
语句。我们建议您不要在通用标准环境中使用 Telnet。
配置 FTP 服务以远程访问路由器或交换机
要将设备配置为接受 FTP 作为接入服务,请在层次结构级别包含 ftp
语句 [edit system services]
:
[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。ftp
在[edit system services]
层次结构级别包含语句以使用主动 FTP 或被动 FTP。
要启动被动 FTP 会话,请使用pasvftp
标准 FTP 格式 (ftp://destination而不是 ftp
)。例如:
request system software add pasvftp://name.com/jinstall.tgz
不能在运行 Junos-FIPS 软件的路由器或交换机上包含该 ftp
语句。我们建议您不要在通用标准环境中使用 FTP 服务。
配置 Finger 服务以远程访问路由器
要将路由器配置为接受 finger 作为接入服务,请在层次结构级别包含 finger
以下语句 [edit system services]
:
[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
语句。我们建议您不要在通用标准环境中使用 finger 服务。
配置 SSH 服务以远程访问路由器或交换机
要将路由器或交换机配置为接受 SSH 作为接入服务,请在层次结构级别包含 ssh
以下语句 [edit system services]
:
[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 版开始,您可以在 [] 层次结构级别使用 and no-challenge-response
edit system services ssh
选项禁用 no-password-authentication
SSH 登录密码或质询-响应身份验证。
默认情况下,用户可以通过 CLI 会话创建到 SSH 运行 Junos OS 的路由器的 SSH 隧道。这种类型的隧道可用于转发 TCP 流量,绕过任何防火墙过滤器或访问控制列表。通过绕过防火墙过滤器或访问控制列表,这种类型的隧道允许访问路由器以外的资源。使用该 no-tcp-forwarding
选项可防止用户通过 SSH 创建到路由器的 SSH 隧道。
有关其他配置设置的信息,请参阅以下主题:
通过 SSH 配置 root 登录
默认情况下,当身份验证方法不需要密码时,允许用户通过 SSH 登录到路由器或交换机 root
。要通过 SSH 控制用户访问,请在层次结构级别包含 root-login
语句 [edit systems services ssh]
:
[edit system services ssh] root-login (allow | deny | deny-password);
allow
— 允许用户通过 SSH 以 root 用户身份登录到路由器或交换机。
deny
— 禁止用户通过 SSH 以 root 身份登录到路由器或交换机。
deny
-—password
当身份验证方法(例如 RSA)不需要密码时,允许用户通过 SSH 以 root 身份登录到路由器或交换机。
默认值为 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。
要将路由器或交换机配置为使用 SSH 协议版本 2,请包含protocol-version
语句并在层次结构级别指定v2
[edit system services ssh]
:
[edit system services ssh] protocol-version [ v2 ];
FIPS 模式下的系统始终使用 SSH 协议版本 v2
。
配置客户端活动机制
当客户端或服务器依赖于了解连接何时变为非活动状态时,客户端活动机制很有价值。它不同于标准的激活机制,因为客户端激活消息是通过加密通道发送的。默认情况下不启用客户端活动机制。要启用它,请配置 and client-alive-count-max
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 可信用户证书颁发机构 (CA) 密钥文件:
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]
— 在 上/etc/ssh/sshd_config配置文件,TrustedUserCAKey
其中包含 SSH 证书的公钥。 -
[system services ssh host-certificate-file filename]
— 在 处/etc/ssh/sshd_config配置文件,HostCertificate
其中包含已签名的主机证书。 -
[system services ssh authorized-principals-file filename]
- 在 处/var/etc配置文件AuthorizedPrincipals
,其中包含一个名称列表,其中一个名称必须出现在证书中才能接受其进行身份验证。 -
[system services ssh authorized-principals-command program-path]
- 指定要用于生成在文件中找到AuthorizedPrincipals
的允许的证书主体列表的程序。
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 |
SRX210SRX220 |
SRX240 |
SRX300:SRX320:SRX340: |
SRX345: |
SRX1500 |
---|---|---|---|---|---|
3 |
3 |
5 |
3 |
5 |
5 |
要退出 Telnet 会话并返回到 Telnet 命令提示符,请按 Ctrl-]。
要退出 Telnet 会话并返回到 CLI 命令提示符,请输入 quit
。
选项 |
Description |
---|---|
|
使用 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 |
SRX210SRX220 |
SRX240 |
SRX300:SRX320:SRX340: |
SRX345: |
SRX1500 |
---|---|---|---|---|---|
3 |
3 |
5 |
3 |
5 |
5 |
表 2ssh
介绍了命令选项。
选项 |
Description |
---|---|
|
绕过路由表,仅打开与直接连接接口上的主机的 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-key
key- Base64 编码的 ECDSA-SHA2-NIST256 密钥。 -
ecdsa-sha2-nistp384-key
key- Base64 编码的 ECDSA-SHA2-NIST384 密钥。 -
ecdsa-sha2-nistp521-key
key- Base64 编码的 ECDSA-SHA2-NIST521 密钥。 -
ed25519-key
key- ED25519密钥进行 Base64 编码。 -
rsa-key key
- Base64 编码公钥算法,支持 SSH 版本 1 和 SSH 版本 2 的加密和数字签名。 -
rsa1-key key
- Base64 编码的 RSA 公钥算法,支持 SSH 版本 1 的加密和数字签名。
配置对 SCP 文件传输的支持
要将已知主机配置为支持后台 SCP 文件传输,请在层次结构级别包含archive-sites
[edit system archival configuration]
该语句。
[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”;
将 archive-sites
语句设置为指向 SCP URL 会触发自动主机密钥检索。此时, 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 公共主机密钥信息,请在层次结构级别配置该 fetch-from-server
选项 [edit security ssh-known-hosts]
。您必须指定要从中检索 SSH 公钥的主机。
user@host# set security ssh-known-hosts fetch-from-server <hostname>
从文件导入主机密钥信息
要从文件手动 known_hosts 导入 SSH 主机密钥信息,请在层次结构级别包含该 load-key-file
选项 [edit security ssh-known-hosts]
。必须指定要从中导入主机密钥信息的文件的路径。
user@host# set security ssh-known-hosts load-key-file /var/tmp/known-hosts
配置 SSH 服务以支持旧版加密
中的 Junos OS SSH 服务器基于 OpenSSH 7,默认使用一组更安全的密码和密钥交换算法。OpenSSH 7省略了一些遗留的加密技术。
缺少对设备中传统加密的支持会导致 Junos Space 设备发现失败。若要变通解决此问题,请将设备配置为支持 3des-cbc
或 blowfish-cbc
密码和/或密钥 dh-group1-sha1
交换方法。此问题不会影响通过升级版 FreeBSD 运行 Junos OS 的设备。
有关这些扩展的更多信息,请参阅 https://www.openssh.com/ 中的 OpenSSH 7 文档。
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 连接配置设备,请在层次结构级别包含 outbound-ssh
语句 [edit system services]
:
[edit system services outbound-ssh
]
以下主题介绍配置出站 SSH 服务的任务。
- 将公共 SSH 主机密钥发送到出站 SSH 客户端
- 为出站 SSH 连接配置激活消息
- 配置新的出站 SSH 连接
- 将出站 SSH 客户端配置为接受 NETCONF 作为可用服务
- 配置出站 SSH 客户端
- 为出站 SSH 客户端配置路由实例
将公共 SSH 主机密钥发送到出站 SSH 客户端
路由器或交换机每次建立出站 SSH 连接时,都会首先向管理客户端发送一个启动序列。此序列标识管理客户端的路由器或交换机。在此传输中是 的值 device-id。
要配置路由器或交换机的设备标识符,请在层次结构级别包含 device-id
以下语句 [edit system services outbound-ssh client client-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 主机密钥,请在层次结构级别包含 secret
以下语句 [edit system services outbound-ssh client client-id]
:
[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 密钥副本(作为该序列的一部分)对设备进行身份验证。设备通过 (RSA/DSA 公共字符串或密码身份验证) 中 Junos OS 支持的机制对客户端用户进行身份验证。
要使设备能够向客户端应用程序发送 SSH 协议激活消息,请在层次结构级别配置 keep-alive
语句 [edit system services outbound-ssh client client-id]
:
[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 作为可用服务,请在层次结构级别包含 services netconf
语句 [edit system services outbound-ssh client client-id]
:
[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 客户端配置路由实例
要使用管理路由实例,请先使用命令启用mgmt_junos
set system management-instance
路由实例。
要使用任何其他路由实例,请先在层次结构中 [edit routing-instances]
配置路由实例。
如果未指定路由实例,设备将使用默认路由表建立出站 SSH 连接。
在指定的 TCP 端口上配置 NETCONF-over-SSH 连接
Junos OS 允许您在不配置防火墙的情况下将传入的 NETCONF 连接限制为指定的 TCP 端口。要配置用于 NETCONF-over-SSH 连接的 TCP 端口,请在层次结构级别包含 port
该语句 [edit system services netconf ssh]
。配置的端口仅接受 NETCONF-over-SSH 会话。此端口的常规 SSH 会话请求将被拒绝。
您可以按照 RFC 4742 中使用安全 外壳上的 NETCONF 配置协议 (SSH) 中指定的默认端口 SSH 进行 NETCONF 连接,也可以配置 1 到 65535 之间的任何端口。
-
默认 SSH 端口 (22) 继续接受 NETCONF 会话,即使配置了 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-address
在输入方向上应用的 IPv4 匹配条件。 -
要匹配发往 Telnet 端口和 SSH 端口的数据包,请将
protocol tcp
匹配条件与在输入方向上应用的 aport telnet
和port ssh
IPv4 匹配条件结合使用。
示例拓扑
图 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 设备,请 根据需要编辑以下命令,并将其粘贴到层次结构级别的 CLI [edit]
中。请务必发出配置 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 设备, 请根据需要编辑以下命令,并将其粘贴到层次结构级别的 CLI [edit]
中。请务必发出配置 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 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 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 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-options
使用和show 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 filter
local_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-options
使用和show 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
指示这些数据包被拒绝。还会列出接口、传输协议以及 源地址和目标地址。这些结果证实,对于此示例,防火墙过滤器工作正常。
变更历史表
是否支持某项功能取决于您使用的平台和版本。 使用 Feature Explorer 查看您使用的平台是否支持某项功能。
no-challenge-response
edit system services ssh
选项禁用 no-password-authentication
SSH 登录密码或质询-响应身份验证。[edit system services ssh]
语句sftp-server
来全局启用传入 SFTP 连接ssh-dss
将弃用 and ssh-dsa
hostkey 算法(而不是立即删除),以提供向后兼容性,并有机会使您的配置符合新配置。routing-instance
语句 [edit system services outbound-ssh]
来指定需要建立出站 SSH 连接的路由实例的名称: