commit 5e3d71294d28aa7d4cbde9bddedb4e41fe7cd575 Author: mr0xb <47467008+mr0xb@users.noreply.github.com> Date: Sun May 24 02:51:15 2026 -0400 initial commit diff --git a/terraform/unifi/dns.tf b/terraform/unifi/dns.tf new file mode 100644 index 0000000..d7b6f10 --- /dev/null +++ b/terraform/unifi/dns.tf @@ -0,0 +1,29 @@ +resource "unifi_static_dns" "home_assistant" { + key = "ha.local" + value = "192.168.1.206" + record_type = "A" + enabled = true +} + +resource "unifi_static_dns" "debmini" { + key = "debmini.local" + value = "192.168.1.206" + record_type = "A" + enabled = true +} + +resource "unifi_static_dns" "pihole" { + key = "pihole.local" + value = "192.168.1.207" + record_type = "A" + enabled = true +} + +resource "unifi_static_dns" "imagevault" { + key = "imagevault.local" + value = "192.168.1.208" + record_type = "A" + enabled = true +} + + diff --git a/terraform/unifi/firewall.tf b/terraform/unifi/firewall.tf new file mode 100644 index 0000000..5ed0d32 --- /dev/null +++ b/terraform/unifi/firewall.tf @@ -0,0 +1,45 @@ +resource "unifi_firewall_rule" "block_iot_to_trusted" { + name = "Isolate IOT" + ruleset = "LAN_IN" + action = "drop" + protocol = "all" + + src_network_id = unifi_network.iot.id + src_network_type = "NETv4" + dst_network_id = unifi_network.trusted.id + dst_network_type = "NETv4" + + state_new = true + state_established = false + state_invalid = true + state_related = false +} + +resource "unifi_firewall_rule" "allow_trusted_to_iot" { + name = "Allow Trusted to IOT" + ruleset = "LAN_IN" + action = "accept" + protocl = "all" + + src_network_id = unifi_network.trusted.id + src_network_type = "NETv4" + dst_network_id = unifi_network.iot.id + dst_network_type = "NETv4" +} + +resource "unifi_firewall_rule" "block_iot_to_trusted" { + name = "Isolate IOT" + ruleset = "LAN_IN" + action = "drop" + protocol = "all" + + src_network_id = unifi_network.iot.id + src_network_type = "NETv4" + dst_network_id = unifi_network.trusted.id + dst_network_type = "NETv4" + + state_new = true + state_established = false + state_invalid = true + state_related = false +} diff --git a/terraform/unifi/main.tf b/terraform/unifi/main.tf new file mode 100644 index 0000000..5142d16 --- /dev/null +++ b/terraform/unifi/main.tf @@ -0,0 +1,9 @@ +provider "unifi" { + username = var.username + password = var.password + api_url = var.api_url + + # site = "express7" + + allow_insecure = true +} \ No newline at end of file diff --git a/terraform/unifi/networks.tf b/terraform/unifi/networks.tf new file mode 100644 index 0000000..10a9dcd --- /dev/null +++ b/terraform/unifi/networks.tf @@ -0,0 +1,18 @@ +resource "unifi_network" "trusted" { + name = "Trusted" + vlan_id = 10 + subnet = "192.168.10.1/24" +} + +resource "unifi_network" "iot" { + name = "IOT" + vlan_id = 20 + subnet = "192.168.1.20.1/24" +} + +resource "unifi_network" "guest" { + name = "Guest" + vlan_id = 30 + subnet = "192.168.1.30.1/24" + purpose = "Guest" +} \ No newline at end of file diff --git a/terraform/unifi/port_foward.tf b/terraform/unifi/port_foward.tf new file mode 100644 index 0000000..639f632 --- /dev/null +++ b/terraform/unifi/port_foward.tf @@ -0,0 +1,22 @@ +resource "unifi_port_forward" "rev_proxy_https" { + name = "UVC_HTTPs_ChooChoo" + enabled = true + port_forward_interface = "wan" + src_ip = "any" + dst_port = "443" + fwd_ip = "192.168.1.206" + fwd_port = "443" + protocol = "tcp" + log = true +} + +resource "unifi_port_forward" "rev_proxy_http" { + name = "UVC_HTTP_ChooChoo" + enabled = true + port_forward_interface = "wan" + src_ip = "any" + dst_port = "80" + fwd_ip = "192.168.1.206" + fwd_port = "80" + protocol = "tcp" +} \ No newline at end of file diff --git a/terraform/unifi/vault.tf b/terraform/unifi/vault.tf new file mode 100644 index 0000000..87b23b5 --- /dev/null +++ b/terraform/unifi/vault.tf @@ -0,0 +1,9 @@ +resource "vault_mount" "kvv2" { + path = "secret" + type = "kv" + options = { version = "2" } +} + +data "vault_kv_secret" "networking" { + path = "${vault_mount.kvv2.path}/networking" +} \ No newline at end of file diff --git a/terraform/unifi/wifi.tf b/terraform/unifi/wifi.tf new file mode 100644 index 0000000..bb666b6 --- /dev/null +++ b/terraform/unifi/wifi.tf @@ -0,0 +1,20 @@ +resource "unifi_ap_group" "default" { + name = "Default AP Group" + for_wlanconf = true +} + +resource "unifi_wlan" "main" { + name = data.vault_kv_secret.networking.data["main_ap_ssid"] + passphrase = data.vault_kv_secret.networking.data["main_ap_pass"] + security = "wpapsk" + ap_group_ids = [unifi_ap_group.default.id] + network_conf_id = unifi_network.trusted.id +} + +resource "unifi_wlan" "iot" { + name = data.vault_kv_secret.networking.data["iot_ap_ssid"] + passphrase = data.vault_kv_secret.networking.data["iot_ap_pass"] + security = "wpapsk" + ap_group_ids = [unifi_ap_group.default.id] + network_conf_id = unifi_network.iot.id +} \ No newline at end of file diff --git a/terraform/vault-debmini/approles.hcl b/terraform/vault-debmini/approles.hcl new file mode 100644 index 0000000..694e57f --- /dev/null +++ b/terraform/vault-debmini/approles.hcl @@ -0,0 +1,21 @@ +resource "vault_auth_backend" "approle" { + type = "approle" +} + +resource "vault_approle_auth_backend_role" "unifi" { + backend = vault_auth_backend.approle.path + role_name = "unifi-role" + token_policies = ["default", "networking"] +} + +resource "vault_approle_auth_backend_role "iot" { + backend = vault_auth_backend.approle.path + role_name = "iot-role" + token_policies = ["default", "iot"] +} + +resource "vault_approle_auth_backend_role "infra_tools" { + backend = vault_auth_backend.approle.path + role_name = "infra-role" + token_policies = ["default", "infra_tools"] +} \ No newline at end of file diff --git a/terraform/vault-debmini/main.tf b/terraform/vault-debmini/main.tf new file mode 100644 index 0000000..c9ae9a0 --- /dev/null +++ b/terraform/vault-debmini/main.tf @@ -0,0 +1,66 @@ +resource "vault_token" "superuser" { + policies = ["super-user"] + display_name = "superuser" + renewable = true + ttl = "768h" + metadata = { + "purpose" = "service account for managing vault" + } + lifecycle { + create_before_destroy = true + } +} + +resource "vault_policy" "super_user" { + name = "super-user" + policy = <