modules/firewall/main.tf (77 lines of code) (raw):
# Create a public Ip for the firewall
resource "azurerm_public_ip" "firewall_public_ip" {
name = "fw-pip"
location = var.location
resource_group_name = var.resource_group_name
allocation_method = "Static"
sku = "Standard"
ip_tags = {}
zones = ["1", "2", "3"]
tags = var.tags
}
# Create the firewall
resource "azurerm_firewall" "firewall" {
name = var.firewall_name
location = var.location
resource_group_name = var.resource_group_name
firewall_policy_id = azurerm_firewall_policy.policy.id
sku_name = "AZFW_VNet"
sku_tier = "Standard"
tags = var.tags
ip_configuration {
name = "configuration"
subnet_id = var.firewall_subnet_id
public_ip_address_id = azurerm_public_ip.firewall_public_ip.id
}
depends_on = [
azurerm_firewall_policy_rule_collection_group.policies
]
}
resource "azurerm_firewall_policy" "policy" {
name = "firewall-policy"
location = var.location
resource_group_name = var.resource_group_name
tags = var.tags
dns {
proxy_enabled = true
}
}
resource "azurerm_firewall_policy_rule_collection_group" "policies" {
name = "contoso"
firewall_policy_id = azurerm_firewall_policy.policy.id
priority = 100
network_rule_collection {
name = "to-dns"
priority = 100
action = "Allow"
rule {
name = "dns"
source_addresses = ["*"]
destination_ports = [53]
destination_addresses = var.dns_address_prefixes
protocols = ["TCP"]
}
}
network_rule_collection {
name = "to-app-gateway"
priority = 200
action = "Allow"
rule {
name = "to-app-gateway"
source_addresses = var.contoso_address_prefixes
destination_ports = [80, 443, 5671, 5672, 1433, 5432]
destination_addresses = var.gateway_address_prefixes
protocols = ["TCP"]
}
}
network_rule_collection {
name = "to-internet"
priority = 300
action = "Allow"
rule {
name = "to-internet"
source_addresses = var.contoso_address_prefixes
destination_ports = ["*"]
destination_addresses = ["0.0.0.0/0"]
protocols = ["TCP"]
}
}
}