本页内容
示例:配置过滤器以阻止 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表示这些数据包已被拒绝。还会列出接口、传输协议以及源地址和目标地址。这些结果证实,在此示例中,防火墙过滤器工作正常。