Taula de continguts

pfSense amb Vagrant

Propòsit de la pràctica: conèixer el software pfSense i la configuració bàsica per a gestió d'una xarxa petita amb clients i servidors, amb gestió dels serveis amb HAProxy (que ve embarcat com a plugin a pfSense).

pfsense.jpeg

Per a la pràctica necessitem Vagrant instal·lat amb el provider libvirt/KVM com s'explica a Vagrant Ubuntu libvirt. A les plantilles d'IsardVDI ho tindreu disponible.


Introducció

pfSense és un software de gestió de routing i firewall, basat en FreeBSD (el kernel de GNU, alternatiu a Linux). Té una gestió molt còmoda via web (webConfigurator). Acostuma a trobar-se embarcat en appliances i hardware de firewall, en particular les de Netgate.

A més de les funcions bàsiques de routing i firewall també pot gestionar VPN, QoS, NAT, load balancing, reverse proxy i, via, plugins, moltes altres funcions afegides.

Hi ha 2 versions de pfSense: la CE (Community Edition, actualment en la v2.9.x) i la pfSense+ (actualment la 26.x) que és la que es sol proporcionar embarcada en el hardware.

La principal funció serà aïllar les xarxes internes de la WAN (Wide Area Network) fent-nos de tallafocs. Els noms interns de les xarxes son: WAN, LAN, OPT1, OPT2, etc. (on «OPT» son LANs opcionals). Cadascuna es pot assignar a una interfície diferent del dispositiu i reanomenar-se, facilitant la seva gestió. La WAN és la que ens dona accés a internet, o sigui, la que connectariem a la fibra òptica del nostre proveïdor d’internet, i on hem de ser mes restrictius amb les regles del firewall.

La WAN hauria de tenir tots els ports tancats per defecte, i només obrir el 80 i 443 d’accés web quan tinguem els serveis ben configurats. En aquest cas, però, la WAN (vtnet0) coincideix amb la xarxa default de Vagrant, i necessita tenir el port 22 d’accés SSH obert, raó per la qual hem posat una regla predefinida al firewall i el servei SSH engegat perquè no doni errors poc amigables de gestionar.

HAProxy respon a les sigles «High Availability Proxy» i és un software molt emprat com a proxy invers. A la pràctica el farem servir en 2 llocs: (1) a l’escriptori Isard l’instal·larem per fer un port forwarding dels ports 80 i 443 i redirigir-los al pfSense; i (2) dins de pfSense l’importarem com un mòdul afegit a mode de plugin per gestionar l’accés als serveis HTTP i HTTPS que posarem al Server 1 i Server 2.


Vagrantfile

Partiu del següent Vagrantfile per a crear la VM pfSense.

Afegiu un servidor amb Apache2 a cada xarxa aïllada, amb IP: 192.168.xx.20 (on xx és 31, 32, 33, 34). Apache haurà de mostrar un missatge tipus «<h1>Servidor Y</h1>» on Y serà el número de xarxa (1, 2, 3 o 4).

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
 
Vagrant.configure("2") do |config|
 
  # appliance pfsense
 
  config.vm.define :pfsense , primary:true do |pfsense|
    pfsense.vm.box = "emieza/pfsense"
    pfsense.vm.provider "libvirt" do |vm|
      vm.memory = "2048"
    end
    # credencials
    pfsense.ssh.insert_key = false
    pfsense.ssh.username = "admin"
    pfsense.ssh.password = "vagrant"
    pfsense.ssh.shell = "/bin/sh"
    # deshabilitem carpeta compartida per defecte, no ens cal i no funciona
    pfsense.vm.synced_folder ".", "/vagrant", disabled: true
    # creem interfícies però sense auto_config (no funciona)
    pfsense.vm.network "private_network", ip: "192.168.31.10", name: "net1", auto_config: false
    pfsense.vm.network "private_network", ip: "192.168.32.10", name: "net2", auto_config: false
    pfsense.vm.network "private_network", ip: "192.168.33.10", name: "net3", auto_config: false
    pfsense.vm.network "private_network", ip: "192.168.34.10", name: "net4", auto_config: false
  end
 
  # servers
  # crea aquí els servers Apache
 
end

Configurar pfSense

