有状态防火墙
Junos Network Secure 概述
路由器使用防火墙来跟踪和控制流量。自适应服务和多服务 PIC 采用一种称为 的防火墙。与隔离检查数据包的防火墙形成鲜明对比的是,状态防火墙利用过去通信和其他应用程序中派生出的状态信息为新的通信尝试做出动态控制决策,从而提供了额外的安全层。
在 ACX 系列路由器上,状态防火墙配置仅在 ACX500 室内路由器上受支持。
状态防火墙组相关。流由以下五个属性标识:
源地址
源端口
目标地址
目标端口
协议
典型的传输控制协议 (TCP) 或用户数据报协议 (UDP) 对话包含两个流:初始流和响应器流。但是,某些对话(例如 FTP 对话)可能包含两个控制流和许多数据流。
防火墙规则控制是否允许建立对话。如果允许对话,则允许对话中的所有流,包括在对话生命周期内创建的流。
您可使用强大的规则驱动型对话处理路径配置状态防火墙。由方向、源地址、源端口、目标地址、目标端口、IP 协议值以及应用程序协议或服务组成。除了配置的特定值之外,您还可以将值 any
分配给规则对象、地址或端口,以便它们与任何输入值匹配。最后,您可以选择性地否定规则对象,该规则对象否定了特定类型匹配的结果。
防火墙规则是定向的。对于每个新对话,路由器软件都会检查与规则指定的方向匹配的初始流。
防火墙规则已订购。软件会按配置中包含规则的顺序检查规则。防火墙首次发现匹配项,路由器将实施该规则指定的操作。仍未检查的规则将被忽略。
从 Junos OS 14.2 版开始,MS-MPC 和 MS-MIC 接口卡支持 Junos Network Secure 有状态防火墙的 IPv6 流量。
有关更多信息,请参阅 配置状态防火墙规则。
应用程序协议的有状态防火墙支持
通过检查应用程序协议数据,AS 或多服务 PIC 防火墙可以智能地实施安全策略,并且仅允许最少所需的数据包信息流通过防火墙。
防火墙规则配置在一个接口上。默认情况下,状态防火墙允许从接口后面的主机发起的所有会话通过路由器。
ACX500 路由器不支持有状态防火墙 ALG。
有状态防火墙异常检查
状态防火墙将以下事件识别为异常,并将其发送至 IDS 软件进行处理:
IP 异常:
IP 版本不正确。
IP 标头长度字段过小。
IP 标头长度设置为大于整个数据包。
坏标头校验和。
IP 总长度字段短于标头长度。
数据包的 IP 选项不正确。
互联网控制消息协议 (ICMP) 数据包长度错误。
直播时间 (TTL) 等于 0。
IP 地址异常:
IP 数据包源是广播或组播。
陆地攻击(源 IP 等于目标 IP)。
IP 分片异常:
IP 分片重叠。
错过了 IP 分片。
IP 分片长度错误。
IP 数据包长度超过 64 千字节 (KB)。
微小的分片攻击。
TCP 异常:
TCP 端口 0。
TCP 序列号 0 和标记 0。
TCP 序列号 0 和 FIN/PSH/RST 标志集。
组合错误的 TCP 标记(TCP FIN/RST 或 SYN/(URG|FIN|RST)。
TCP 校验和坏。
UDP 异常:
UDP 源或目标端口 0。
UDP 标头长度检查失败。
UDP 校验和不良。
通过有状态 TCP 或 UDP 检查发现的异常情况:
SYN 之后是来自发起方的无 ACK 的 SYN-ACK 数据包。
SYN,然后是 RST 数据包。
SYN(无 SYN-ACK)。
非 SYN 第一流数据包。
SYN 数据包的 ICMP 无法检测的错误。
UDP 数据包的 ICMP 无法检测的错误。
根据状态式防火墙规则丢弃的数据包。
ACX500 路由器不支持 IP 分片异常。
如果您结合使用状态异常检测和无状态检测,IDS 可以为各种攻击提供预警,包括:
TCP 或 UDP 网络探测器和端口扫描
SYN 泛洪攻击
基于 IP 分片的攻击,如 Teardrop、bonk 和 boink
配置有状态防火墙规则
要配置有状态防火墙规则,请在层次结构级别中[edit services stateful-firewall]
包含rule rule-name
语句:
[edit services stateful-firewall] rule rule-name { match-direction (input | output | input-output); term term-name { from { application-sets set-name; applications [ application-names ]; destination-address (address | any-ipv4 | any-ipv6 | any-unicast) <except>; destination-address-range low minimum-value high maximum-value <except>; destination-prefix-list list-name <except>; source-address (address | any-ipv4 | any-ipv6 | any-unicast) <except>; source-address-range low minimum-value high maximum-value <except>; source-prefix-list list-name <except>; } then { (accept <skip-ids>| discard | reject); allow-ip-options [ values ]; syslog; } } }
在 ACX500 路由器上,要启用 syslog,请在 [edit services service-set service-set-name syslog host local class
] 层次结构级别中包含 stateful-firewall-logs
CLI 语句。
edit services stateful-firewall
层次结构在 SRX 系列上不受支持。
每个状态防火墙规则都由一组术语组成,类似于在层次结构级别上配置的 [edit firewall]
过滤器。该术语包含以下内容:
from
语句 — 指定包含和排除的匹配条件和应用程序。该from
语句在有状态防火墙规则中是可选的。then
语句 — 指定路由器软件要执行的操作和操作修改程序。状态防火墙规则中必须使用该then
语句。
ACX500 系列路由器在配置状态防火墙规则时不支持以下内容:
match-direction
(output | input-output)post-service-filter
处于接口服务输入层次结构级别。IPv6 源地址和目标地址。
application-sets
,application
allow-ip-options
在 [edit services stateful-firewall
] 层次结构级别。应用层网关 (ALG)。
多服务模块化接口卡 (MS-MIC) 内的服务链以及内联服务 (-si)。
服务等级。
不支持以下
show services stateful-firewall
CLI 命令:show services stateful-firewall conversations
— 显示对话show services stateful-firewall flow-analysis
— 显示流表条目show services stateful-firewall redundancy-statistics
— 显示冗余统计信息show services stateful-firewall sip-call
—显示 SIP 呼叫信息show services stateful-firewall sip-register
—显示 SIP 注册信息show services stateful-firewall subscriber-analysis
— 显示订阅者表条目
以下部分介绍如何配置状态防火墙规则的组件:
为有状态防火墙规则配置匹配方向
每个规则都必须包含一个match-direction
语句,用于指定应用规则匹配的方向。要在应用匹配的位置配置,请在层次结构级别中[edit services stateful-firewall rule rule-name]
包含match-direction
语句:
[edit services stateful-firewall rule rule-name] match-direction (input | output | input-output);
ACX500 系列路由器不支持 match-direction (output | input-output)
。
如果配置 match-direction input-output
,从两个方向启动的会话可能与此规则相符。
匹配方向用于通过 AS 或多服务 PIC 的信息流。将数据包发送至 PIC 时,方向信息随附。
使用接口服务集,数据包方向由数据包是进入还是离开应用服务集的接口来确定。
使用下一跳跃服务集,数据包方向由用于将数据包路由至 AS 或多服务 PIC 的接口确定。如果内部接口用于路由数据包,则数据包方向为输入。如果使用外部接口将数据包定向到 PIC,则数据包方向为输出。有关内部和外部接口的详细信息,请参阅 配置要应用于服务接口的服务集。
在 PIC 上执行流查找。如果未发现流,则执行规则处理。此服务集中的规则将按顺序考虑,直至找到匹配项。在规则处理期间,数据包方向与规则方向进行比较。仅考虑具有与数据包方向匹配的方向的规则。大多数数据包导致产生双向流。
在有状态防火墙规则中配置匹配条件
要配置状态防火墙匹配条件,请在层次结构级别中[edit services stateful-firewall rule rule-name term term-name]
包含from
语句:
[edit services stateful-firewall rule rule-name term term-name] from { application-sets set-name; applications [ application-names ]; destination-address (address | any-ipv4 | any-ipv6 | any-unicast) <except>; destination-address-range low minimum-value high maximum-value <except>; destination-prefix-list list-name <except>; source-address (address | any-ipv4 | any-ipv6 | any-unicast) <except>; source-address-range low minimum-value high maximum-value <except>; source-prefix-list list-name <except>; }
源地址和目标地址可以是 IPv4 或 IPv6。
您可以使用源地址或目标地址作为匹配条件,其方式与配置防火墙过滤器的方式相同;有关详细信息,请参阅 路由策略、防火墙过滤器和流量监管器用户指南。您可以使用通配符值 any-unicast
,表示匹配所有单播地址, any-ipv4
表示与所有 IPv4 地址匹配,或 any-ipv6
表示与所有 IPv6 地址匹配。
或者,您可以在层次结构级别上配置 prefix-list
语句 [edit policy-options]
,然后在状态防火墙规则中包括 destination-prefix-list
语句或语句,从而指定源或 source-prefix-list
目标前缀列表。例如,请参阅 示例:配置状态防火墙规则。
如果省略了 该 from
术语,状态防火墙将接受所有流量,默认协议处理器将生效:
用户数据报协议 (UDP)、传输控制协议 (TCP) 和互联网控制消息协议 (ICMP) 可创建预测反向流量的双向流量。
IP 创建单向流。
您还可以包括您在层次结构级别上配置的 [edit applications]
应用程序协议定义;有关详细信息,请参阅 配置应用程序属性。
要应用一个或多个特定应用程序协议定义,请在层次结构级别中
[edit services stateful-firewall rule rule-name term term-name from]
包含applications
语句。要应用您定义的一个或多个应用程序协议定义集,请在层次结构级别中
[edit services stateful-firewall rule rule-name term term-name from]
包含application-sets
语句。注意:如果包含指定应用程序协议的语句之一,则路由器将从层次结构级别的相应配置
[edit applications]
中获取端口和协议信息;不能将这些属性指定为匹配条件。
在有状态防火墙规则中配置操作
要配置状态式防火墙操作,请在层次结构级别中[edit services stateful-firewall rule rule-name term term-name]
包含语then
句:
[edit services stateful-firewall rule rule-name term term-name] then { (accept | discard | reject); allow-ip-options [ values ]; syslog; }
您必须包括以下操作之一:
accept
—数据包被接受并发送至其目标。accept skip-ids
— 数据包被接受并发送至其目标,但是跳过了在 MS-MPC 上配置的 IDS 规则处理。discard
—数据包未被接受,也未进一步处理。reject
—不接受数据包,退回拒绝消息:UDP 发送 ICMP 无法到达的代码,TCP 发送 RST。可记录或采样被拒绝的数据包。
ACX500 室内路由器不支持该操作 accept skip-ids
。
您可以选择性地配置防火墙,通过在层次结构级别中包括 syslog
语句来记录系统日志设备中 [edit services stateful-firewall rule rule-name term term-name then]
的信息。此语句覆盖服务集或接口默认配置中包含的任何 syslog
设置。
配置 IP 选项处理
您可以选择性地配置防火墙,通过在[edit services stateful-firewall rule rule-name term term-name then]
层次结构级别中包括allow-ip-options
语句来检查 IP 报头信息。配置此语句时,与语句中from
指定的标准匹配的所有数据包都需遵循附加匹配标准。只有在将数据包的所有 IP 选项类型配置为语句中的allow-ip-options
值时,数据包才会被接受。如果不配置allow-ip-options
,将只接受不使用 IP 标头选项的数据包。
ACX500 室内路由器不支持语句配置 allow-ip-options
。
额外的 IP 报头选项检查仅 accept
适用于有 reject
状态防火墙操作。此配置对操作没有影响 discard
。当 IP 报头检测失败时,不会发送拒绝帧:在这种情况下, reject
该操作的效果与 discard
。
如果有状态防火墙接受 IP 选项数据包,网络地址转换 (NAT) 和入侵检测服务 (IDS) 的应用方式与没有 IP 选项标头的数据包相同。IP 选项配置仅出现在有状态防火墙规则中;NAT 适用于有或没有 IP 选项的数据包。
由于 IP 选项检查失败而丢弃数据包时,此例外事件将生成 IDS 事件和系统日志消息。事件类型取决于拒绝的第一个 IP 选项字段。
表 1 列出了语句的可能值 allow-ip-options
。您可以包括一个范围或一组数字值,或者一个或多个预定义的 IP 选项设置。您可以输入选项名称或其数字等效方。有关更多信息,请参阅 http://www.iana.org/assignments/ip-parameters。
IP 选项名称 |
数值 |
评论 |
---|---|---|
|
|
任何 IP 选项 |
|
|
– |
|
|
– |
|
|
– |
|
|
– |
|
|
– |
|
|
– |
|
|
– |
另请参阅
配置有状态防火墙规则集
该 rule-set
语句定义状态防火墙规则集合,用于确定路由器软件在数据流中的数据包上执行的操作。您可通过指定规则名称和配置术语来定义每个规则。然后,您指定规则的顺序,方法是将语句包含 rule-set
在 [edit services stateful-firewall]
层次结构级别,并为每个规则提供一个 rule
语句:
[edit services stateful-firewall] rule-set rule-set-name { rule rule-name; }
路由器软件按照在配置中指定规则的顺序来处理规则。如果规则中的术语与数据包匹配,路由器将执行相应的操作,并且规则处理停止。如果规则中的术语与数据包不符,则处理将继续为规则集中的下一条规则。如果所有规则均未与数据包匹配,则数据包默认丢弃。
示例:配置有状态防火墙规则
以下示例显示有状态防火墙配置,包含两个规则,一个用于指定应用程序集上的输入匹配,另一个用于指定源地址上的输出匹配:
[edit services] stateful-firewall { rule Rule1 { match-direction input; term 1 { from { application-sets Applications; } then { accept; } } term accept { then { accept; } } } rule Rule2 { match-direction output; term Local { from { source-address { 10.1.3.2/32; } } then { accept; } } } }
以下示例有一个规则,含两个条款。第一个术语拒绝源自 my-application-group
指定源地址的所有流量,并提供被拒绝数据包的详细系统日志记录。第二个术语接受从任何人到指定目标地址的超文本传输协议 (HTTP) 流量。
[edit services stateful-firewall] rule my-firewall-rule { match-direction input-output; term term1 { from { source-address 10.1.3.2/32; application-sets my-application-group; } then { reject; syslog; } } term term2 { from { destination-address 10.2.3.2/32; applications http; } then { accept; } } }
以下示例显示源和目标前缀列表的使用。这需要两个单独的配置项目。
您可在 [edit policy-options]
层次结构级别配置前缀列表:
[edit] policy-options { prefix-list p1 { 10.1.1.1/32; 10.2.2.0/24; } prefix-list p2 { 10.3.3.3/32; 10.4.4.0/24; } }
您参考状态防火墙规则中配置的前缀列表:
[edit] services { stateful-firewall { rule r1 { match-direction input; term t1 { from { source-prefix-list { p1; } destination-prefix-list { p2; } } then { accept; } } } } }
这相当于以下配置:
[edit] services { stateful-firewall { rule r1 { match-direction input; term t1 { from { source-address { 10.1.1.1/32; 10.2.2.0/24; } destination-address { 10.3.3.3/32; 10.4.4.0/24; } } then { accept; } } } } }
您可以使用前缀列表中的 except
限定符,如以下示例中。在这种情况下, except
限定符适用于前缀列表 p2
中包含的所有前缀。
[edit] services { stateful-firewall { rule r1 { match-direction input; term t1 { from { source-prefix-list { p1; } destination-prefix-list { p2 except; } } then { accept; } } } } }
有关将状态防火墙配置与其他服务以及虚拟专用网 (VPN) 路由和转发 (VRF) 表相结合的其他示例,请参阅配置示例。
您可以定义服务集并将其分配为接口样式或下一跃点样式。
另请参阅
示例:BOOTP 和广播地址
以下示例支持 Bootstrap 协议 (BOOTP) 和广播地址:
[edit applications] application bootp { application-protocol bootp; protocol udp; destination-port 67; } [edit services] stateful-firewall bootp-support { rule bootp-allow { direction input; term bootp-allow { from { destination-address { any-unicast; 255.255.255.255; } application bootp; } then { accept; } } } }
示例:在两个 PIC 上配置第 3 层服务和服务 SDK
您可以在两个 PIC 上配置第 3 层服务包和服务 SDK。例如,您必须配置 FTP 或 HTTP 客户端和服务器。在此配置中,路由器接口的客户端侧为 ge-1/2/2.1,路由器接口的服务器侧为 ge-1/1/0.48。此配置支持在 uKernel PIC 和应用程序识别 (APPID)、应用程序感知访问列表 (AACL) 以及服务 SDK PIC 上针对 FTP 或 HTTP 流量的入侵检测和防御 (IDP) 上具有状态防火墙 (SFW) 的网络地址转换 (NAT)。
服务 SDK 还不支持 NAT。需要 NAT 时,您可以配置第 3 层服务包,以便将 NAT 与服务 SDK(如 APPID、AACL 或 IDP)一起部署。
对于 Junos OS 版本 17.1R1 及更高版本的 MX 系列,IDP 功能已弃用。
要在两个 PIC 上部署第 3 层服务包和服务 SDK:
示例:虚拟路由和转发 (VRF) 和服务配置
以下示例结合了虚拟路由和转发 (VRF) 以及服务配置:
[edit policy-options] policy-statement test-policy { term t1 { then reject; } } [edit routing-instances] test { interface ge-0/2/0.0; interface sp-1/3/0.20; instance-type vrf; route-distinguisher 10.58.255.1:37; vrf-import test-policy; vrf-export test-policy; routing-options { static { route 0.0.0.0/0 next-table inet.0; } } } [edit interfaces] ge-0/2/0 { unit 0 { family inet { service { input service-set nat-me; output service-set nat-me; } } } } sp-1/3/0 { unit 0 { family inet; } unit 20 { family inet; service-domain inside; } unit 21 { family inet; service-domain outside; } [edit services] stateful-firewall { rule allow-any-input { match-direction input; term t1 { then accept; } } } nat { pool hide-pool { address 10.58.16.100; port automatic; } rule hide-all-input { match-direction input; term t1 { then { translated { source-pool hide-pool; translation-type source napt-44; } } } } } service-set nat-me { stateful-firewall-rules allow-any-input; nat-rules hide-all-input; interface-service { service-interface sp-1/3/0.20; } } }
accept skip-ids
— 数据包被接受并发送至其目标,但是跳过了在 MS-MPC 上配置的 IDS 规则处理。