TCP 会话
要在网络中通过TCP发送数据,请遵循三向握手会话建立过程。有一个启动会话的过程,还有一个终止 TCP 会话的过程。本主题可帮助您了解处理 TCP 会话所涉及的过程。
了解每个策略的 TCP 会话检查
默认情况下,在所有 TCP 会话上启用 TCP SYN 检查和序列检查选项。Junos 操作系统 (Junos OS) 在 TCP 会话期间执行以下操作:
检查会话的第一个数据包中的 SYN 标志,并拒绝任何尝试启动会话的具有非 SYN 标志的 TCP 段。
在状态检查期间验证 TCP 序列号。
通过每个策略的 TCP 会话检查功能,您可以为每个策略配置 SYN 和序列检查。目前,TCP 选项标志(无序列检查和无同步检查)在全局级别可用,以控制服务网关的行为。若要支持按策略的 TCP 选项,可以使用以下两个选项:
需要序列检查:需要序列检查的值将覆盖全局值无序列检查。
需要 syn-check:需要 syn-check 的值将覆盖全局值 no-syn-check。
要配置每个策略的 TCP 选项,必须关闭相应的全局选项;否则,提交检查将失败。如果禁用了全局 TCP 选项,并且 SYN 泛滥保护允许第一个数据包,则每个策略的 TCP 选项将控制是否执行 SYN 和/或序列检查。
按策略
syn-check-required
选项不会覆盖 CLI 命令的行为set security flow tcp-session no-syn-check-in-tunnel
。禁用全局 SYN 检查会降低设备防御数据包泛洪的有效性。
禁用全局 SYN 检查并在策略搜索后强制执行 SYN 检查将极大地影响路由器可以处理的数据包数。这反过来将导致密集的 CPU 操作。禁用全局 SYN 检查并启用按策略的 SYN 检查实施时,应注意此性能影响。
禁用 TCP 数据包安全检查
在 SRX 系列防火墙上,您可以禁用对 TCP 数据包的安全检查,以确保与 TCP 实施错误的主机和设备的互操作性。
该 no-sequence-check
选项禁用 TCP 序列检查。它还提高了吞吐量。
该 set security flow tcp-session no-sequence-check
命令禁用在默认或基于哈希模式下对所有 TCP 会话的 TCP 序列检查。
示例:按策略配置 TCP 数据包安全检查
此示例说明如何为设备中的每个策略配置 TCP 数据包安全检查。
要求
在开始之前,必须禁用在全局级别配置的 tcp 选项 tcp-syn-check
。tcp-sequence-check
概述
默认情况下,在所有 TCP 会话上启用 SYN 和序列检查选项。在需要支持大型文件传输或运行非标准应用程序的环境中,可能需要为每个策略配置不同的顺序和同步检查。在此示例中,您将配置策略 pol1
的顺序和同步检查。
配置
程序
分步过程
要在策略级别配置 TCP 数据包安全检查,请执行以下操作:
在创建会话之前配置 TCP SYN 位检查。
[edit] user@host# set security policies from-zone Zone-A to-zone Zone-B policy pol1 then permit tcp-options syn-check-required
配置在状态检查期间检查 TCP 段中的序列号。
[edit] user@host# set security policies from-zone Zone-A to-zone Zone-B policy pol1 then permit tcp-options sequence-check-required
如果完成设备配置,请提交配置。
[edit] user@host# commit
验证
要验证配置是否正常工作,请输入 show security policies detail
命令。
示例:禁用 SRX 系列服务网关的 TCP 数据包安全检查
此示例说明如何在设备中禁用 TCP 数据包安全检查。
要求
在开始之前,请了解禁用 TCP 数据包安全检查的情况。.
概述
Junos OS 提供了一种机制来禁用对 TCP 数据包的安全检查,以确保与 TCP 实施错误的主机和设备的互操作性。在无 SYN 检查期间,Junos OS 不会查找用于创建会话的 TCP SYN 数据包。无序列检查禁用 TCP 序列检查验证。此外,还可以提高吞吐量。默认情况下,SYN 检查和序列检查处于启用状态。set 安全流命令禁用所有 TCP 会话上的 TCP SYN 检查和 TCP 序列检查,从而降低安全性。在客户(如大型传输文件)或应用程序不能正确使用标准的情况下,可能需要这样做。
配置
程序
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要禁用 TCP 数据包安全检查,请执行以下操作:
在创建会话之前禁用对 TCP SYN 位的检查。
[edit security flow] user@host# set tcp-session no-syn-check
在状态检查期间禁用对 TCP 段中的序列号的检查。
[edit security flow] user@host# set tcp-session no-sequence-check
如果完成设备配置,请提交配置。
[edit ] user@host# commit
验证
要验证配置是否正常工作,请输入 show security flow
命令。
示例:为 SRX 系列防火墙设置所有 TCP 会话的最大分段大小
此示例说明如何为 SRX 系列防火墙的所有 TCP 会话设置最大分段大小。
要求
在开始之前,请了解设置最大段大小的情况。
概述
您可以通过更改 TCP 最大分段大小 (TCP-MSS) 来终止所有 TCP 会话。为了降低分段的可能性并防止数据包丢失,可以使用 tcp-mss 指定较低的 TCP MSS 值。这适用于遍历路由器入口接口且 MSS 值高于您指定值的所有 TCP SYN 数据包。
如果设置了 DF 位,则不会对数据包进行分段,Junos OS 会将 ICMP 错误类型 3 代码 4 数据包发送到应用程序服务器(目标无法访问;需要分段和 DF 集)。此 ICMP 错误消息包含应用程序服务器要使用的正确 MTU(在 tcp-mss 中定义),应用程序服务器应接收此消息并相应地调整数据包大小。这是 VPN 特别需要的,因为 IPsec 增加了数据包开销;因此,必须适当降低TCP-MSS。
在数据包模式下运行 SRX 系列防火墙时,可以使用 set system internet-options tcp-mss 来调整 TCP-MSS 值。所有端口都受 TCP-MSS 配置影响;不能排除特定端口。在流模式下运行 SRX 系列防火墙时,尽管可以使用 set system internet-options tcp-mss ,但我们建议仅使用 来 set security flow tcp-mss 调整 TCP-MSS 值。如果配置了两个语句,则两个值中较小的值将生效。
配置
程序
分步过程
要为所有 TCP 会话配置最大分段大小,请执行以下操作:
设置所有 TCP 会话的 TCP 最大分段大小。
[edit security flow] user@host# set tcp-mss all-tcp mss 1300
如果完成设备配置,请提交配置。
[edit ] user@host# commit
结果
在配置模式下,输入 show security flow
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。
为简洁起见,此 show
命令输出仅包含与此示例相关的配置。系统上的任何其他配置都已替换为省略号 (...)。
[edit] user@host# show security flow ... tcp-mss{ all-tcp{ mss 1300; } } ...
验证
要验证配置是否正常工作,请在操作模式下输入 show configuration security flow
命令。
user@host> show configuration security flow tcp-mss{ all-tcp{ mss 1300; } }
TCP 状态外丢包日志记录概述
在任何数据包交换网络中,当需求超过可用容量时,数据包将排队以容纳多余的数据包,直到队列填满,然后丢弃数据包。当TCP在这样的网络中运行时,它会采取任何纠正措施来保持无错误的端到端通信。
流模块已经支持为基于会话的事件(如会话创建和会话关闭)生成 RTLOG。SRX 系列防火墙现在支持为基于数据包的事件(如不存在会话的丢包)生成 RTLOG。
SRX 系列防火墙支持记录流模块丢弃的未同步 TCP 状态外数据包。
TCP 状态外丢包日志记录功能可避免任何数据包丢失,并通过记录不同步的数据包来实现数据包恢复以实现无错误通信,并防止数据库服务器不同步。此功能构建在安全日志 (RTLOG) 工具之上。
TCP 状态外丢包日志记录支持在以下情况下捕获 TCP 丢包日志:
Session ages out— 当有云应用程序在长 TCP 会话上运行,并且这些应用程序在会话老化后不刷新 TCP 会话时,TCP 数据包将被丢弃。此功能支持记录这些丢弃的 TCP 数据包。
Unsynchronized first packets due to attacks or asymmetric routes— 在两个站点部署 SRX 系列防火墙时,如果路由有时会强制使用非对称流量,则在一个站点上会看到同步 (SYN) 数据包,而在另一个站点上会看到同步确认 (SYN_ACK) 数据包。
这意味着 SRX 系列防火墙会看到没有匹配状态表条目的 TCP ACK 数据包。这可能是因为连接在一段时间内处于非活动状态,或者连接表被刷新(例如,由于策略安装或重新启动)。
在这种情况下,在另一个站点看到的SYN_ACK数据包被 SRX 系列防火墙拒绝,但未记录。此功能支持记录被拒绝的SYN_ACK数据包。
Other out-of-state conditions (like TCP sequence check fail and synchronization packet received in FIN state)— 当 SRX 系列防火墙检测到序列故障时,如果设备处于 TCP 四向关闭状态但收到 SYN 数据包,或者出现三次握手失败,SRX 系列防火墙将丢弃 TCP 数据包,并记录这些丢弃的数据包。
未同步的 TCP 状态外丢包日志是基于数据包的日志,而不是基于会话的日志。
TCP 状态外丢包日志记录采用限制机制设计,可保护 CPU 免受攻击,在每个限制间隔内,可以丢弃一些日志。
仅记录流模块丢弃的 TCP 状态外数据包。不会记录 TCP 代理和 IDP 丢弃的 TCP 数据包。
了解 TCP 状态外丢包日志记录
要了解 TCP 状态外丢包日志记录的实施,请考虑您在两个站点部署 SRX 系列防火墙,并且路由有时会强制非对称流量,即在一个站点看到 SYN 数据包,但在另一个站点看到SYN_ACK数据包。在这种情况下,SYN_ACK数据包将被拒绝,但不会记录。TCP 状态外丢包日志记录功能提供对这些不同步丢包的可见性。
考虑以下场景:数据中心内的数据库保持其 TCP 套接字打开,而不发送激活。如果未传输任何数据,SRX 系列防火墙将使会话超时。尽管数据库将通过该 TCP 套接字发送一些数据,但当流量到达 SRX 系列防火墙时,会话将不再存在,数据包将被丢弃,但不会记录。这些丢弃的州外 TCP 数据包现在由 SRX 系列防火墙记录。
支持的 TCP 状态外日志记录功能
TCP 状态外日志记录支持以下功能:
用于过滤目标流量的数据包过滤器组件。
一种限制组件,用于保护 CPU 不被日志消息过载。
灵活更改日志生成速率。
数据包过滤器组件
日志记录筛选器利用当前流跟踪筛选器。它提供了不同的方法来过滤流量。您必须配置过滤器以生成数据包日志,否则将不会触发日志。
此筛选器功能可避免意外启用日志。支持的最大筛选器为 64。
使用 set security flow packet-log packet-filter <filter-name>
命令启用所需的相关筛选器组件。
节气门组件
记录每个 TCP 状态外数据包可能会在流量繁重或发生攻击时使设备过载。如果 CPU 处于空闲状态,并且您希望记录尽可能多的消息,则可能会导致 CPU 过载。
限制机制允许您从 CLI 配置限制间隔,从而保护您的 CPU 免于过载。
引入了哈希表来映射记录的数据。哈希密钥是使用源 IP 地址、目标 IP 地址、源端口和目标端口生成的。
在每个限制间隔内,只会将有限数量(多个)的消息发送到 RTLOG。其余日志消息将受到限制。
默认限制间隔为 1 秒。节流间隔(毫秒级别)需要配置为 2 的幂或零 (0, 1, 2, 4, 8, 16 ...2^N)。
当节流间隔配置为 0 时,不会涉及节流机制。这适用于流量非常轻且您希望记录所有丢包日志的情况。
将节流间隔配置为 2^N 可使节流机构无锁,并提供良好的日志捕获性能。
灵活更改日志生成速率
根据设置的限制间隔,可以修改和管理日志生成速率。
这意味着在每个 32 毫秒 (ms) 间隔内,可以生成有限数量的日志,并且可以删除剩余的日志。建议将间隔配置为 (0, 1, 2, 4, 8, 16, 32 ...2^N)。
如果输入值未对齐 2^N,则在流处理过程中将自动对齐到 2^N。例如,如果配置 10 毫秒间隔,它将自动对齐为 8 毫秒间隔。
了解如何保留传入分片特征可以提高吞吐量
本主题介绍使用 SRX 系列防火墙保留传入数据包片段特征的好处。
当数据从一台主机发送到另一台主机时,它以一系列数据包的形式传输。当最大大小的数据包可以将路径从源节点传输到目标节点而不在数据路径中的任何链路上分段时,性能会得到提高,网络资源也会得到保护。当由于数据包大于为该链路建立的最大传输单元 (MTU) 的大而必须将数据包分段为较小的数据包才能传输路径中的链路时,除了有效负载或数据外,生成的每个分段还必须包含数据包标头信息。增加的开销会降低吞吐量并降低网络性能。此外,数据包片段必须在目标节点上重组,这会消耗额外的网络资源。
另一方面,当主机发送远小于路径 MTU(路径最大传输单位)的数据包时,网络资源就会被浪费,从而导致吞吐量欠佳。路径 MTU 发现过程用于发现将数据路径从源节点传输到会话目标节点的片段的最佳 MTU 大小。因此,最佳数据包大小是路径 MTU 的大小。当数据包的大小超过路径 MTU 时,会发生分段。
如果在 SRX 系列防火墙上配置了应用层服务,则必须先重组入口接口上的数据包片段,然后才能应用服务并检查内容。在将数据传输到出口接口之前,必须再次分解这些重新组装的数据包片段。通常,出口接口的 MTU 大小决定了从 SRX 系列防火墙传输到下一个链路的片段的大小。SRX 系列防火墙上的出口 MTU 大小可能大于路径 MTU,同样,这将导致数据路径中的数据包分段,从而降低性能或导致丢包。数据包片段必须足够小,以便传输从源到目标路径中的每个链路。
默认情况下,SRX 系列防火墙使用为出口接口配置的 MTU 大小来确定其传输的数据包片段的大小。但是,如果启用该功能以保留传入分段特征,SRX 系列防火墙将检测并保存传入数据包分段的大小。
为了降低数据路径中数据包分段的可能性,SRX 系列防火墙会跟踪并调整该流的出口 MTU。它标识所有传入片段的最大大小。它将该信息与出口接口的现有 MTU 结合使用,以确定从出口接口发送的分段数据包的正确 MTU 大小。SRX 系列防火墙会比较这两个数字。它采用较小的数字并将其用于出口接口 MTU 大小。
使用命令配置 set security flow preserve-incoming-frag-size
设备以启用考虑传入数据包片段大小的功能。
表 1 总结了如何确定 SRX 系列出口 MTU 大小。
传入片段大小 |
现有出口 MTU 大小 |
最终出口 MTU 大小 |
---|---|---|
如果最大的片段是 |
小于 现有出口 MTU 大小 |
使用最大传入片段大小。 |
如果最大的片段是 |
大于现有出口 MTU 大小 |
使用现有出口接口 MTU。 |
SRX 系列防火墙支持此功能。它支持直通流量和退出隧道的流量。它适用于 IPv4 和 IPv6 流量。
以下两个注意事项会影响片段大小:
对于基于流的应用程序(如内容安全和 ALG),即使未收到片段,应用程序本身也可以更改或重组数据包。在这种情况下,将使用现有的出口接口 MTU。
将路径 MTU 发现数据包传送到会话时,该会话的路径 MTU 将重置为路径 MTU 数据包建立的值。
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。
set security flow preserve-incoming-frag-size
设备以启用考虑传入数据包片段大小的功能。