MS-DPC 上的 IDS
了解 MS-DPC 上的 SYN Cookie 保护
SYN Cookie 是一种无状态的 SYN 代理机制,可与其他防御 SYN 泛滥攻击的防御措施结合使用。MS-DPC 多服务卡支持 SYN Cookie。
与传统的 SYN 代理一样,当超过 SYN 泛滥攻击阈值时,将激活 SYN cookie。但是,由于 SYN cookie 是无状态的,因此它不会在收到 SYN 分段时设置会话或策略和路由查找,并且不会维护任何连接请求队列。这大大减少了 CPU 和内存的使用,并且是使用 SYN cookie 相对于传统 SYN 代理机制的主要优势。
在 Junos OS 上启用 SYN cookie 并成为目标服务器的 TCP 协商代理后,它将使用包含加密 Cookie 作为其初始序列号 (ISN) 的 SYN/ACK 来回复每个传入 SYN 分段。Cookie 是原始 SYN 数据包中原始源地址和端口号、目标地址和端口号以及 ISN 的 MD5 哈希值。发送 Cookie 后,Junos OS 会丢弃原始 SYN 数据包,并从内存中删除计算出的 Cookie。如果对包含 Cookie 的数据包没有响应,则攻击将被视为活动 SYN 攻击,并得到有效阻止。
如果发起主机响应的 TCP 数据包在 TCP ACK 字段中包含 Cookie +1,Junos OS 将提取 Cookie,从值中减去 1,然后重新计算 Cookie,以验证它是否为合法的 ACK。如果合法,Junos OS 会通过设置会话并向服务器发送包含原始 SYN 源信息的 SYN 来启动 TCP 代理进程。当 Junos OS 从服务器收到 SYN/ACK 时,它会将 ACK 发送到服务器和初始主机。此时,连接已建立,主机和服务器能够直接通信。
使用 SYN cookie 或 SYN 代理可使路由器设备保护其后面的 TCP 服务器免受 IPv6 流中的 SYN 泛洪攻击。
图 1 显示了当 Junos OS 上的 SYN cookie 处于活动状态时,如何在启动主机和服务器之间建立连接。

在 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。您可以使用目标地址、目标地址范围、源地址或源地址范围作为匹配条件,其方式与配置防火墙过滤器的方式相同;有关更多信息,请参阅 《路由策略、防火墙过滤器和流量监管器用户指南》。
或者,可以通过在[edit policy-options]
层次结构级别包含语句,然后在 IDS 规则中包含 prefix-list
destination-prefix-list
或 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 处理之前,路由器会聚合标有指定源或目标前缀的流量。如果要检查与特定源或目标主机连接的所有流量,这将很有帮助。要使用其他一些标记(如特定应用程序或端口)收集流量,请在匹配条件中配置该值。要配置聚合前缀,请在
[edit services ids rule rule-name term term-name then]
层次结构级别包含aggregation
语句,并指定 、source-prefix
destination-prefix source-prefix-ipv6
或destination-prefix-ipv6
的值:[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 会以其他方式计为事件的任何临时异常。要配置不同于默认值的条目行为,请在
[edit services ids rule rule-name term term-name then]
层次结构级别包含force-entry
或ignore-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
- 当或packets
测量值达到阈值时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 个连接。同样的逻辑也适用于applications
和destination-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-flood 正在进行时,请求连接的主机必须回答 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 攻击的保护,这是抵御攻击的有效方法。国内流离失所者解决方案在很大程度上是一种监测工具,而不是必不可少的预防工具。为了防止 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-set
语句来指定规则的顺序,每个规则都有一条rule
语句:
[edit services ids] rule-set rule-set-name { rule rule-name; }
路由器软件按照您在配置中指定的顺序处理规则。如果规则中的术语与数据包匹配,路由器将执行相应的作,规则处理将停止。如果规则中没有术语与数据包匹配,则处理将继续到规则集中的下一个规则。如果所有规则均与数据包匹配,则默认情况下丢弃数据包。
示例:在 MS-DPC 上配置 IDS 规则
当 IDS 异常表遇到目标地址为 10.410.6.2 的流时,以下配置会向 IDS 异常表添加一个永久条目。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) 处理复杂的协议,以及将 NAT 用于传出连接和内部主机(如 HTTP 服务器)。因此,还需要根据需要配置系统,以便与简单和复杂的规则互联互通。例如,如果 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; } } } } }