init
This commit is contained in:
parent
3a52600b71
commit
3d41ad21cf
9 changed files with 407 additions and 0 deletions
21
00-provider.tf
Normal file
21
00-provider.tf
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Define required providers
|
||||||
|
terraform {
|
||||||
|
required_version = ">= 0.14.0"
|
||||||
|
required_providers {
|
||||||
|
openstack = {
|
||||||
|
source = "terraform-provider-openstack/openstack"
|
||||||
|
version = "1.52.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Configure the OpenStack Provider
|
||||||
|
provider "openstack" {
|
||||||
|
user_name = var.USERNAME
|
||||||
|
tenant_id = var.TENANTID
|
||||||
|
user_domain_name = "portal_mvp"
|
||||||
|
project_domain_id = "portal_mvp"
|
||||||
|
password = var.PASSWORD
|
||||||
|
auth_url = "https://keystone.api.iaas.eu01.stackit.cloud/v3/"
|
||||||
|
region = "RegionOne"
|
||||||
|
}
|
||||||
48
01-config.tf
Normal file
48
01-config.tf
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#
|
||||||
|
# Custom User Settings
|
||||||
|
#
|
||||||
|
|
||||||
|
# OpenStack Availability Zone
|
||||||
|
variable "zone" {
|
||||||
|
type = string
|
||||||
|
description = ""
|
||||||
|
default = "eu01-m"
|
||||||
|
}
|
||||||
|
|
||||||
|
# OpenStack VM Flavor
|
||||||
|
variable "flavor" {
|
||||||
|
type = string
|
||||||
|
description = ""
|
||||||
|
default = "c1.2"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Local VPC Subnet to create OpenStack Network
|
||||||
|
variable "LOCAL_SUBNET" {
|
||||||
|
type = string
|
||||||
|
description = ""
|
||||||
|
default = "10.0.0.0/24"
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# System Settings (do not edit)
|
||||||
|
#
|
||||||
|
|
||||||
|
# OpenStack UAT Username
|
||||||
|
variable "USERNAME" {
|
||||||
|
type = string
|
||||||
|
description = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# OpenStack Project ID
|
||||||
|
variable "TENANTID" {
|
||||||
|
type = string
|
||||||
|
description = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# OpenStack UAT Password
|
||||||
|
variable "PASSWORD" {
|
||||||
|
type = string
|
||||||
|
description = ""
|
||||||
|
}
|
||||||
9
02-pfsense-image.tf
Normal file
9
02-pfsense-image.tf
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Upload VPN Appliance Image to OpenStack
|
||||||
|
resource "openstack_images_image_v2" "pfsense_image" {
|
||||||
|
name = "pfsense-2.7.0-amd64-image"
|
||||||
|
image_source_url = "https://pfsense.object.storage.eu01.onstackit.cloud/pfsense-ce-2.7.0-amd64-14-08-2023.qcow2"
|
||||||
|
web_download = true
|
||||||
|
container_format = "bare"
|
||||||
|
disk_format = "qcow2"
|
||||||
|
visibility = "shared"
|
||||||
|
}
|
||||||
69
03-pfsense-network.tf
Normal file
69
03-pfsense-network.tf
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
# Create vNET Networks
|
||||||
|
resource "openstack_networking_network_v2" "vpc_network" {
|
||||||
|
name = "VPC Network"
|
||||||
|
description = "Local Peering VPC Network"
|
||||||
|
admin_state_up = "true"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_network_v2" "wan_network" {
|
||||||
|
name = "WAN Network"
|
||||||
|
description = "Transfer Net for binding FloatingIPs"
|
||||||
|
admin_state_up = "true"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create Subnets
|
||||||
|
resource "openstack_networking_subnet_v2" "vpc_subnet_1" {
|
||||||
|
name = "vpc_subnet"
|
||||||
|
description = "Local VPC Network"
|
||||||
|
network_id = openstack_networking_network_v2.vpc_network.id
|
||||||
|
cidr = var.LOCAL_SUBNET
|
||||||
|
ip_version = 4
|
||||||
|
dns_nameservers = [
|
||||||
|
"208.67.222.222",
|
||||||
|
"9.9.9.9",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_subnet_v2" "wan_subnet_1" {
|
||||||
|
name = "wan_subnet"
|
||||||
|
description = "WAN Network"
|
||||||
|
network_id = openstack_networking_network_v2.wan_network.id
|
||||||
|
cidr = "100.96.96.0/25"
|
||||||
|
ip_version = 4
|
||||||
|
dns_nameservers = [
|
||||||
|
"208.67.222.222",
|
||||||
|
"9.9.9.9",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create OpenStack Router
|
||||||
|
|
||||||
|
resource "openstack_networking_router_v2" "vpc_router" {
|
||||||
|
name = "vpc_router"
|
||||||
|
description = "VPC Router"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_router_interface_v2" "vpc_router_interface_1" {
|
||||||
|
router_id = openstack_networking_router_v2.vpc_router.id
|
||||||
|
subnet_id = openstack_networking_subnet_v2.vpc_subnet_1.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_router_v2" "wan_router" {
|
||||||
|
name = "wan_router"
|
||||||
|
description = "WAN Router"
|
||||||
|
external_network_id = "970ace5c-458f-484a-a660-0903bcfd91ad"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create Router interfaces
|
||||||
|
resource "openstack_networking_router_interface_v2" "wan_router_interface_1" {
|
||||||
|
router_id = openstack_networking_router_v2.wan_router.id
|
||||||
|
subnet_id = openstack_networking_subnet_v2.wan_subnet_1.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create static routing entry for VPC Traffic to hit the pfSense instead of the default gateway
|
||||||
|
resource "openstack_networking_router_route_v2" "vpc_router_route_1" {
|
||||||
|
depends_on = [openstack_networking_router_interface_v2.vpc_router_interface_1]
|
||||||
|
router_id = openstack_networking_router_v2.vpc_router.id
|
||||||
|
destination_cidr = "0.0.0.0/0"
|
||||||
|
next_hop = openstack_compute_instance_v2.instance_fw.network.1.fixed_ip_v4
|
||||||
|
}
|
||||||
66
04-pfsense-appliance.tf
Normal file
66
04-pfsense-appliance.tf
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Create root Volume
|
||||||
|
resource "openstack_blockstorage_volume_v3" "fw_root_volume" {
|
||||||
|
name = "pfsense-2.7.0-root"
|
||||||
|
description = "Root Volume"
|
||||||
|
size = 32
|
||||||
|
image_id = openstack_images_image_v2.pfsense_image.id
|
||||||
|
availability_zone = var.zone
|
||||||
|
volume_type = "storage_premium_perf4"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create virtual Server
|
||||||
|
resource "openstack_compute_instance_v2" "instance_fw" {
|
||||||
|
name = "pfSense" # Server name
|
||||||
|
flavor_name = var.flavor
|
||||||
|
availability_zone = var.zone
|
||||||
|
|
||||||
|
block_device {
|
||||||
|
uuid = openstack_blockstorage_volume_v3.fw_root_volume.id
|
||||||
|
source_type = "volume"
|
||||||
|
destination_type = "volume"
|
||||||
|
boot_index = 0
|
||||||
|
delete_on_termination = true
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
port = openstack_networking_port_v2.wan_port_1.id
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
port = openstack_networking_port_v2.vpc_port_1.id
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Network Ports
|
||||||
|
resource "openstack_networking_port_v2" "wan_port_1" {
|
||||||
|
name = "FW WAN Port"
|
||||||
|
network_id = openstack_networking_network_v2.wan_network.id
|
||||||
|
admin_state_up = "true"
|
||||||
|
port_security_enabled = "false"
|
||||||
|
fixed_ip {
|
||||||
|
subnet_id = openstack_networking_subnet_v2.wan_subnet_1.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_port_v2" "vpc_port_1" {
|
||||||
|
name = "FW VPC Port"
|
||||||
|
network_id = openstack_networking_network_v2.vpc_network.id
|
||||||
|
admin_state_up = "true"
|
||||||
|
port_security_enabled = "false"
|
||||||
|
fixed_ip {
|
||||||
|
subnet_id = openstack_networking_subnet_v2.vpc_subnet_1.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Add FloatingIP
|
||||||
|
resource "openstack_networking_floatingip_v2" "fip" {
|
||||||
|
pool = "floating-net"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_compute_floatingip_associate_v2" "fip" {
|
||||||
|
floating_ip = openstack_networking_floatingip_v2.fip.address
|
||||||
|
instance_id = openstack_compute_instance_v2.instance_fw.id
|
||||||
|
fixed_ip = openstack_compute_instance_v2.instance_fw.network.0.fixed_ip_v4
|
||||||
|
}
|
||||||
48
README.md
Normal file
48
README.md
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# STACKIT pfSense Deployment
|
||||||
|
|
||||||
|
Terraform script to deploy an pfSense firewall into STACKIT Cloud.
|
||||||
|
|
||||||
|
Deployment overview:
|
||||||
|

|
||||||
|
|
||||||
|
The Terraform deployment consists of:
|
||||||
|
+ WAN Network
|
||||||
|
+ WAN Router with external RouterIP
|
||||||
|
+ LAN Network
|
||||||
|
+ LAN Router with static default gateway router to the pfSense firewall
|
||||||
|
+ pfSense firewall VM + disk volume
|
||||||
|
+ FloatingIP for firewall VM
|
||||||
|
+ deactivating port security on firewall ports
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
**Requirements:**
|
||||||
|
+ Terraform installed
|
||||||
|
+ Access to a STACKIT project
|
||||||
|
+ UAT (OpenStack) credentials
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
1. Clone Repo
|
||||||
|
1. Setup enviroment (.env) variables
|
||||||
|
1. Run Terraform `terraform apply`
|
||||||
|
|
||||||
|
## Configure Access to the WebUI
|
||||||
|
In order to access the pfSense WebUI you need to configure the Appliance via the webVNC console first.
|
||||||
|
|
||||||
|
### Interface Mapping
|
||||||
|
The pfSense is asking for WAN and LAN interfaces.
|
||||||
|
WAN must be mapped to `vtnet0` LAN to `vtnet1`
|
||||||
|
|
||||||
|
### Enable WebUI Access
|
||||||
|
In the menu overview enter the Shell and type in the following two commands.
|
||||||
|
|
||||||
|
1. To disable the http referer check
|
||||||
|
```bash
|
||||||
|
pfSsh.php playback disablereferercheck
|
||||||
|
```
|
||||||
|
1. Allow access from WAN to the WebUI
|
||||||
|
```bash
|
||||||
|
pfSsh.php playback enableallowallwan
|
||||||
|
```
|
||||||
|
> Keep in mind this rule creates an any to any (allow all) rule to the WAN interface. Please restrict the access again asap.
|
||||||
|
|
||||||
|
Now you can enter the WebUI via the FloatingIP on port 443 the default login is `admin:pfsense`
|
||||||
33
deployment.d2
Normal file
33
deployment.d2
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
Internet: {
|
||||||
|
shape: image
|
||||||
|
icon: https://styleguide.stackit.schwarz/assets/imagery/networks.svg
|
||||||
|
}
|
||||||
|
|
||||||
|
Internet -> Project.WAN Network
|
||||||
|
|
||||||
|
Project: {
|
||||||
|
style: {
|
||||||
|
stroke: black
|
||||||
|
font-color: "#004E5A"
|
||||||
|
fill: "#F8EC17"
|
||||||
|
opacity: 0.8
|
||||||
|
}
|
||||||
|
WAN Network: {
|
||||||
|
shape: image
|
||||||
|
icon: https://styleguide.stackit.schwarz/assets/imagery/networks.svg
|
||||||
|
}
|
||||||
|
LAN Network: {
|
||||||
|
shape: image
|
||||||
|
icon: https://styleguide.stackit.schwarz/assets/imagery/networks.svg
|
||||||
|
}
|
||||||
|
Firewall: {
|
||||||
|
shape: image
|
||||||
|
icon: https://styleguide.stackit.schwarz/imagery/firewall.svg
|
||||||
|
}
|
||||||
|
WAN Network -> Firewall -> LAN Network
|
||||||
|
App: {
|
||||||
|
shape: image
|
||||||
|
icon: https://styleguide.stackit.schwarz/imagery/virtual-machine.svg
|
||||||
|
}
|
||||||
|
LAN Network -> App
|
||||||
|
}
|
||||||
107
deployment.svg
Normal file
107
deployment.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 46 KiB |
6
example.env
Normal file
6
example.env
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# UAT Username
|
||||||
|
export TF_VAR_USERNAME=
|
||||||
|
# UAT Password
|
||||||
|
export TF_VAR_PASSWORD=
|
||||||
|
# OpenStack (not STACKIT) project id
|
||||||
|
export TF_VAR_TENANTID=
|
||||||
Loading…
Reference in a new issue