Instalar PFSense en Azure

Para poder disponer un Firewall en Azure para laboratorio o lo que necesitemos sin coste adicional, tenemos la posibilidad de subir una maquina con PFSense y pagar solo el coste de CPU y HD en Azure

Requisitos

Para instalar y desplegar nuestra maquina necesitaremos:

  • Suscripcion en Azure con permisos suficientes para subir nuestra maquina y desplegarla.
  • Azure Storage Account.
  • Equipo Windows Con rol de Hyper-V instalado.
  • Descargar ultima versión Pfsense – https://www.pfsense.org/download/

Crear y configurar VM

Los pasos para crear, instalar y configurar nuestro PFsense sera los siguientes

Crear Disco Duro

Primero crearemos un disco duro con el formato adecuado para subirlo despues a Azure.

  • Formato: VHD
  • Tipo: Fixed
  • Tamaño: 8Gb

Pincharemos en nuestro Hyper-V, “New” y “Hard Disk…”


Seleccionamos “VHD”

Tipo seleccionamos “Fixed”


Especificamos el nombre del disco y la ubicación.


Tamaño pondremos 8 GB


Ya estamos listos para crear el disco.

Creación VM

Ahora creamos nuestra maquina y le agregaremos el Disco creado anteriormente.

Pincharemos en nuestro Hyper-V, “New” y “Virtual Machines…”


Introducimos el nombre de la VM.

Podemos modificar la localización de la maquina si es necesario.


Seleccionamos tipo “Generation 1”.


Memoria 1024 Mb suficiente.


Seleccionamos la Virtual Network con conexion a internet.


Seleccionamos el disco que creamos anteriormente.


VM lista para ser creada.

Hardware Adicional

Necesitaremos agregar una segunda tarjeta de Red a nuestra maquina virtual, 1 para WAN y otra para LAN.

Pinchamos en “Add Hardware”.

Seleccionamos “Network Adapter”.

Pinchamos en “Add”.

Nos agregara una nueva tarjeta de Red.

Desplegamos en Virtual Switch y seleccionamos nuestro Virtual Switch.

Instalación PFSense

Ahora instalaremos el PFsense de forma generica.

Nos conectaremos a la VM.

Pincharemos en Media > “DVD Drive” > “Insert Disk…”

Seleccionamos la ISO de PFsense.

Pulsamos en “Start”


Esperamos que arranque.

Pulsamos en “Accept”.


Seleccionamos Install y pulsamos “Enter”


Por defecto el idioma sera “US”, prodremos bajar y buscar nuestro idioma para el teclado.


Pulsamos en “Auto (ZFS)”.


Pulsamos “Enter”.


Seleccionamos “Stripe” y “OK”


Marcamos el disco con la “Tecla espacio”.


Pulsamos “Y” o nos movemos a “YES”.


Comenzara a instalar


Seleccionamos “No”.

Seleccionamos “Reboot”.

Volvemos a pinchar en “Media” > DVD Drive > Eject …

Configuración PFsense

Ahora configuraremos nuestra red para el PFsense. (usuario por Defecto “admin” y password “pfsense” sin comillas)

En “Should VLAN…” pulsamos n o Enter.

Tarjeta WAN será “hn0”

Tarjeta LAN será “hn1”

pulsamos “y” para continuar.


Una vez arranque, seleccionamos la opción 2


Pulsamos 2 para configurar la red LAN.

Introducimos una IP libre de nuestra red “192.168.1.52” la mia.

Introducimos la mascara, “24”

Pulsamos ENTER para las dos siguientes opciones.

Pulsamos “n” para DHCP server.


En la pregunta de “… revert to HTTP as the webC…” pulsamos en “n”.

Nos aparecera la IP para poder conectarnos al FW.

Instalar Azure WAagentLinux

WAagentLinux es el agente que utiliza azure para recopilar informacion, instalar nuevas extensiones, crear usuario en el sistema,… GitHub – Azure/WALinuxAgent: Microsoft Azure Linux Guest Agent

Habilitaremos el SSH desde la consola con el Nº 14.

Habilitar SSHD

Abriremos una conexión por putty a nuestro PFsense. (usuario por Defecto “admin” y password “pfsense” sin comillas)

Download PuTTY: latest release (0.76) (greenend.org.uk)

Seleccionamos la opción 8 para entra al shell.


Lo primero sera actualizar el PFSense

