网络规则

策略:网络规则

SUSE® Security 会自动从您在发现模式下运行的应用程序中创建网络规则。您也可以在任何模式下手动添加它们,包括发现、监控或保护模式。可以通过 CLI 或 REST API 添加或编辑规则。

SUSE® Security 使用声明性策略,该策略由管理允许和拒绝的应用程序层连接的规则组成。SUSE® Security 不仅根据 IP 地址和端口进行分析和保护,还通过确定基于应用协议的实际网络行为进行分析和保护。这使得 SUSE® Security 能够自动保护任何新的应用容器,无论其 IP 地址和端口如何。

网络规则指定您的应用程序的允许或拒绝行为。这些规则确定了您的服务的正常连接行为以及什么构成违规。您可以自动删除 ‘learned’ 规则,也可以向您的策略中添加新规则。

网络规则按照它们在列表中出现的顺序执行,从上到下。要重新排序规则,请选择您想要移动的规则,然后您会看到一个“移动到”框出现在顶部,您可以将所选规则移动到指定规则之前或之后的位置。

如果您编辑(添加、删除、修改)规则,您的更改在您点击顶部的保存按钮之前不会生效。如果您在未部署更改的情况下退出此页面,您的更改将会丢失。

添加新规则

使用 ‘+’ 添加规则,可以在右侧列中的另一个规则下方,或使用右下角的按钮。

  • ID

    (可选)输入一个数字。网络规则最初按从低到高的顺序排列,但可以通过拖放在列表中更改规则顺序。

  • 寄件人

    指定连接将来自的组。开始输入,SUSE® Security 将匹配任何先前发现的组,以及任何新定义的组。

  • 指定这些连接被允许或拒绝的目标组。

  • 应用程序

    输入应用程序以 SUSE® Security 允许或拒绝。 SUSE® Security 理解深层应用行为,并将分析有效负载以确定应用协议。协议包括 HTTP、HTTPS、SSL、SSH、DNS、DNCP、NTP、TFTP、ECHO、RTSP、SIP、MySQL、Redis、Zookeeper、Cassandra、MongoDB、PostgresSQL、Kafka、Couchbase、ActiveMQ、ElasticSearch、RabbitMQ、Radius、VoltDB、Consul、Syslog、Etcd、Spark、Apache、Nginx、Jetty、NodeJS、Oracle、MSSQL、Memcached 和 gRPC。

    要选择任意/所有,请留此字段为空。

  • 端口

    如果有特定端口需要限制此规则,请在此输入。对于 ICMP 流量,请输入 icmp。

    要选择任意/所有,请留此字段为空。

  • 拒绝/允许

    指示此规则是允许此类型的连接,还是拒绝它。

    如果选择拒绝,SUSE® Security 将在监控模式下将其记录为违规,并在保护模式下阻止它。如果没有规则与之匹配,默认操作是拒绝连接(仅在监控模式下记录违规)。

如有更改,请务必点击“部署”或“更新”!

出口控制:允许连接到其他网络上的受信任内部服务

自定义规则的一个常见用例是允许容器服务连接到 SUSE® Security 管理集群网络之外的网络。在许多情况下,由于 SUSE® Security 不识别此网络,它将将其分类为 ‘External’ 网络,即使它是内部网络。

要允许容器连接到其他内部网络上的服务,首先创建一个组,然后为其创建一个规则。

  1. 创建一个组。在策略 → 组中,单击以添加新组。为组命名(例如,内部),然后指定组的标准。例如,指定内部服务的DNS名称、IP地址或地址范围。保存新组。

  2. 创建规则。在策略 → 规则中,点击添加新规则。选择表示连接来源的容器组,然后选择目标组(例如内部)。您可以通过特定协议或端口进一步细化规则,或者留空。确保选择器设置为允许(绿色)。

请务必点击部署以保存新规则。

最后,检查规则列表以确保新规则的顺序和优先级符合预期。规则是从上到下应用的。

基于 X-FORWARDED-FOR 的入站 IP 策略

在 Kubernetes 集群中,应用程序可以通过 NodePort、LoadBalancer 或 Ingress 服务暴露到集群外部。这些服务通常在对数据包进行源 NAT(SNAT)时替换源 IP。由于原始源 IP 被伪装,这会阻止 SUSE® Security 识别连接实际上来自 "外部"。

