IBM Cloud Docs
保护 TCP 流量 (范围)

保护 TCP 流量 (范围)

“范围”功能为任何基于 TCP 的协议引入 DDoS 保护、负载均衡和内容加速。 Range 是运行在 IBM Cloud® Internet Services (Cloudflare) 边缘节点上的全局 TCP 代理。

“范围”可用于:

  • 保护您的 TCP 端口和协议免受 Layer-3 和 Layer-4 DDoS 攻击。
  • 使用 Layer-7 防火墙规则 保护您的 HTTP (S) Range 应用程序。
  • 通过启用 TLS 加密,降低攻击者窥探和窃取敏感数据的能力。
  • 与 CIS IP 防火墙集成,该防火墙允许您阻止 IP 地址或整个 IP 范围访问 TCP 服务,或者对这些 IP 地址或范围进行质询。
  • 通过 TCP 健康检查、故障转移和转向策略配置负载平衡器,以决定流量流向。

“范围”仅适用于企业客户,需额外成本,并且按带宽使用量计费。

范围限制

最多可以创建 10 个具有唯一源的范围应用程序。 具有唯一源的每个范围应用程序都必须分配唯一的 IP 地址,并且 IP 地址是有限的资源。 如果需要超过 10 个 Range 应用程序,请打开 IBM 支持案例。 支持案例以添加更多 Range 应用程序需要复审用例,而此过程可能需要几天时间。

如果应用程序复用现有源,但使用不同的端口,那么可以创建 10 个以上的应用程序。

对于 TCP Range 应用程序,仅应用 IP 规则。 这是因为 IP 规则将应用于 OSI 层 3 和层 4。 不过,HTTP (S) Range 应用程序可与防火墙规则和 IP 规则一起使用。 一般来说,防火墙规则是针对 OSI 第 7 层( HTTP )暴露的属性设计的,如请求标头和主体内容特征。

使用控制台添加应用程序

执行以下步骤以使用 UI 添加应用程序。

  1. 导航至安全 > 范围
  2. 单击创建
  3. 从列表菜单中选择应用程序类型。 您可以选择 TCP、UDP、HTTP、HTTPS、RDP、SSH 或 Minecraft。
  4. 输入应用程序名称。 您的应用程序将与 CIS 域名上的 DNS 名称相关联。
  5. 输入边缘端口。CIS 侦听此端口上这些地址的入局连接。 与这些地址的连接将采用针对源服务器的代理。 您可以输入端口范围 (例如: 8080-8090),但源必须具有在连续范围中指定的相同数量的端口。
  6. 选择边缘 IP 连接。
  7. 在“源”部分中,输入 TCP 应用程序的源 IP 和端口。 您还可以选择现有负载均衡器及其端口。
  8. 启用 IP 防火墙(可选)。 启用后,应用程序将执行带有“阻止”或“允许列表”操作的 IP 访问规则。
  9. 启用边缘 TLS 终止 (可选)。 启用后,从列表菜单中选择要使用的 TLS 终止类型。
  10. 如果在线代理支持 PROXY 协议,请选择 PROXY 协议(可选)。 如果正在运行需要了解真实客户机 IP 的服务,那么此功能非常有用。 在大多数情况下,该设置仍为 off
  11. 单击创建

根据每个应用程序使用的带宽量,配置范围应用程序会产生额外费用。

现在,您的应用程序在磁贴或表格视图中可见,并具有以下属性:

  • 应用程序名称
  • 应用程序类
  • 边缘端口
  • TLS 边缘终止
  • 代理协议
  • 过去 1 小时的连接数(每分钟轮询)
  • 过去 1 小时的吞吐量(每分钟轮询)
  • 操作菜单操作图标(右上角)有以下选项:
    • 编辑应用程序
    • 查看指定应用程序的度量值
    • 删除应用程序

创建“范围”应用程序时,将为其分配唯一的 IPv4 和 IPv6 地址。 这些 IP 地址不是静态的,可能会发生变化。 您可以使用 DNS 来确定分配的 IP 地址。 DNS 名称总是返回分配给应用程序的 IP 地址。

查看度量值

您的应用程序现在可以通过 CIS (Cloudflare) 代理 TCP 流量。

导航至度量值 > 范围以查看应用程序的连接数和吞吐量流量。 图形最多显示 10 个应用程序的度量值。

要切换应用程序度量,请使用“图表”键或单击 选择应用程序 按钮。 要更改“度量”数据时间范围,请使用列表菜单。

查看范围应用

创建 "范围 "应用程序后,"安全 > 范围页面将填充包含以下信息的磁贴(或选择切换到表格视图):

  • 应用程序名称
  • 代理协议
  • 边缘端口
  • 源和端口
  • 过去 1 小时的连接数(每分钟轮询)
  • 过去 1 小时的吞吐量(每分钟轮询)
  • TLS 边缘终止(针对相关应用)

应用程序列表还包含一个操作菜单 操作图标 允许用户执行以下任务:

  • 编辑应用程序
  • 查看指定应用程序的度量值
    • 这将带用户进入“度量标准 > 范围”页面,该页面只显示该应用程序的度量标准。
  • 删除应用程序

API 用法示例

以下是使用“范围”创建和列出应用程序的示例。

