MS-DPC 上的 IDS
了解 MS-DPC 上的 SYN Cookie 保护
SYN cookie 是一种无状态 SYN 代理机制,您可以与针对 SYN 洪水攻击的其他防御措施结合使用。MS-DPC 多服务卡支持 SYN cookie。
与传统的 SYN 代理一样,当超过 SYN 泛洪攻击阈值时,SYN cookie 就会被激活。但是,由于 SYN cookie 是无状态的,因此它不会在收到 SYN 分段时设置会话或策略和路由查找,并且不会维护任何连接请求队列。这极大地减少了 CPU 和内存使用量,并且是与传统 SYN 代理机制相比使用 SYN cookie 的主要优势。
当 SYN Cookie 在 Junos OS 上启用并成为目标服务器的 TCP 协商代理时,它会使用包含加密 Cookie 作为其初始序列号 (ISN) 的 SYN/ACK 来回复每个传入 SYN 分段。Cookie 是原始 SYN 数据包中的原始源地址和端口号、目标地址和端口号以及 ISN 的 MD5 散列。发送 Cookie 后,Junos OS 会丢弃原始 SYN 数据包,并从内存中删除计算出的 Cookie。如果对包含 cookie 的数据包没有响应,则该攻击将被记录为活动 SYN 攻击并被有效阻止。
如果发起主机使用在 TCP ACK 字段中包含 cookie +1 的 TCP 数据包进行响应,则 Junos OS 将提取 cookie,从值中减去 1,然后重新计算 cookie 以验证其是否为合法 ACK。如果它是合法的,Junos OS 会通过设置会话并将 SYN 发送到包含原始 SYN 源信息的服务器来启动 TCP 代理进程。当 Junos OS 收到来自服务器的 SYN/ACK 时,它会向服务器和初始主机发送 ACK。此时,连接已建立,主机和服务器能够直接通信。
使用 SYN Cookie 或 SYN 代理使路由器设备能够保护其背后的 TCP 服务器免受 IPv6 流中的 SYN 泛洪攻击。
图 1 显示了当 SYN cookie 在 Junos OS 上处于活动状态时,如何在发起主机和服务器之间建立连接。
建立连接
在 MS-DPC 上配置 IDS 规则
配置了 MS-DPC 的 IDS 规则可识别您希望路由器软件对其事件进行计数的流量。由于 IDS 基于有状态防火墙属性,因此您必须至少配置一个有状态防火墙规则,并将其包含在带有 IDS 规则的服务集中;有关更多信息,请参阅 配置有状态防火墙规则。
要使用 MS-MPC 配置网络攻击防护,请参阅 在 MS-MPC 上配置网络攻击防护。
要配置 IDS 规则,请在层次结构级别包含[edit services ids]该rule rule-name语句:
[edit services ids] rule rule-name { match-direction (input | output | input-output); term term-name { from { application-sets set-name; applications [ application-names ]; destination-address (address | any-unicast) <except>; destination-address-range low minimum-value high maximum-value <except>; destination-prefix-list list-name <except>; source-address (address | any-unicast) <except>; source-address-range low minimum-value high maximum-value <except>; source-prefix-list list-name <except>; } then { aggregation (IDS) { destination-prefix prefix-value | destination-prefix-ipv6 prefix-value; source-prefix prefix-value | source-prefix-ipv6 prefix-value; } (force-entry | ignore-entry); logging { syslog; threshold rate; } session-limit { by-destination (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } by-pair (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } by-source (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } } syn-cookie { mss value; threshold rate; } } } }
每个 IDS 规则都由一组术语组成,类似于在层次结构级别配置 [edit firewall] 的过滤器。术语由以下内容组成:
from语句 — 指定包含和排除的匹配条件和应用。then语句 — 指定要由路由器软件执行的作和作修饰符。
以下部分更详细地介绍了 IDS 规则内容:
配置 IDS 规则的匹配方向
每个规则都必须包含一个match-direction语句,用于指定是在接口的输入端还是输出端应用匹配。要配置匹配的应用位置,请在层次结构级别包含[edit services ids rule rule-name]该match-direction (input | input-output | output)语句:
[edit services ids rule rule-name] match-direction (input | output | input-output);
如果配置 match-direction input-output,则双向规则创建是 。
匹配方向用于通过 AS 或多服务 PIC 的流量。将数据包发送至 PIC 时,方向信息也会随之携带。
对于接口服务集,数据包的方向取决于数据包是进入还是离开应用了服务集的接口。
有了下一跳点服务集,数据包的方向由用于将数据包路由到 AS 或多服务 PIC 的接口决定。如果使用内部接口路由数据包,则输入数据包方向。如果使用外部接口将数据包定向到 PIC,则输出数据包方向。有关内部和外部接口的更多信息,请参阅 配置要应用于服务接口的服务集。
在 AS 或多服务 PIC 上,将执行流查找。如果未找到流,则执行规则处理。服务集中的所有规则都会被考虑在内。在规则处理过程中,系统会将数据包方向与规则方向进行比较。仅考虑方向信息与数据包方向匹配的规则。
在 IDS 规则中配置匹配条件
要配置 IDS 匹配条件,请在层次结构级别包含[edit services ids rule rule-name term term-name]该from语句:
[edit services ids rule rule-name term term-name] from { application-sets set-name; applications [ application-names ]; destination-address (address | any-unicast) <except>; destination-address-range low minimum-value high maximum-value <except>; destination-prefix-list list-name <except>; source-address (address | any-unicast) <except>; source-address-range low minimum-value high maximum-value <except>; source-prefix-list list-name <except>; }
如果省略该 from 语句,则软件将接受所有事件,并将其放入 IDS 缓存中进行处理。
源地址和目的地址可以是 IPv4 或 IPv6。您可以使用目标地址、目标地址范围、源地址或源地址范围作为匹配条件,其配置方式与配置防火墙过滤器的方式相同;有关更多信息,请参阅 路由策略、防火墙过滤器和流量监管器用户指南。
或者,您可以通过在层次结构级别包含prefix-list[edit policy-options]语句,然后在 IDS 规则中包含 destination-prefix-list or source-prefix-list 语句来指定源或目标前缀列表。有关示例,请参阅示例:配置有状态防火墙规则。
还可以包括在层次结构级别配置 [edit applications] 的应用程序协议定义;有关更多信息,请参阅 配置应用程序属性。
要应用一个或多个特定的应用协议定义,请在层次结构级别包含
[edit services ids rule rule-name term term-name from]该applications语句。要应用已定义的一组或多组应用协议定义,请在层次结构级别包含
[edit services ids rule rule-name term term-name from]该application-sets语句。注意:如果包含指定应用协议的语句之一,则路由器将从层次结构级别的
[edit applications]相应配置派生端口和协议信息;您不能将这些属性指定为匹配条件。
如果应用程序上发生匹配,则应用程序协议将单独显示在命令输出中 show services ids 。有关更多信息,请参阅 CLI 资源管理器。
在 IDS 规则中配置作
要配置 IDS作,请在层次结构级别包含[edit services ids rule rule-name term term-name]该then语句:
[edit services ids rule rule-name term term-name] then { aggregation (IDS) { destination-prefix prefix-value | destination-prefix-ipv6 prefix-value; source-prefix prefix-value | source-prefix-ipv6 prefix-value; } (force-entry | ignore-entry); logging { syslog; threshold rate; } session-limit { by-destination (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } by-pair (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } by-source (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } } syn-cookie { mss value; threshold rate; } }
您可以配置以下可能的作:
aggregation— 路由器在将事件传递给 IDS 处理之前,先聚合标有指定源或目标前缀的流量。如果要检查与特定源主机或目标主机连接的所有流量,上述功能会很有帮助。要使用其他标记(如特定应用或端口)收集流量,请在匹配条件中配置该值。要配置聚合前缀,请在层次结构级别包含
aggregation[edit services ids rule rule-name term term-name then]该语句,并为 、destination-prefix source-prefix-ipv6或destination-prefix-ipv6指定值source-prefix:[edit services ids rule rule-name term term-name then] aggregation (IDS) { destination-prefix prefix-value | destination-prefix-ipv6 prefix-value; source-prefix prefix-value | source-prefix-ipv6 prefix-value; }
和
destination-prefix的source-prefix值必须是 1 到 32 之间的整数。和destination-prefix-ipv6的source-prefix-ipv6值必须是 1 到 128 之间的整数。(force-entry | ignore-entry)—force-entry在注册一个事件后,在 IDS 缓存中为后续事件提供永久位置。默认情况下,IDS 软件不会记录有关不表现出可疑行为的“良好”数据包的信息。force-entry您可以使用该语句记录来自可疑主机的所有流量,甚至是原本不会被计算在内的流量。ignore-entry确保忽略所有 IDS 事件。您可以使用此语句忽略来自您信任的主机的所有流量,包括 IDS 会被视为事件的任何临时异常。要配置与默认值不同的条目行为,请在层次结构级别包含
force-entry[edit services ids rule rule-name term term-name then]orignore-entry语句:[edit services ids rule rule-name term term-name then] (force-entry | ignore-entry);
logging- 事件记录在系统日志文件中。要配置日志记录,请在
[edit services ids rule rule-name term term-name then]层次结构级别包含该logging语句:[edit services ids rule rule-name term term-name then] logging { syslog; threshold rate; }
您可以选择性地包括一个阈值速率来触发系统日志消息的生成。阈值速率以每秒事件数指定。对于报告的每个异常,每 60 秒生成一次 IDS 日志。只要事件继续进行,日志就会生成。
session-limit— 当达到指定阈值时,路由器将限制打开的会话。要配置阈值,请在层次结构级别包含
[edit services ids rule rule-name term term-name then]该session-limit语句:[edit services ids rule rule-name term term-name then] session-limit { by-destination (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } by-pair (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } by-source (IDS MS-DPC) { hold-time seconds; maximum number; packets number; rate number; } }
您可以根据流量方向配置流量限制阈值:
要限制来自一个内部主机或子网的传出会话数,请配置该
by-source语句。要限制一对 IP 地址、子网或应用程序之间的会话数,请配置
by-pair该语句。要将传入会话数限制为一个外部公共 IP 地址或子网,请配置该
by-destination语句。
对于每个方向,您可以配置以下阈值:
hold-time seconds- 当 orpackets测量值达到阈值时rate,在指定的秒数内停止所有新流量。一旦生效,hold-time即使速率降至指定限制以量也会被阻止指定时间。默认情况下,hold-time值为 0;范围为 0 到 60 秒。maximum number—每个 IP 地址或每个应用程序的子网的最大打开会话数。范围为 1 到 32,767。packets number— 每个应用的每个 IP 地址或子网每秒最大数据包数 (pps)。范围为 4 到 2,147,483,647。rate number— 每个 IP 地址或每个应用子网每秒的最大会话数。范围为 4 到 32,767。如果在层次结构级别配置的
[edit services ids rule rule-name term term-name from]匹配条件中包含多个源地址,则将为每个源地址单独应用限制。例如,以下配置允许来自每个源地址(10.1.1.1和10.1.1.2)的 20 个连接,而不是总共 20 个连接。相同的逻辑也适用于 和applicationsdestination-address匹配条件。[edit services ids rule rule-name term term-name] from { source-address 10.1.1.1; source-address 10.1.1.2; } then { session-limit by-source { maximum 20; } }注意:IDS 限制应用于状态防火墙规则接受的数据包。它们不会应用于被状态防火墙规则丢弃或拒绝的数据包。例如,如果状态防火墙接受 75% 的传入流量,其余 25% 被拒绝或丢弃,则 IDS 限制仅适用于 75% 的流量。
syn-cookie— 路由器激活 SYN-cookie 防御机制。要配置 SYN-cookie 值,请在层次结构级别包含
[edit services ids rule rule-name term term-name then]以下syn-cookie语句:[edit services ids rule rule-name term term-name then] syn-cookie { mss value; threshold rate; }
如果启用 SYN-cookie 防御,则必须包括触发 SYN-cookie 活动的阈值速率和 TCP 延迟绑定的传输控制协议 (TCP) 最大分段大小 (MSS) 值。阈值速率以每秒 SYN 攻击次数为单位指定。默认情况下,TCP MSS 值为 1500;范围从 128 到 8192。
处理 SYN 泛滥攻击和 SYN cookie 防护
SYN 泛洪攻击的主要目的是消耗站点上的所有新网络连接,从而阻止授权和合法用户连接到网络资源。SYN(同步序列号)数据包是发送到系统的第一个连接请求。SYN 数据包包含接收方需要响应的 ID。如果数据包包含非法 ID,则接收系统在响应预期的连接发起方时确实会收到连接确认。最终,此半开连接超时,接收器上的传入通道再次可用,以正常处理另一个请求。SYN 泛洪攻击发送的此类请求如此之多,以至于所有传入连接都不断被束缚,等待从未收到的确认。这种情况会导致服务器对合法用户不可用(除非用户会话在其中一个绑定连接超时时建立用户会话)。SYN 泛洪攻击是一种无连接攻击。它不需要真正的源 IP 地址,并且由于它使用合法的目标 IP 或端口地址,因此实际上不可能与合法的数据包区分开来。因此,仅使用过滤器或有状态防火墙规则很难阻止此类攻击。基本上,只有三种方法可以防止此类攻击:
拦截(延迟绑定) — 防火墙拦截传入的 TCP 同步请求,并代表服务器与客户端建立连接,并代表客户端与服务器建立连接。如果两个连接都成功,防火墙将透明地合并这两个连接。防火墙通常具有激进的超时时间,以防止 SYN 攻击消耗其自身的资源。就处理和内存要求而言,这是最密集的解决方案。
监视(SYN 防御) — 防火墙被动监视半打开连接,并在可配置的时间长度后主动关闭服务器上的连接。
SYN cookie — SYN cookie 是 TCP 服务器选择的初始 TCP 序列号的特定选择。当 IDS 检测到正在进行的 SYN 泛洪时,请求连接的主机必须使用 cookie 进行响应才能连接到打开的 TCP 套接字。
瞻博网络路由器支持将有状态防火墙与 IDS 机制相结合,以支持 SYN Cookie 和监视(SYN 防御)方法。SYN 洪水攻击的关键是填充受害者或被攻击网络元素的 SYN 队列。SYN cookie 防御方法使受害者能够在 SYN 队列已满时继续接受连接请求,或者在防火墙或 IDS 应用程序的情况下,当达到特定阈值时。达到阈值后,将根据 SYN 段中的信息创建一个加密 Cookie(32 位数字),并丢弃 SYN 段。Cookie 用作发送给客户端的 SYN-ACK 中的初始序列号。Cookie(加一)作为合法客户端 ACK 中的确认号返回到防火墙或 IDS 应用程序。可以验证返回的 cookie,并且可以从 cookie 重建 SYN 段的最重要部分,从而允许建立连接。由于 SYN 洪水的欺骗客户端从不发送 ACK,因此当使用 SYN cookie 时,不会在任何状态下为它们分配任何资源。最好仅对受到攻击的主机使用 SYN 泛洪对策。异常表可用于可靠的攻击识别,也可以在有状态防火墙中启用。这种类型的配置还有助于防止在攻击时耗尽系统资源(尤其是流表)。
组合多个服务时,一般路径是正向和反向考虑的重要因素。当部署 NAT 以确定是否必须使用前 NAT 地址或后 NAT 地址来匹配规则时,尤其如此。在从 LAN 接口到 WAN 接口的转发路径中,首先执行 IDS 和状态防火墙,然后执行 NAT,最后执行 IPSec。此服务处理顺序表示状态防火墙必须在预 NAT 地址上匹配,而 IPSec 隧道在后 NAT 地址上匹配。在返回路径中,首先处理 IPSec 数据包,然后是 NAT,最后是状态防火墙。此处理顺序仍然允许 IPSec 匹配公共地址,而状态防火墙可以匹配私有地址。您必须单独配置防火墙、NAT 和 IDS 服务。当在打开其他服务的路由器中实施 IPSec over GRE 时,数据包的处理会变得更加复杂。发生此行为是因为 Junos OS 在 GRE 封装后会以独特的方式处理 GRE 数据包。数据包封装在 GRE 数据包中后,会使用输入接口将其标记为下一跃点传出接口。如果任何输入过滤器或输入服务不允许此服务,则此标记方法会导致GRE数据包被阻止。
Junos OS 服务支持一组有限的 IDS 规则,以帮助检测端口扫描和流量模式异常等攻击。它还通过限制流量、会话和速率的数量来支持某些攻击防御。此外,它还通过实施 SYN cookie 机制来防止 SYN 攻击。由于入侵检测和防御 (IDP) 服务不支持更高层的应用签名,因此针对攻击的有效方法是配置针对 SYN 攻击的防护。IDP 解决方案在很大程度上是一种监控工具,而不是基本的预防工具。为了防止 SYN 攻击,路由器将作为一种 SYN“代理”运行并使用 cookie 值。启用此功能后,路由器将使用序列号字段中包含唯一 Cookie 值的 SYN-ACK 数据包来响应初始 SYN 数据包。如果发起方在序列字段中使用相同的 cookie 进行响应,则接受 TCP 流;如果响应方没有响应或使用错误的 cookie 进行响应,则流将被丢弃。要触发此防御,必须配置 SYN Cookie 阈值。要启用 SYN cookie 防御,IDS 规则作必须包含一个阈值,该阈值指示何时应启用该功能,以及一个 MSS 值,以避免路由器在充当 SYN 代理时管理分段片段:
[edit] user@host# set services ids rule simple-ids term 1 then syn-cookie
在 MS-DPC 上配置 IDS 规则集
您可以使用 rule-set 语句定义一组 IDS 规则,用于确定路由器软件对数据流中的数据包执行的作。MS-DPC 多服务卡支持此功能。(要使用 MS-MPC 配置网络攻击防护,请参阅 在 MS-MPC 上配置网络攻击防护。
您可以通过指定规则名称和配置术语来定义每个规则。然后,您可以通过在层次结构级别包含[edit services ids]该语句并为每个规则添加一个rule语句来rule-set指定规则的顺序:
[edit services ids] rule-set rule-set-name { rule rule-name; }
路由器软件将按您在配置中指定的顺序处理规则。如果规则中的术语与数据包匹配,路由器将执行相应的作,并且规则处理将停止。如果规则中没有与数据包匹配的术语,则处理会继续执行规则集中的下一个规则。如果所有规则都与数据包匹配,则默认情况下将丢弃数据包。
示例:在 MS-DPC 上配置 IDS 规则
当IDS异常表遇到目标地址为 10.410.6.2 的流量时,以下配置会向异常表添加一个永久条目。MS-DPC 多服务卡支持此示例。(要使用 MS-MPC 配置网络攻击防护,请参阅 在 MS-MPC 上配置网络攻击防护。
[edit services ids]
rule simple_ids {
term 1 {
from {
destination-address 10.410.6.2/32;
}
then {
force-entry;
logging {
threshold 1;
syslog;
}
}
}
term default {
then {
aggregation {
source-prefix 24;
}
}
}
match-direction input;
}
IDS 配置与有状态防火墙机制协同工作,并且严重依赖于有状态防火墙报告的异常情况。以下配置示例显示了这种关系:
[edit services ids]
rule simple_ids {
term 1 {
from {
source-address 10.30.20.2/32;
destination-address {
10.30.10.2/32;
10.30.1.2/32 except;
}
applications appl-ftp;
}
then {
force-entry;
logging {
threshold 5;
syslog;
}
syn-cookie {
threshold 10;
}
}
}
match-direction input;
}
[edit services stateful-firewall]
rule my-firewall-rule {
match-direction input-output;
term term1 {
from {
source-address 10.30.20.2/32;
applications appl-ftp ;
destination-address {
10.30.10.2/32;
10.30.1.2/32 except;
}
}
then {
accept;
syslog;
}
}
}
状态防火墙或 NAT 服务用于为 IDS 应用程序生成输入数据。启用和配置 IDS 服务时,还必须启用至少一个规则(接受或丢弃所有流量)的有状态防火墙。当系统受到攻击时,状态防火墙会向 IDS 系统发送正确且完整的攻击事件列表。在您的网络环境中,您可以确保系统受到全面保护,免受各种攻击,以便 IDS 系统报告所有此类攻击。在将系统配置为免受所有攻击和未经身份验证的访问场景时,必须小心谨慎,以免对系统处理的流量带宽造成负担。验证与攻击与 IDS 表对应的防火墙系统日志消息之间的相关性也很重要。与基于防火墙的系统日志消息相比,IDS 表的异常或错误数量必须相同或略少。您可以使用相应的show命令来显示IDS表。
默认状态防火墙规则可以很简单,例如仅允许从内部接口到外部接口发起连接,并丢弃所有其他数据包。然而,在真实的网络环境中,规则通常更为复杂,例如只配置某个支路单元端口要打开,复杂协议使用应用层网关(ALG),传出连接和内部主机(如 HTTP 服务器)都使用 NAT。因此,还需要根据需要对系统进行配置,以与简单和复杂的规则互通。例如,如果 SYN 攻击针对的内部地址被简单丢弃,则无需向 IDS 系统报告任何异常情况。但是,如果 SYN 攻击是针对真实的 HTTP 服务器,则必须报告异常情况。IDS 系统可以使用 TCP SYN cookie 防御功能来缓解 SYN 攻击。您可以通过为给定主机设置每秒 SYN 数阈值以及最大分段大小 (MSS) 来启用 SYN cookie 保护方法。由于 IDS 系统使用状态式防火墙,因此必须在服务集中定义防火墙规则。如果未在层次结构级别的[edit services service-set service-set-name stateful-firewall-rules rule-name term term-name]有状态防火墙(规则术语匹配条件)中配置该from语句,则表示所有事件都已放入 IDS 缓存中。
以下示例显示了流量限制的配置:
[edit services ids]
rule ids-all {
match-direction input;
term t1 {
from {
application-sets alg-set;
}
then {
aggregation {
destination-prefix 30; /* IDS action aggregation */
}
logging {
threshold 10;
}
session-limit {
by-destination {
hold-time 0;
maximum 10;
packets 200;
rate 100;
}
by-pair {
hold-time 0;
maximum 10;
packets 200;
rate 100;
}
by-source {
hold-time 5;
maximum 10;
packets 200;
rate 100;
}
}
}
}
}