pkg upgrade

Instalamos Bash y git

pkg install -y sudo bash git

Listamos la carpetas para ver la versión de Python instalada. Creamos un link symbolico a la versión existente.

ls -l /usr/local/bin/py*
ln -s /usr/local/bin/python3.8 /usr/local/bin/python

Entramos a la carpeta tmp, descargamos del repositorio de Git

cd /tmp
git clone https://github.com/Azure/WALinuxAgent.git
cd WALinuxAgent

Listamos las versión y buscamos la ultima existente.

git tag

Seleccionamos la versión a instalar.

git checkout v2.6.0.2

Instalamos el WAagentLinux.

python setup.py install

Crearemos accesos simbolicos, configuraremos servicio y permisos.

ln -sf /usr/local/sbin/waagent /usr/sbin/waagent
ln -sf /usr/local/sbin/waagent2.0 /usr/sbin/waagent2.0
echo '#! /bin/sh' >> /usr/local/etc/rc.d/waagent.sh
echo '/usr/local/sbin/waagent --daemon' >> /usr/local/etc/rc.d/waagent.sh
chmod +x /usr/local/etc/rc.d/waagent.sh

Por ultimo habilitamos el agente.

echo "y" | /usr/local/sbin/waagent -deprovision+user
echo 'waagent_enable="YES"' >> /etc/rc.conf.local
pkg upgrade
pkg install -y sudo bash git
ls -l /usr/local/bin/py*
ln -s /usr/local/bin/python3.8 /usr/local/bin/python
cd /tmp
git clone https://github.com/Azure/WALinuxAgent.git
cd WALinuxAgent
git tag
git checkout v2.6.0.2
python setup.py install
ln -sf /usr/local/sbin/waagent /usr/sbin/waagent
ln -sf /usr/local/sbin/waagent2.0 /usr/sbin/waagent2.0
echo '#! /bin/sh' >> /usr/local/etc/rc.d/waagent.sh
echo '/usr/local/sbin/waagent --daemon' >> /usr/local/etc/rc.d/waagent.sh
chmod +x /usr/local/etc/rc.d/waagent.sh
echo "y" | /usr/local/sbin/waagent -deprovision+user
echo 'waagent_enable="YES"' >> /etc/rc.conf.local

Configurar Red LAN DHCP

Por ultimo, accederemos al FW via web para cambiar la red LAN a DHCP, tedremos que realizar el asistente la primera vez. (usuario por defecto “admin” y password “pfsense” sin comillas)

Introducimos Nombre, dominio y DNS. (Podremos realizarlo una vez este en Azure)

Configuramos el NTP y zona horaria. (Podremos realizarlo una vez este en Azure)

Dejamos la configuración WAN con DHCP

Dejamos la IP actual de Red LAN

Ponemos una contraseña nueva para el usuario Admin.

Pulsamos en Reload, para aplicar los cambios.

Ya tendremos el Wizard terminado.

Pinchamos en la barra superior en “Interfaces” > “LAN”

Cambiamos “IPv4 Configuration Type” a DHCP.

Aplicamos los cambios. (Perderemos la conexión con la maquina)

Abrimos la consola de Hyper-v y Seleccionamos la opción 6 para apagar la maquina.

La maquina esta lista para subir a Azure.

Despliegue PFSense en Azure

Upload de VHD

Ahora vamos a subir el fichero VHD a un storage account para poder crear nuestra maquina en Azure, vamos a comentar dos manera con comandos de powershell o via consola.

Subir fichero con GUI

Vamos a ver como hacerlo de manera grafica.

Creación Storage Account

Para poder subir el VHD necesitaremos un Storage Account en Azure.

Dentro de nuestro Resource Group, crearemos un recurso de “Storage Account”.

Introducimos un nombre libre (con numeros y minusculas), tipo de redundancia LRS, el resto de configuraciones las podemos dejar por defecto.

Subir fichero con Storage Explorer

Para subir el fichero necesitaremos descargarnos la aplicación Azure Storage Explorer.

Explorador de Azure Storage: administración de almacenamiento en nube | Microsoft Azure

Pulsamos en “Add an account…” para agregar nuestra cuenta de Azure

Seleccionamos el tipo de cuenta la primera opción “Add an Azure Account”

Nos abrira un Pop-up para validarnos en microsoft.

Si todo fue bien, podremos ver nuestro Storage, Creamos un Blob Container (una carpeta) con el nombre “vhd” (al gusto).

