如何创建通配符以拒绝来自 AWS WAF 中所有 ip 的所有请求

How to create a wildcard to deny all requests from all ips in AWS WAF

我在 WAF 后面的 AWS 中的 ECS 实例中获得了一个微服务,我想创建这些规则:

  1. 允许特定 IP(完成)
  2. 允许来自 VPN 内部的所有连接(完成)
  3. 拒绝所有其他请求。

前两个 IP 集已创建,但我无法使最后一个工作。我尝试使用 0.0.0.0/0 和其他组合创建 IP 集,但没有成功。

这是我的代码,我删除了 ipset 1 和 2(正在运行),这是 ipset 3:

resource "aws_wafv2_ip_set" "ipset" {
  name = "${var.app_name}-${var.environment_name}-whitelist-ips"

  scope              = "REGIONAL"
  ip_address_version = "IPV4"

  addresses = ["0.0.0.0/0"]
}

module "alb_wafv2" {
  source = "trussworks/wafv2/aws"
  version = "~> 2.0"

  name = "${var.app_name}-${var.environment_name}"
  scope = "REGIONAL"
  alb_arn = aws_lb.app_lb.arn
  associate_alb = true

  ip_sets_rule = [
    {
      name       = "${var.app_name}-${var.environment_name}-ip-blacklist"
      action     = "deny"
      priority   = 1
      ip_set_arn = aws_wafv2_ip_set.ipset.arn
    }
  ]
}
{
  RespMetadata: {
    StatusCode: 400,
    RequestID: "c98b2d3a-ebd0-44e0-a80a-702bc698598b"
  },
  Field: "IP_ADDRESS",
  Message_: "Error reason: The parameter contains formatting that is not valid., field: IP_ADDRESS, parameter: 0.0.0.0/0",
  Parameter: "0.0.0.0/0",
  Reason: "The parameter contains formatting that is not valid."
}

尝试从 AWS 控制台创建 IP 集但出现相同错误:

所以我有两个问题,第一,我该怎么做?第二个,这是最好的方法吗?

提前致谢

您不能阻止所有地址 (CIDR /0)。 不支持。来自 docs:

AWS WAF supports all IPv4 and IPv6 CIDR ranges except for /0.

相反,您可以使用网络 ACL 来拒绝所有流量或安全组。

考虑使用此技巧绕过 0.0.0.0/0 限制:
将 IPv4 地址 space 分成两块:0.0.0.0/1 和 128.0.0.0/1

以下 Terraform 片段已被接受,IP 集由 TF(Terraform 0.15.4 和 aws 提供商版本 3.42.0)创建:

resource "aws_wafv2_ip_set" "ipset" {
  name = "all_internet_kludge"

  scope              = "REGIONAL"
  ip_address_version = "IPV4"

  addresses = ["0.0.0.0/1", "128.0.0.0/1"]
}

您不需要阻止 0.0.0.0/0。创建两个 IP 规则后,在 WAF 控制台上查看“不匹配任何规则的请求的默认 Web ACL 操作”并将操作设置为阻止。