标准防火墙过滤器如何评估数据包
本主题涵盖以下信息:
防火墙过滤器数据包评估概述
以下序列介绍了如果设备接口上的输入或输出流量与 防火墙过滤器相关联,设备将如何评估进入或退出接口的数据包。数据包评估按如下方式进行:
设备从过滤器中的第一个术语开始,按顺序根据防火墙过滤器中的术语评估数据包。
如果数据包符合术语中指定的所有条件,设备将执行该术语中指定的所有操作。
如果数据包不符合某个术语中指定的所有条件,设备将继续执行过滤器中的下一个术语(如果存在后续术语),并根据该术语评估数据包。
如果数据包与防火墙过滤器中的任何术语都不匹配,设备将隐式丢弃数据包。
与服务过滤器和简单过滤器不同,防火墙过滤器支持该
next term
操作,该操作既不是终止操作也不是非终止操作,而是流控制操作。注:在 Junos 和 Junos OS 演化版上,
next term
不能显示为操作的最后一个术语。不支持指定为操作但未配置任何匹配条件的筛选词next term
。如果匹配的术语包含
next term
操作,则设备将在防火墙过滤器内的下一个术语继续评估数据包。如果匹配的术语不包括
next term
操作,则针对给定防火墙过滤器的数据包评估将在此术语结束。设备不会根据此过滤器中的任何后续术语评估数据包。
每个防火墙过滤器配置最多支持 1024
next term
个操作。如果配置的防火墙过滤器超过此限制,则候选配置会导致提交错误。当数据包与未执行操作的
next term
术语匹配或数据包与防火墙过滤器中的最后一个术语不匹配时,设备将停止根据给定防火墙过滤器评估数据包。如果本地数据包到达与入口防火墙过滤器关联的路由器接口,则该过滤器将评估数据包两次。第一次评估发生在数据包转发引擎中,数据包转发引擎是路由器转发平面的中央处理元素,第二次评估发生在运行路由器控制平面软件的路由引擎中。
注:本地数据包(发往路由器本身或由路由器本身发送的数据块)通常包含路由协议数据、Telnet 或 SSH 等 IP 服务的数据,以及互联网控制消息协议 (ICMP) 等管理协议的数据。
如果防火墙过滤器的第一次评估修改了传入的本地数据包或数据包上下文值,则防火墙过滤器的第二次评估将基于更新的数据包或数据包上下文值。
例如,假设过滤器包含基于与数据包关联的转发类或丢失优先级值的匹配条件,并且过滤器包含修改与数据包关联的转发类或丢失优先级值的操作。如果入口本地数据包到达关联接口,并且数据包转发引擎中的过滤器评估修改(而不是丢弃)数据包,则路由引擎中的过滤器评估基于修改后的数据包上下文(而不是原始数据包上下文)。
在单个防火墙过滤器上进行数据包评估
表 1 描述与单个防火墙过滤器关联的设备接口上的数据包过滤行为。
在 Junos OS 演化版上, next term
不能显示为操作的最后一个术语。不支持指定为操作但未配置任何匹配条件的筛选词 next term
。
防火墙过滤器事件 |
操作 |
后续操作 |
|
---|---|---|---|
防火墙过滤器术语未指定任何匹配条件。 |
默认情况下,该术语匹配所有数据包,因此设备将执行该术语指定的操作。 |
如果术语操作包括操作 |
|
数据包与防火墙过滤器术语指定的所有条件匹配。 |
设备执行该术语指定的操作。 |
如果术语操作包括操作 |
|
数据包匹配防火墙过滤器术语指定的所有条件,但该术语未指定任何操作。 |
设备隐式接受数据包。 |
如果术语操作包括操作 |
|
数据包与防火墙过滤器术语指定的所有条件不匹配。 |
设备不执行该术语指定的操作。 |
设备继续根据过滤器内的下一个术语(如果存在后续术语)评估数据包。 |
|
数据包与过滤器中的任何术语都不匹配 |
设备隐式丢弃数据包 每个防火墙过滤器配置在过滤器末尾都包含一个隐 term t_explicit_discard { then discard; } |
最佳实践:显式接受未明确丢弃的任何流量
您可能希望防火墙过滤器接受过滤器未明确丢弃的任何流量。在这种情况下,我们建议您使用指定 accept
终止操作的最终术语配置防火墙过滤器。
在以下示例代码段中,将术语配置为 t_allow_all_else
防火墙过滤器中的最终术语会显式配置防火墙过滤器以接受过滤器未明确丢弃的任何流量:
term t_allow_all_else { then accept; }
遵循此最佳做法可以简化防火墙过滤器的故障排除。
最佳实践:显式拒绝任何未明确接受的流量
另一方面,您可能希望防火墙过滤器拒绝防火墙过滤器未明确接受的任何流量。在这种情况下,我们建议您使用指定 reject
终止操作的最终术语配置防火墙过滤器。
在以下示例代码段中,将术语配置为 t_deny_all_else
防火墙过滤器中的最终术语会显式配置防火墙过滤器以拒绝过滤器未明确接受的任何流量:
term t_deny_all_else { then reject; }
遵循此最佳做法可以简化防火墙过滤器的故障排除。
连接到单个接口的多个防火墙过滤器
在受支持的设备接口上,您可以将多个防火墙过滤器连接到单个接口。有关更多详细信息,请参阅了解作为列表应用的多个防火墙过滤器。
在支持的接口上,您可以将与协议无关的 () 防火墙过滤器和特定于协议的 (family any
family inet
或 family inet6
) 防火墙过滤器连接到同一接口。首先执行与协议无关的防火墙过滤器。有关更多详细信息,请参阅应用标准防火墙过滤器的准则。
连接到多个接口的单个防火墙过滤器
在支持的接口上,您可以将单个防火墙过滤器与多个接口关联,Junos OS 会为每个关联的接口创建该防火墙过滤器的 接口特定实例 。
Junos OS 将防火墙过滤器的每个接口特定实例与系统生成的接口特定名称相关联。
count
对于过滤器术语中的任何操作,数据包转发引擎会维护单独的接口特定计数器,Junos OS 会将每个计数器与系统生成的接口特定名称相关联。policer
对于过滤器术语中的任何操作,Junos OS 将创建单独的、特定于接口的监管器操作实例。
有关更多详细信息,请参阅特定于接口的防火墙过滤器实例概述。