Dentro del container, pulsamos sobre “Upload” y “Upload files”.

Seleccionamos el fichero vhd y “blob type:” PAGE BLOB.

Esperamos que suba y listo, ya tenemos el fichero en Azure.

Subir fichero con Powershell

Instalaremos Azure Powershell en nuestro equipo si no lo tenemos.

Install the Azure Az PowerShell module | Microsoft Docs

Al abrir la consola de Powershell, nos conectaremos a azure, si tenemos mas de una suscripción seleccionamos la que utilizaremos.

Connect-AzAccount
Get-AzSubscription
Select-AzSubscription -SubscriptionName "Nombre de la Suscripción"
Crear Storage Account

Si tenemos ya un Storage Account, podermos listar y seleccionarlo o crear uno nuevo si es necesario.

Ver Storage Account existentes.

Get-AzStorageAccount
#Seleccionar Storage Account existente
$StorageAccount = Get-AzStorageAccount -StorageAccountName mordorworldpfsense -ResourceGroupName Demo-HUB
$Ctx = $StorageAccount.Context

Para crear uno nuevo necesitaremos varios valores

  • Resource Group, Nombre del resource group.
  • Localización, Localización de azure.
  • SKU, Redundancia.
  • Nombre del storage.
#Listado de los Resource Group del Tenant.
Get-AzResourceGroup | select ResourceGroupName
# Listado de las localizaciones exitentes.
Get-AzLocation | Select-Object -Property Location

$Storage = @{
  ResourceGroupName = 'Grupo de recursos'
  Name              = 'mordorworldpfsense'
  SkuName           = 'Standard_LRS'
  Location          = 'northeurope'
}
$StorageAccount = New-AzStorageAccount @Storage
$Ctx = $StorageAccount.Context
Creación Storage Account
Creación Container

Crearemos un container para subir el Fichero.

$ContainerName = 'vhd' #minusculas
New-AzStorageContainer -Name $ContainerName -Context $Ctx -Permission Blob
Subir VHD

Por ultimo subiremos el fichero al container.

$PFsense = @{
  File             = 'd:\pfsense\pfsense.vhd'
  Container        = $ContainerName
  Blob             = "pfsense.vhd"
  Context          = $Ctx
  StandardBlobTier = 'Hot'
}
Set-AzStorageBlobContent @PFsense
Carga fichero
Resultado
#1 - Conecta a Azure y Seleccionar subscripción
Connect-AzAccount
Get-AzSubscription
Select-AzSubscription -SubscriptionName "Nombre de la Suscripción"

#2- Seleccionar Storage Account existente
$StorageAccount = Get-AzStorageAccount -StorageAccountName "nombre del storage" -ResourceGroupName "Nombre RG"
$Ctx = $StorageAccount.Context

#2- Crear Storage Account
#Listado de los Resource Group del Tenant.
Get-AzResourceGroup | select ResourceGroupName
# Listado de las localizaciones exitentes.
Get-AzLocation | Select-Object -Property Location

$Storage = @{
  ResourceGroupName = 'Grupo de recursos'
  Name              = 'mordorworldpfsense'
  SkuName           = 'Standard_LRS'
  Location          = 'northeurope'
}
$StorageAccount = New-AzStorageAccount @Storage
$Ctx = $StorageAccount.Context

#3- Crear Container
$ContainerName = 'vhd' #minusculas
New-AzStorageContainer -Name $ContainerName -Context $Ctx -Permission Blob

#4- Subir Fichero.
$PFsense = @{
  File             = 'd:\pfsense\pfsense.vhd'
  Container        = $ContainerName
  Blob             = "pfsense.vhd"
  Context          = $Ctx
  StandardBlobTier = 'Hot'
  BlobType         = 'Page'
}
Set-AzStorageBlobContent @PFsense

Crear Imagen administrada

Ahora vamos a crear una imagen con el VHD que hemos subido.

Si teneis problemas con los comandos de powershell en el PC podemos trabajar directamente en azure

https://portal.azure.com/#cloudshell/ o https://shell.azure.com

#1 - Conecta a Azure y Seleccionar subscripción
Connect-AzAccount
Get-AzSubscription
Select-AzSubscription -SubscriptionName "Nombre de la Suscripción"

