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