8.8. 使用 FlowMetric API 和 TCP 标志检测 SYN 填充
您可以创建一个 AlertingRule
资源来提醒出现 SYN 洪水的情况。
流程
-
在 Web 控制台中,进入到 Operators
Installed Operators。 - 在 NetObserv Operator 的 Provided APIs 标题中,选择 FlowMetric。
- 在 Project 下拉列表中,选择 Network Observability Operator 实例的项目。
- 点 Create FlowMetric。
创建
FlowMetric
资源以添加以下配置:配置每个目标主机和资源的计数,使用 TCP 标志
apiVersion: flows.netobserv.io/v1alpha1 kind: FlowMetric metadata: name: flows-with-flags-per-destination spec: metricName: flows_with_flags_per_destination_total type: Counter labels: [SrcSubnetLabel,DstSubnetLabel,DstK8S_Name,DstK8S_Type,DstK8S_HostName,DstK8S_Namespace,Flags]
使用每个源主机和资源的计数,使用 TCP 标志
apiVersion: flows.netobserv.io/v1alpha1 kind: FlowMetric metadata: name: flows-with-flags-per-source spec: metricName: flows_with_flags_per_source_total type: Counter labels: [DstSubnetLabel,SrcSubnetLabel,SrcK8S_Name,SrcK8S_Type,SrcK8S_HostName,SrcK8S_Namespace,Flags]
部署以下
AlertingRule
资源以警告出现 SYN 洪水的情况:用于 SYN 洪水的
AlertingRule
apiVersion: monitoring.openshift.io/v1 kind: AlertingRule metadata: name: netobserv-syn-alerts namespace: openshift-monitoring # ... spec: groups: - name: NetObservSYNAlerts rules: - alert: NetObserv-SYNFlood-in annotations: message: |- {{ $labels.job }}: incoming SYN-flood attack suspected to Host={{ $labels.DstK8S_HostName}}, Namespace={{ $labels.DstK8S_Namespace }}, Resource={{ $labels.DstK8S_Name }}. This is characterized by a high volume of SYN-only flows with different source IPs and/or ports. summary: "Incoming SYN-flood" expr: sum(rate(netobserv_flows_with_flags_per_destination_total{Flags="2"}[1m])) by (job, DstK8S_HostName, DstK8S_Namespace, DstK8S_Name) > 300 1 for: 15s labels: severity: warning app: netobserv - alert: NetObserv-SYNFlood-out annotations: message: |- {{ $labels.job }}: outgoing SYN-flood attack suspected from Host={{ $labels.SrcK8S_HostName}}, Namespace={{ $labels.SrcK8S_Namespace }}, Resource={{ $labels.SrcK8S_Name }}. This is characterized by a high volume of SYN-only flows with different source IPs and/or ports. summary: "Outgoing SYN-flood" expr: sum(rate(netobserv_flows_with_flags_per_source_total{Flags="2"}[1m])) by (job, SrcK8S_HostName, SrcK8S_Namespace, SrcK8S_Name) > 300 2 for: 15s labels: severity: warning app: netobserv # ...
验证
- 在 Web 控制台中,点 Network Traffic 表视图中的 Manage Columns,然后点 TCP 标志。
- 在 Network Traffic 表视图中,根据 TCP 协议 SYN TCPFlag 。有大量具有相同 byteSize 的流代表出现了 SYN 洪水。
-
进入 Observe
Alerting 并选择 Alerting Rules 选项卡。 - 根据 netobserv-synflood-in alert 过滤。当发生 SYN 洪水时,该警报应被触发。