示例:控制瞻博网络设备上的管理访问
我们的内容测试团队已验证并更新了此示例。
此示例说明如何根据一组特定的允许 IP 地址来限制管理对瞻博网络设备的访问。这种类型的功能通常称为访问控制列表 (ACL),并在 Junos OS 中作为无状态防火墙过滤器实施。
要求
连接到管理网络的瞻博网络设备。为了帮助验证配置,应至少有一台有权访问管理网络的其他设备,以启动与被测设备 (DUT) 的 SSH 或 Telnet 连接。配置此示例之前,不需要除基本设备初始化(管理接口和相关静态路由、系统服务、用户登录帐户等)之外的特殊配置。
概述
您可以配置防火墙过滤器来限制可以管理设备的 IP 地址。此防火墙过滤器必须包含一个术语来拒绝除允许管理设备的 IP 地址之外的所有流量。您必须将防火墙过滤器应用于环路接口 (lo0),以确保仅过滤管理流量,即发送至设备本身的流量。
示例拓扑
图 1 显示了此示例的拓扑结构。R1 设备用作分配了 172.16.0.0/24 子网的管理网络的默认网关。您应用限制对 R2 设备的管理访问的过滤器,在此示例中将其设为 DUT。远程工作站有权管理 DUT,并已分配 10.0.0.1/32 地址。
在此示例中,您:
配置一个名为 manager-ip的前缀列表。此列表定义允许用于管理设备的 IP 地址集。在此示例中,列表包括管理子网本身 (172.16.0.0/24) 和授权远程用户的 IP 地址 (10.0.0.1/32)。
配置防火墙过滤器limit-mgmt-access,用于拒绝除前缀列表中定义manager-ip的特定地址集之外的所有源地址。这可以确保只有前缀列表中列出的 IP 地址才能管理设备。
将过滤器应用于 limit-mgmt-access 环路接口。每当向本地设备寻址的数据包到达任何接口时,环路接口都会应用过滤器 limit-mgmt-access ,以将管理访问限制为仅允许的地址。
示例
配置 IP 地址列表以限制管理对设备的访问
过程
CLI 快速配置
要快速配置此示例,请根据需要编辑以下命令,并将其粘贴到层次结构级别的 [edit] R2 设备 CLI 中。为完整起见,该配置包括用于配置 SSH(对于非用户)和 Telnet 系统服务的命令。它还提供管理接口和相关静态路由的配置。如果您的设备已配置此功能,则不需要这些命令。
Telnet 不支持在瞻博网络设备上进行 root 登录。此示例中未配置 root 用户的 SSH 登录。您的设备应具有配置为允许远程登录的非 root 用户。或者,您可以在语句中system services ssh添加root-login allow参数以允许 root 用户使用 SSH 登录。
请务必从配置模式发出以 commit 激活更改。
应用限制访问设备的过滤器时,请考虑使用 commit confirmed。如果您无法在指定时间内发出另一个提交,此选项会自动回滚配置。
set system services ssh set system services telnet set interfaces fxp0 unit 0 family inet address 172.16.0.253/24 set interfaces lo0 unit 0 family inet address 192.168.255.2/32 set routing-options static route 0.0.0.0/0 next-hop 172.16.0.254 no-readvertise set policy-options prefix-list manager-ip 172.16.0.0/24 set policy-options prefix-list manager-ip 10.0.0.1/32 set firewall filter limit-mgmt-access term block_non_manager from source-address 0.0.0.0/0 set firewall filter limit-mgmt-access term block_non_manager from source-prefix-list manager-ip except set firewall filter limit-mgmt-access term block_non_manager from protocol tcp set firewall filter limit-mgmt-access term block_non_manager from destination-port ssh set firewall filter limit-mgmt-access term block_non_manager from destination-port telnet set firewall filter limit-mgmt-access term block_non_manager then log set firewall filter limit-mgmt-access term block_non_manager then discard set firewall filter limit-mgmt-access term accept_everything_else then accept set interfaces lo0 unit 0 family inet filter input limit-mgmt-access
分步程序
以下步骤要求您在各个配置层级中进行导航。有关如何执行此操作的说明,请参阅《CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
配置管理和环路接口,并确保启用 Telnet 和 SSH 系统服务。
[edit] user@R2# set interfaces fxp0 unit 0 family inet address 172.16.0.253/24 user@R2# set interfaces lo0 unit 0 family inet address 192.168.255.2/32 user@R2# set routing-options static route 0.0.0.0/0 next-hop 172.16.0.254 no-readvertise user@R2# set system services ssh user@R2# set system services telnet
在前缀列表中定义允许的主机地址集。此列表包括管理子网和单个授权远程管理站的前缀。
[edit policy-options] user@R2# set prefix-list manager-ip 172.16.0.0/24 user@R2# set prefix-list manager-ip 10.0.0.1/32
前缀列表在防火墙过滤器中引用。使用前缀列表可以轻松更新允许访问设备的地址。这是因为只需要更新前缀列表。添加或删除允许的前缀时,无需对防火墙过滤器本身进行编辑。
配置防火墙过滤器以拒绝来自所有 IP 地址(前缀列表中定义的地址 除外 )的 Telnet 和 SSH 流量。
[edit firewall filter limit-mgmt-access] user@R2# set term block_non_manager from source-address 0.0.0.0/0 user@R2# set term block_non_manager from source-prefix-list manager-ip except user@R2# set term block_non_manager from protocol tcp user@R2# set term block_non_manager from destination-port ssh user@R2# set term block_non_manager from destination-port telnet user@R2# set term block_non_manager then discard
请注意动作修饰符的
except用法。第一个术语与所有可能的源地址匹配。下一个术语将反转指定前缀列表中这些源地址的匹配。结果是,只有当流量来自列表中的某个地址时,才会接受发往指定协议和端口的管理流量。从所有其他源前缀到同一协议和端口组合的流量将被丢弃。在此示例中,添加了日志记录操作以帮助进行过滤器调试和验证。配置默认术语以接受所有其他流量。这可以确保其他服务和协议(例如 ping、BGP 或 OSPF)不受过滤器的影响。
提示:示例过滤器在设计上是宽容的。如果它明确接受之前的过滤器术语未拒绝或丢弃的所有流量,则它可能构成一种安全威胁。您可以通过显式列出应接受的所有协议和服务来配置更强大的安全过滤器,然后以隐式或显式地以拒绝所有条款结束过滤器,以过滤所有其他流量。限制性过滤器的缺点是每次添加或删除受支持的服务时都必须对其进行编辑。
[edit firewall filter imit-mgmt-access] user@R2# set term accept_everything_else then accept
将无状态防火墙过滤器作为输入过滤器应用于环路接口。在此示例中,不过滤从本地设备发送的流量。
[edit interfaces lo0 unit 0 ] user@R2# set family inet filter input limit-mgmt-access
结果
在配置模式下输入以下 show configuration 命令以确认您的工作。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
user@R2# show policy-options
prefix-list manager-ip {
172.16.0.0/24;
10.0.0.1/32;
}
user@R2# show firewall
filter limit-mgmt-access {
term block_non_manager {
from {
source-address {
0.0.0.0/0;
}
source-prefix-list {
manager-ip except;
}
protocol tcp;
destination-port [ ssh telnet ];
}
then {
log;
discard;
}
}
term accept_everything_else {
then accept;
}
}
user@R2# show interfaces
fxp0 {
unit 0 {
family inet {
address 172.16.0.253/24;
}
}
}
lo0 {
unit 0 {
family inet {
filter {
input limit-mgmt-access;
}
address 192.168.255.2/32;
}
}
}
user@R2# show routing-options
static {
route 0.0.0.0/0 {
next-hop 172.16.0.254;
no-readvertise;
}
}
user@R2# show system services ssh; telnet;
如果对工作感到满意,请从配置模式进入 commit 。
应用限制访问设备的过滤器时,请考虑使用 commit confirmed。如果您无法在指定时间内发出另一个提交,此选项会自动回滚配置。
验证无状态防火墙过滤器
确认用于限制管理访问的防火墙过滤器工作正常。
验证接受的数据包
目的
当流量来自 172.16.0.0/24 子网或与远程管理站关联的 10.0.0.1 主机前缀时,验证防火墙过滤器是否正确允许 SSH 和 Telnet。
行动
清除路由器或交换机上的防火墙日志。
user@R2> clear firewall log
从连接到 172.16.0.0/24 子网的主机(如 R1 设备)上,使用命令
ssh 172.16.0.253启动与 DUT 的连接。默认情况下,R1 设备从用于到达目标的出口接口获取流量。因此,测试流量源自 R1 的 172.16.0.254 地址。由于与引用的前缀列表匹配的地址的操作修饰符,except因此此流量与过滤器术语不匹配block_non_manager。此流量与导致该流量被接受的accept_everything_else过滤器术语匹配注意:如果这是这些设备之间的第一次 SSH 登录 user ,系统将提示您保存 SSH 主机密钥。
user@R1>ssh user@172.16.0.253 Password: Last login: Tue Sep 8 09:46:58 2020 from 10.107.199.39 --- JUNOS 20.2R1.10 Kernel 64-bit XEN JNPR-11.0-20200608.0016468_buil user@R2>
注销 R2 设备上的 CLI 以关闭 SSH 会话。
user@R2> exit logout Connection to 172.16.0.253 closed. user@R1>
注意:使用命令
telnet重复此步骤。Telnet 连接应该成功。在 R2 设备上使用命令
show firewall log验证 R2 设备上的 防火墙日志缓冲区是否不包含源地址在 172.16.0.0/24 子网中的条目。这意味着此流量的数据包标头信息 不会 记录在防火墙过滤器日志中。此示例中仅记录与 block_non_manager 术语匹配的流量。user@R2> show firewall log user@R2>
意义
输出确认来自管理网络的 SSH(和 Telnet)连接是否被接受。它还显示不记录与术语不匹配 block_non_manager 的数据包。如果 SSH 或 Telnet 流量由分配了 10.0.0.1 地址的远程管理站生成,则预期结果相同。
验证已记录和被拒绝的数据包
目的
验证防火墙过滤器是否正确丢弃了 并非 源自前缀列表中某个前 manager-ip 缀的 SSH 和 Telnet 流量。
行动
生成源自前缀列表中未指定的 manager-ip 地址的 SSH 流量。您可以从 R1 设备的环路地址获取会话,以模拟未经授权的 IP。或者,从未连接到管理子网且未分配 IP 地址 10.0.0.1 的任何远程设备启动连接。应丢弃此 SSH 会话的数据包,并将数据包标头信息记录在防火墙过滤器日志缓冲区中。
注意:您不应该期待任何错误消息或回复。连接尝试将超时。这是因为示例过滤器使用
discardreject而不是操作。user@unauthorized-remote-host ssh user@172.16.0.253 ssh: connect to host 172.16.0.253 port 22: Connection timed out
输出显示 SSH 连接不成功。这可以确认过滤器在从不允许的源地址发送时正确阻止 SSH 流量。对于由任何非授权 IP 源地址发起的 Telnet 会话,预期结果相同。
使用此
show firewall log命令验证 R2 设备上的防火墙日志缓冲区现在是否包含具有未经授权源地址的数据包的条目。user@R2> show firewall log Log : Time Filter Action Interface Protocol Src Addr Dest Addr 11:35:46 limit-mgmt-access D fxp0.0 TCP 10.0.0.119 172.16.0.253 11:35:14 limit-mgmt-access D fxp0.0 TCP 10.0.0.119 172.16.0.253 11:34:58 limit-mgmt-access D fxp0.0 TCP 10.0.0.119 172.16.0.253
意义
输出确认来自 10.0.0.119 源地址的流量是否与过滤器中的 limit-mgmt-access 日志记录术语匹配。回想一下,在本例中,只有 block_non_manager 术语具有日志操作。该 Action 列显示 , D 表示数据包已被丢弃。过滤流量的入口接口已确认为设备上的管理端口 fxp0.0 。此外还会显示过滤数据包的传输协议 TCP 和 IP 地址。请注意,此流量的源地址 10.0.0.119 未在前缀列表中列出 manager-ip 。
这些结果证实此示例的防火墙过滤器工作正常。