为了保留原始源IP地址,用户需要在外部负载均衡器或Ingress控制器的 'spec' 部分中,将以下行添加到暴露的服务。(参考: https://kubernetes.io/docs/tutorials/services/source-ip/))

"externalTrafficPolicy":"Local"

许多 LoadBalancer 服务和 Ingress 控制器的实现会将 X-FORWARDED-FOR 行添加到 HTTP 请求头中,以将真实源 IP 传达给后端应用程序。该产品可以识别这一组 HTTP 头,识别原始源 IP 并根据该 IP 强制执行策略。

这一改进在某些设置中产生了一些意想不到的问题。如果上述行已添加到暴露的服务中,并且 SUSE® Security 网络策略以期望网络连接来自内部代理/Ingress 服务的方式创建,因为我们现在识别连接来自集群的 “外部”,正常的应用流量可能会触发警报或被阻止,如果应用程序处于 “保护” 模式。

可以使用开关来禁用此功能。禁用它会告诉 SUSE® Security 不要使用 X-FORWARDED-FOR 头识别连接来自 “外部”。默认情况下,此功能是启用的,并且在策略强制执行中使用 X-FORWARDED-FOR 头部。要禁用它,请转到“设置” → “配置”,并禁用“基于 X-Forwarded-For 的策略匹配”设置。

Istio ServiceEntry 目标的特殊策略强制执行

在版本 5.1.0 中,为通过 Istio 声明的 ServiceEntry 目标的 Pod 添加了出站网络策略强制执行功能。通常,ServiceEntry 定义了如何将通过 DNS 名称引用的外部服务解析为目标 IP。在 v5.1 之前,SUSE® Security 无法检测和强制执行对 ServiceEntry 的连接规则,因此所有连接都被归类为外部。在 5.1 中,可以对特定的 ServiceEntry 目标强制执行规则。如果不存在允许规则,将报告隐式违规的新可见流量。这些规则可以在发现模式下学习和自动创建。要允许此流量,您可以将组置于发现模式,或创建一个包含目标地址(或 DNS 名称)的自定义组,并为该目标添加新的网络规则以允许流量。

基于虚拟主机的网络策略

自定义组可以支持基于虚拟主机的地址组。这使得一个用例成为可能,其中两个不同的 FQDN 地址解析为同一个 IP 地址,但每个 FQDN 应该执行不同的规则。可以使用 ‘address=vh:xxx.yyy’ 指示符创建一个新的自定义组 ‘vh:’ 以启用此保护。然后,网络规则可以根据虚拟主机名(而不是解析的 IP 地址)使用自定义组作为 ‘From’ 源,以对虚拟主机执行不同的规则。

分离模式网络保护

容器组可以在与网络规则不同的模式下具有进程/文件规则,如 这里 所述。

内置网络威胁检测

SUSE® Security 自动检测某些网络攻击,无论保护模式如何。在发现和监控模式下,这些威胁会触发警报,并可以在“通知” → “安全事件”中找到。在保护模式下,这些威胁会触发警报并被阻止。响应规则也可以根据威胁检测创建。

请注意,可以通过 WAF 规则部分配置自定义网络威胁检测。

SUSE® Security 包括以下威胁检测:

  • Apache Struts RCE攻击

  • 密码溢出攻击

  • 检测HTTP负内容长度缓冲区溢出

  • 检测MySQL访问拒绝

  • 检测SSH版本1、2或3

  • 检测SSL TLS v1.0、v1.1(需要环境变量启用)

  • DNS缓冲区溢出攻击

  • DNS洪水DDOS攻击

  • DNS空类型攻击

  • DNS隧道攻击

  • DNS区域传输攻击

  • HTTP Slowloris DDOS攻击

  • HTTP走私攻击

  • ICMP洪水攻击

  • ICMP隧道攻击

  • IP Teardrop攻击

  • Kubernetes 中间人攻击(CVE-2020-8554)

  • PING 死亡攻击

  • SQL 注入攻击

  • SSL 心脏滴血攻击

  • SYN泛洪攻击

  • TCP 小窗口攻击

  • TCP 分裂握手攻击

  • TCP 小 MSS 攻击