标准防火墙过滤器如何评估数据包
本主题涵盖以下信息:
防火墙过滤器数据包评估概述
如果设备接口上的输入或输出流量与 防火墙过滤器相关联,以下序列描述设备如何评估进入或退出接口的数据包。数据包评估按如下步骤进行:
-
设备根据防火墙过滤器中的术语(从过滤器中的第一个术语开始),按顺序评估数据包。
-
如果数据包与术语中指定的所有条件匹配,设备将执行该术语中指定的所有操作。
-
如果数据包 与术语中指定的所有条件不匹配,设备将继续进入过滤器中的下一个术语(如果存在后续术语),并根据该术语评估数据包。
-
如果数据包 与防火墙过滤器中的任何术语都不匹配,设备将隐式丢弃该数据包。
-
-
与服务过滤器和简单过滤器不同,防火墙过滤器支持的
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 都会创建特定于接口的单独监管器操作实例。
有关更多信息,请参阅 特定于接口的防火墙过滤器实例概述。