如何创建通配符以拒绝来自 AWS WAF 中所有 ip 的所有请求
How to create a wildcard to deny all requests from all ips in AWS WAF
我在 WAF 后面的 AWS 中的 ECS 实例中获得了一个微服务,我想创建这些规则:
- 允许特定 IP(完成)
- 允许来自 VPN 内部的所有连接(完成)
- 拒绝所有其他请求。
前两个 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 操作”并将操作设置为阻止。
我在 WAF 后面的 AWS 中的 ECS 实例中获得了一个微服务,我想创建这些规则:
- 允许特定 IP(完成)
- 允许来自 VPN 内部的所有连接(完成)
- 拒绝所有其他请求。
前两个 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 操作”并将操作设置为阻止。