Comencem els ajustos bàsics de interfícies del pfSense:

  1. Accedirem a la consola de la VM pfsense per poder configurar-lo. Accedeix mitjançant l’aplicació de l’escriptori «virt-manager» → Doble click sobre la VM
  2. Mirem la IP que ha estat assignada a la WAN
  3. Ens demanarà l’assignació d’interfícies, anem assignant:
    1. WAN → vtnet0
    2. LAN → vtnet1
    3. OPT1 → vtnet2
    4. Després introduïm enter sense res mes per indicar que ja hem acabat de configurar.
  4. Ens apareixerà de nou el menú principal, amb les interfícies vtnet0, vtnet2 i vtnet2 amb una certa configuració.
  5. Ara configurarem les IPs de la LAN i OPT1. Segons el Vagrantfile (que no ha funcionat en l’assignació d’IPs) hauríem d’assignar (opció 2 del menú de la terminal):
    • LAN : static 192.168.31.10 /24
    • OPT1: static 192.168.32.10 /24
    • No revertim a HTTP. Mantindrem el webConfigurator en HTTPS (port 443) a https://192.168.31.10
    • NOTA 1: no activeu DHCP en cap d’aquestes interfícies. Tampoc hem d’assignar cap gateway ja que per ser el mes real possible aquesta funció només l’ha de fer la WAN. Tampoc configurarem cap IPv6.
    • NOTA 2: el més habitual seria que fossin adreces acabades en .1 ja que pfSense sol fer de DHCP intern i gateway. En el nostre cas no podem fer-ho ja que aquestes xarxes les ha configurat Vagrant com a xarxa interna i les adreces .1 estan ja assignades a l’escriptori Isard (que ja ens anirà bé per poder accedir a aquestes xarxes).
  6. Accedim a la interfície web a través de la LAN (interfície per defecte on el webConfigurator és accessible) amb el navegador de l’escriptori IsardVDI apuntant a l’adreça 192.168.31.10 i usuari admin/pfsense (son els defaults de fàbrica).
  7. Assegureu que les interfícies LAN i OPT tenen les IPs adequades. Si no estan OK, modifiqueu-les amb el webConfigurator o el terminal (opció 2). Testegeu que des del terminal del pfSense podeu fer ping a les VMs (Servidor 1 i Servidor 2) i que funciona l’accés a la web al port 80 (amb curl, per exemple).
  8. Canvieu el port del webConfigurator al 11111 per evitar conflictes amb els serveis web que configurarem seguidament.
    • System → Advanced
    • Port: 11111
    • WebGUI redirect : Disable webConfigurator redirect rule : ACTIVAT
  9. Habilitem la connexió SSH amb SSH-keys. S’ha de fer a la interfície web de pfSense, si ho féssim directament amb l’habitual ssh-copy-id (o escrivint sobre /root/.ssh/authorized_keys) s’esborraria al reiniciar la VM (és el comportament natural de pfSense):
    • Creem claus al host (escriptori Isard). Responem a tot amb <Enter>:
      $ ssh-keygen
    • Copiem la clau pública al pfSense (copiar contingut de l’arxiu ~/.ssh/id_rsa.pub
      System → User Manager → Users→ admin → Edit → Keys → Authorized SSH Keys


Configuració HAProxy dins pfSense

HAProxy ens permetrà redirigir les crides HTTP i HTTPS que ens arribin del bastió cap als servidors de les LANs. Abans de configurar el bastió i els certificats, ens caldrà configurar el HAProxy del pfSense. Després ja farem arribar les crides externes amb un altre HAProxy dins l’escriptori Isard.

  1. Assegureu que heu fet bé les parts anteriors, en especial que estan ben assignades les IPs de cada interfície i que podeu veure les VMs internes. També que el webConfigurator està al port 11111 per no col·lisionar amb la configuració del serveis web que farem a continuació.
    Status → Interfaces
  2. Instal·lar HAProxy amb el webConfigurator:
    System → Package Manager → Available Packages → Cercar «haproxy» → +Install
  3. Activar HAProxy
    Services → HAProxy → Settings → Enable HAProxy
    Maximum Connections: 1000
  4. Crear Backend web1:
    Services → HAProxy → Backends
    Name: web1
    Server List:
     server1 192.168.31.20 port 80 
     server2 192.168.32.20 port 80 
    Loadbalancing options: Round Robin
  5. Crear Frontend:
    Name: frontend-http
    Listen Address: WAN address (IPv4)
    Port 80
    Default backend: web1
  6. Obrir firewall a la WAN perquè HAProxy pugui escoltar les peticions HTTP
    Firewall → Rules → WAN → Add
    Address Family: IPv4
    Protocol: TCP
    Source: Any
    Destination: This firewall (self)
    Destination Port Range: From 80 to 80
  7. Comproveu a Status → Services que HAProxy està funcionant correctament.
  8. Desactiveu el bloqueig de IPs locals a la WAN (IMPORTANT!)
    Interfaces → WAN →  Block private networks and loopback addresses  → DESACTIVAT

    NOTA: en algunes versions de pfsense està activat per defecte, i sol ser una mesura de seguretat convenient, però en aquest cas necessitem desactivar-ho ja que la IP interna que emprem a la WAN és de tipus local (192.168./16)

  9. Mireu la IP de pfSense a la WAN (hauria de ser una 192.168.121.x o similar), i connecteu-vos amb el navegador web des de l’escriptori Isard, hauríeu de veure el Server 1 i Server 2 alternativament en cada recàrrega.

Arribats aquí hauriem de tenir funcionant les webs dels servers 1 i 2 accessibles des de la interfície WAN del pfSense.


Troubleshooting

Comprova curosament les màscares de xarxa que no siguin /32 sinó /24