有状态防火墙
Junos Network Secure 概述
路由器使用防火墙来跟踪和控制流量。自适应服务和多服务 PIC 采用一种称为 的防火墙。与隔离检查数据包的防火墙相比,状态防火墙通过使用从过去通信和其他应用中获得的状态信息为新的通信尝试做出动态控制决策,来提供额外的安全层。
在 ACX 系列路由器上,只有 ACX500 室内路由器支持状态防火墙配置。
有状态防火墙将相关内容分组为。流由以下五个属性标识:
源地址
源端口
目标地址
目标端口
协议
典型的传输控制协议 (TCP) 或用户数据报协议 (UDP) 对话由两个流组成:发起流和响应方流。但是,某些对话(如 FTP 对话)可能由两个控制流和许多数据流组成。
防火墙规则决定是否允许建立对话。如果允许对话,则允许对话中的所有流,包括在对话生命周期中创建的流。
您可以使用强大的规则驱动对话处理路径配置有状态防火墙。A 由方向、源地址、源端口、目标地址、目标端口、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|鳍片|RST)。
TCP 校验和错误。
UDP 异常:
UDP 源端口或目标端口 0。
UDP 标头长度检查失败。
UDP 校验和错误。
通过有状态 TCP 或 UDP 检查发现的异常:
SYN 后跟 SYN-ACK 数据包,不带来自发起方的 ACK。
SYN 后跟 RST 数据包。
不带 SYN-ACK。
非 SYN 第一个流数据包。
SYN 数据包的 ICMP 无法访问错误。
UDP 数据包的 ICMP 无法访问错误。
根据状态防火墙规则丢弃的数据包。
ACX500 路由器不支持 IP 分段异常。
如果将有状态异常检测与无状态检测结合使用,IDS 可以为各种攻击提供预警,包括:
TCP 或 UDP 网络探测和端口扫描
SYN 泛滥攻击
基于分段的 IP 攻击,例如撕裂、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 路由器上,要启用系统日志,请在 [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-firewallCLI 命令: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 地址。
或者,您可以通过在层次结构级别配置[edit policy-options]语句,然后在状态防火墙规则中包含 或 source-prefix-list destination-prefix-list 语句来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 选项处理
您可以选择性地将防火墙配置为通过在层次结构级别包含allow-ip-options[edit services stateful-firewall rule rule-name term term-name then]该语句来检查 IP 报头信息。配置此语句时,符合语句中from指定条件的所有数据包都将受其他匹配标准的约束。仅当数据包的所有 IP 选项类型均配置为语句中的allow-ip-options值时,才会接受该数据包。如果未配置 allow-ip-options,则仅接受没有 IP 报头选项的数据包。
ACX500 室内路由器不支持语句配置 allow-ip-options 。
附加 IP 报头选项检查仅适用于acceptreject状态防火墙作。此配置对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语句定义了一组状态防火墙规则,用于确定路由器软件对数据流中的数据包执行哪些作。您可以通过指定规则名称和配置术语来定义每个规则。然后,您可以通过在层次结构级别包含[edit services stateful-firewall]该语句并为每个规则添加一个rule语句来rule-set指定规则的顺序:
[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 限定符适用于 prefix list 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 和广播地址
以下示例支持自举协议 (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。此配置支持网络地址转换 (NAT) 在 uKernel PIC 上具有状态防火墙 (SFW),在服务SDK PIC 上为之启用入侵检测和防御 (IDP),适用于 FTP 或 HTTP 流量。
服务 SDK 尚不支持 NAT。当需要 NAT 时,您可以配置第 3 层服务包以部署 NAT 以及 APPID、AACL 或 IDP 等服务 SDK。
适用于 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 规则处理。