10.8. 使用 FlowMetric API 和 TCP 标志检测 SYN 填充
部署自定义 AlertingRule 和 FlowMetric 配置来监控 TCP 标志,为 SYN 大量对集群进行攻击启用实时检测和警报。
流程
-
在 Web 控制台中,进入到 Ecosystem
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 洪水的
AlertingRuleapiVersion: 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) > 3001 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) > 3002 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 洪水时,该警报应被触发。