#2- Seleccionar Storage Account existente
$StorageAccount = Get-AzStorageAccount -StorageAccountName "nombre del storage" -ResourceGroupName "Nombre RG"
$Ctx = $StorageAccount.Context
$StorageAccountId = $StorageAccount.Id
#Ruta fichero, el nombre del blob con el MISMO nombre Mayusculas/minusculas
$UriFile = (Get-AzStorageContainer -Context $ctx | Get-AzureStorageBlob -blob 'PFSense.vhd').ICloudBlob.uri.AbsoluteUri

#Crear Imagen administrada
$Location = 'northeurope'

#Configuración del Disco
$Disk = New-AzDiskConfig -AccountType Standard_LRS -Location $location -CreateOption Import -SourceUri $UriFile -StorageAccountId $StorageAccountId

#Disco Administrado
New-AzDisk -Disk $Disk -ResourceGroupName Demo-HUB -DiskName Pfsense-Disk

En nuestro Resource Group nos aparecera nuestra Disco.

Crear Maquina virtual

Y por fin, vamos a crear la maquina virtual con nuestra imagen de pfsense.

$RG       = 'Nombre del Resource Group'
$Location = 'northeurope'
# Capturar información del Disco

$disk = Get-AzDisk -DiskName "PFsense-Disk" -ResourceGroupName $RG

# Capturar información del Virtual Network
$VirtualNetwork = Get-AzVirtualNetwork -Name "Nombre Virtual network" -ResourceGroupName $RG

# Configuración nueva maquina
$virtualMachine = New-AzVMConfig -VMName "pfsense-VM" -VMSize Standard_B1s

# Agregar disco a la maquina
$virtualMachine = Set-AzVMOSDisk -VM $virtualMachine -ManagedDiskId $disk.Id -CreateOption Attach -Linux

# Creación tarjetas de Red para WAN y LAN
#lista de subnets, se listan en orden empezando por 0,1,2...

(Get-AzVirtualNetwork -name "Nombre Virtual network").subnets.ID
#Si queremos asignar una ip fija agregar el parametro sin comillas "-PrivateIpAddress x.x.x.x" con la IP
$WAN_Nic = New-AzNetworkInterface -Name pfsense-nic-wan -ResourceGroupName $RG -Location $Location -SubnetId $VirtualNetwork.Subnets[1].Id 
$LAN_Nic = New-AzNetworkInterface -Name pfsense-nic-lan -ResourceGroupName $RG -Location $Location -SubnetId $VirtualNetwork.Subnets[2].Id 

# Añadir tarjetas de red a la maquina virtual
$virtualMachine = Add-AzVMNetworkInterface -VM $virtualMachine -Id $WAN_Nic.Id -Primary
$virtualMachine = Add-AzVMNetworkInterface -VM $virtualMachine -Id $LAN_Nic.Id

# Creación de la Maquina virtual
New-AzVM -VM $virtualMachine -ResourceGroupName $RG -Location $Location

Si todo fue bien ya tendremos nuestra maquina virtual creada.

Configuración Adicional

Acceso a PFsense

Si no tuvieras configurada una VPN contra azure para acceder a nuestro PFsense, podremos crearnos una maquina Windows a la red interna y con una IP publica.

Nos conectaremos a la IP publica al 3389 (RDP) y ya podremos acceder a nuestro FW.

Validación de WAAgentLinux

Para saber si nuestro agente esta funcionando correctamente, podremos saberlo facil mirando en la maquina de PFsense en:

  1. En operating system, aparece el tipo
  2. En vez del mensaje de “Advisor (1 of 2)…, nos aparecera un mensaje de que no puede contactar.
Funciona Bien
Funciona Mal

Reinstalar WAAgentLinux

Para reinstalar el WAagentLinux, limpiamos la instalación anterior y volvemos a instalar con el procedimiento que se realizo anteriormente. (Realizar un snapshot del disco antes de empezar, nunca esta de mas).

Puede que al actualizar el PFsense, cambie la version de python de nuestra máquina y deje de funcionar el agente, tendremos que reparar la instalación.

Podremos chequear el fichero de log “/var/log”waagent”

waagent -deprovision -force
rm -rf /var/lib/waagent
rm -R /usr/sbin/waagent
rm -R /usr/sbin/waagent2.0
rm /var/log/waagent.log
rm /usr/local/etc/rc.d/waagent.sh

Dejar un comentario

Tu dirección de correo electrónico no será publicada.