创建 Range 应用程序

有两种方法可以在范围应用中指定原点。

  1. 原点 IP - 使用参数 origin_direct
  2. 负载平衡器 - 使用参数 origin_dnsorigin_port

对于源 IP 请求:

curl -X POST \
  https://api.cis.cloud.ibm.com/v1/<url-encoded-crn>/zones/<zone-d>/range/apps \
  -H 'X-Auth-User-Token: <token>' \
  -d '{"protocol":"tcp/22","dns":{"type":"CNAME","name":"ssh.example.com"},"origin_direct":["tcp://172.0.2.1:22"],"proxy_protocol":true,"ip_firewall":true}'

答复如下:

{
    "result": {
        "id": "4f70c3d4f20576b79135b898295e8093",
        "protocol": "tcp/22",
        "dns": {
            "type": "CNAME",
            "name": "ssh.example.com"
        },
        "origin_direct": [
            "tcp://172.0.2.1:22"
        ],
        "ip_firewall": true,
        "proxy_protocol": true,
        "created_on": "2019-01-09T17:33:09.190606Z",
        "modified_on": "2019-01-09T17:33:09.190606Z"
    },
    "success": true,
    "errors": [],
    "messages": []
}

对于负载均衡器请求:

curl -X POST \
  https://api.cis.cloud.ibm.com/v1/<url-encoded-crn>/zones/<zone-d>/range/apps \
  -H 'X-Auth-User-Token: <token>' \
  -d '{"protocol":"tcp/22","dns":{"type":"CNAME","name":"ssh.example.com"},"origin_dns": {"name": "test"},"proxy_protocol":true,"ip_firewall":true, "origin_port": 43}'

答复如下:

{
    "result": {
        "id": "4f70c3d4f20576b79135b898295e8093",
        "protocol": "tcp/22",
        "dns": {
            "type": "CNAME",
            "name": "ssh.example.com"
        },
        "origin_dns": {
          "name": "test"
        },
        "origin_port": 43,
        "ip_firewall": true,
        "proxy_protocol": true,
        "created_on": "2019-01-09T17:39:09.190606Z",
        "modified_on": "2019-01-09T17:39:09.190606Z"
    },
    "success": true,
    "errors": [],
    "messages": []
}
  • DNS 名称- 您的应用程序与您域名上的 DNS 名称相关联。
  • 协议/边缘端口- 运行应用程序的端口。 与这些地址的连接将采用针对源服务器的代理。
  • 直接原点- 应用程序的运行 IP,以及希望流量从边缘流向原点的端口。
  • IP Firewall(IP 防火墙 )- 如果启用,此范围应用程序将执行具有阻止操作的防火墙规则。
  • PROXY 协议- 如果在线代理支持 PROXY 协议,则启用 v1。 在大多数情况下,此设置保持禁用。
  • Origin DNS- 要设置为源代码的负载平衡器的名称。
  • 源端口:-服务的端口。

列出所有范围应用程序

使用以下请求来列出所有“范围”应用程序:

curl -X GET \
  https://api.cis.cloud.ibm.com/v1/<url-encoded-crn>/zones/<zone-d>/range/apps

答复如下:

{
    "result": [
        {
            "id": "4f70c3d4f20546b79135b898295e8093",
            "protocol": "tcp/22",
            "dns": {
                "type": "CNAME",
                "name": "ssh.example.com"
            },
            "origin_direct": [
                "tcp://172.0.2.1:22"
            ],
            "ip_firewall": true,
            "proxy_protocol": true,
            "created_on": "2019-01-09T17:33:09.190606Z",
            "modified_on": "2019-01-09T17:33:09.190606Z"
        }
    ],
    "success": true,
    "errors": [],
    "messages": []
}

列出特定“范围”应用程序

使用以下请求列出特定“范围”应用程序:

curl -X GET \
  https://api.cis.cloud.ibm.com/v1/<url-encoded-crn>/zones/<zone-d>/range/apps/4f70c3d4f20546b79135b898295e8093

答复如下:

  • 使用源 IP 的应用程序

    {
        "result": {
            "id": "4f70c3d4f20546b79135b898295e8093",
            "protocol": "tcp/22",
            "dns": {
                "type": "CNAME",
                "name": "ssh.example.com"
            },
            "origin_direct": [
                "tcp://172.0.2.1:22"
            ],
            "ip_firewall": true,
            "proxy_protocol": true,
            "created_on": "2019-01-09T17:33:09.190606Z",
            "modified_on": "2019-01-09T17:33:09.190606Z"
        },
        "success": true,
        "errors": [],
        "messages": []
    }
    
  • 使用负载平衡器的应用程序

    {
        "result": {
            "id": "555359036e7f4acc82d69b916f62caba",
            "protocol": "tcp/22",
            "dns": {
                "type": "CNAME",
                "name": "ssh.example.com"
            },
            "origin_dns": {
                "name": "test_update"
            },
            "origin_port": 76,
            "ip_firewall": true,
            "proxy_protocol": true,
            "created_on": "2019-01-10T22:26:47.167008Z",
            "modified_on": "2019-01-10T22:26:47.167008Z"
        },
        "success": true,
        "errors": [],
        "messages": []
    }