Skip to content

Commit

Permalink
Merge pull request #266 from silinternational/waf-rule
Browse files Browse the repository at this point in the history
add a firewall rule to skip Bot Fight Mode
  • Loading branch information
briskt authored Oct 30, 2024
2 parents 8c5d9c8 + b16b15b commit 3da766b
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 0 deletions.
3 changes: 3 additions & 0 deletions terraform/010-cluster/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ ssl certificate, core application load balancer, and a CloudWatch log group
- Locate ACM certificate for use in ALB listeners
- Create application load balancer (ALB)
- Create CloudWatch log group
- Optionally create a Cloudwatch dashboard
- Optionally create a NAT gateway
- Create a Cloudflare rule to allow access to the NAT gateway (if enabled)

## Required Inputs

Expand Down
30 changes: 30 additions & 0 deletions terraform/010-cluster/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,33 @@ module "ecs-service-cloudwatch-dashboard" {
}

data "aws_region" "current" {}


resource "cloudflare_ruleset" "nat" {
count = var.create_nat_gateway ? 1 : 0

zone_id = data.cloudflare_zone.this.id
name = "Bypass bot protection"
description = "Skip super bot fight mode to ensure id-broker can access MFA API"
kind = "zone"
phase = "http_request_firewall_custom"

rules {
action = "skip"
expression = "(ip.src eq ${module.vpc.nat_gateway_ip})"
description = "skip outbound NAT gateway IP address"
enabled = true
action_parameters {
phases = [
"http_request_sbfm"
]
}
logging {
enabled = true
}
}
}

data "cloudflare_zone" "this" {
name = var.cloudflare_domain
}
6 changes: 6 additions & 0 deletions terraform/010-cluster/vars.tf
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ variable "cert_domain_name" {
type = string
}

variable "cloudflare_domain" {
description = "The base domain name to be used for Cloudflare resources, e.g. example.net"
type = string
default = ""
}

variable "create_dashboard" {
description = "Set to false to remove the Cloudwatch Dashboard"
type = bool
Expand Down
7 changes: 7 additions & 0 deletions terraform/010-cluster/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,12 @@ terraform {
source = "hashicorp/aws"
version = ">= 4.0.0, < 6.0.0"
}
cloudflare = {
source = "cloudflare/cloudflare"

// 4.39.0 deprecated cloudflare_record.value
// While waiting for version 5 to mature, we'll constrain to earlier versions.
version = ">= 2.0.0, < 4.39.0"
}
}
}
1 change: 1 addition & 0 deletions test/010-cluster.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module "cluster" {
aws_instance = { a = "b" }
aws_zones = [""]
cert_domain_name = ""
cloudflare_domain = ""
create_nat_gateway = true
ecs_cluster_name = ""
ecs_instance_profile_id = ""
Expand Down

0 comments on commit 3da766b

Please sign in to comment.