Installazione e configurazione del firewall pfSense

Da un po’ di tempo ho voglia di installare e provare un firewall open source che sia più completo del solito UFW delle distro Debian-based, quindi oggi vedremo come installare e configurare pfSense in un ambiente virtuale, ed effettueremo dei test.

pfSense è un firewall open source basato su FreeBSD, l’azienda che lo supporta rivende anche la versione hardware, sia per privati sia per aziende enterprise, inoltre esistono anche le versioni cloud per AWS e Microsoft Azure.
Questo firewall dispone di molte funzionalità classiche (come per le controparti a pagamento) come: Stateful Packet Inspection, GeoIP blocking, Reverse Proxy, VLAN, VPN, NAT, Layer 7 application detection, Deep Packet Inspection e molto altro.

Trovate più informazioni sul loro sito: https://www.pfsense.org/


Setup laboratorio

Il laboratorio avrà 3 macchine virtuali, una desktop con Xubuntu, una server con ubuntu (cli) e la vm che ospiterà il nostro firewall pfSense, il tutto gestito da VirtualBox.

La struttura delle reti è la seguente:

  • VM Firewall (pfSense) con 2 reti: una NAT e una rete interna (no internet)
  • VM Desktop (Xubuntu) con la sola rete interna
  • VM Server (Ubuntu) con la sola rete interna

La rete NAT del firewall ha un indirizzamento 10.0.2.0/24 e sarà l’unica a potersi affacciare su internet. La rete interna avrà un indirizzamento 192.168.0.0/16

La configurazione di default di pfSense ha l’utenza amministrativa

user: admin
password: pfsense

Ulteriori informazioni sul processo di installazione di pfSense li trovate al link: https://docs.netgate.com/pfsense/en/latest/config/setup-wizard.html


Installazione pfSense

Montiamo la ISO di pfSense nella nostra macchina virtuale e avviamo, questa sarà la prima schermata che avremo:

Il secondo passo richiede la scelta di un keymap per mappare correttamente la tastiera.

Configurazione Keymap

Il terzo step riguarda il partizionamento dell’harddisk, se non avete particolari esigenze lasciate in automatico e selezionate UEFI o BIOS in base alle impostazioni che avete dato alla vostra macchina virtuale:

Dopo pochi minuti l’installazione sarà finita con questa schermata, procediamo e riavviamo la vm.

Ecco il nostro firewall pfSense in funzione dopo il riavvio:

Come vedete le interfacce WAN e LAN sono preconfigurate con degli indirizzamenti standard, potete cambiare le impostazioni direttamente da shell oppure tramite web interface ed impostare i vostri parametri.
Non è possibile modificare la rete WAN in quanto gestita direttamente da VirtualBox (a meno che vogliamo che il fw non si connetta ad internet)


Configurazione pfSense

La configurazione che faremo noi sarà tramite browser, però è possibile effettuarla anche da linea di comando direttamente sulla macchina. L’interfaccia web del firewall è raggiungibile tramite indirizzo IP (o nome DNS dopo averlo impostato) sulla porta 443 in HTTPS.
Questa sarà la prima schermata che il wizard di installazione ci mostrerà:

../_images/00_welcome.png
pfSense setup wizard

Cominciamo inserendo le informazioni relative ad hostname, dominio e DNS server:

Nella nostra configurazione saranno settati così:

  • HOSTNAME: firewall
  • DOMAIN: home
  • PRIMARY DNS: Lasciamo il campo vuoto
  • SECONDARY DNS: Lasciamo il campo vuoto
  • OVERRIDE DNS: Deselezioniamo l’override DNS

Lo step 3 fa riferimento alle impostazioni del Time Server e della timezone:

Configurazione NTP e Timezone

lasciamo il server NTP di default proposto da pfSense e cambiamo la timezone con Europe/Rome.

La prossima schermata riguarda la configurazione della WAN:

Configurazione WAN

lasciamo tutti i campi con le impostazioni di default suggerite dal firewall e procediamo con la configurazione della LAN:

Configurazione LAN

Dopo lo step 5 possiamo settare una nuova password per la web interface e proseguiamo fino alla fine, dove sarà richiesto di fare il reload delle nuove impostazioni.


Setting della regola – Block SSH

Lo scenario che voglio riportare è banale: bloccheremo il traffico SSH in uscita verso un IP specifico.

Nel menu in alto della web interface di pfSense andiamo su Firewall -> Rules.

Andiamo sulla scheda LAN e clicchiamo su un tasto “Add“, sposteremo la regola in seguito.

N.B.: Le regole del firewall vengono interpretate dall’alto verso il basso, quando un pacchetto “matcha” una rule quelle successive non vengono interpretate.

Nel box “Destination Port Range” è possibile indicare un range di porte tra quelle indicate oppure un range custom.

Salviamo la regola e la pagina ci chiederà di fare il reload per caricare le nuove rule nel nostro firewall, dopo spostiamo la nostra regola sopra la “any to any” e si dovrà rifare il reload, il nuovo ordine delle rule pertanto sarà questo:

L’ordine delle regole è fondamentale per il corretto funzionamento delle stesse

Testing della rule

Per testare la nostra custom rule effettueremo la connessione SSH dalla macchina Xubuntu e poi proveremo a connetterci direttamente dal firewall.

Test SSH su Xubuntu

Come si vede dall’immagine la connessione da Xubuntu rimane appesa in quanto il nostro pfSense ha bloccato il traffico SSH verso il server in questione. Vengono bloccati i pacchetti aventi quel Destination IP e quella porta, pertanto se la nostra richiesta di connessione fosse incapsulata con altri protocolli (ad esempio con una VPN) o configurassimo il demone SSH del nostro server su un’altra porta, potremmo aggirare facilmente il firewall.

Test SSH dalla VM pfSense

Utilizzando direttamente il firewall, la connessione ha successo perché esce dall’interfaccia WAN (10.0.2.15) mentre la nostra regola è per la rete LAN.
Vediamo il risultato dalla vm Xubuntu se disabilitiamo la regola:

Rule disabilitata

Ovviamente, avendo la regola disabilitata, il nostro pfSense permette alla connessione di uscire e raggiungere la propria destinazione.

Ora proviamo a stringere la regola in modo che sia valida solo per la macchina desktop Xubuntu, quindi editiamo quella presente e modifichiamola inserendo come indirizzo IP sorgente quello della nostra vm desktop (in questo caso 192.168.1.100):

Regola custom block ssh con ip source impostato

e il risultato, provando ad effettuare la connessione SSH dal server ubuntu, sarà il seguente:


Considerazioni finali

pfSense è un ottimo strumento per difendere la nostra rete, è open source ed esistono anche apparati fisici (acquistabili dallo store Netgate) con il sistema pre-installato.
Tuttavia in alcuni use case più semplici (ad es. bloccare alcune porte), probabilmente è più conveniente utilizzare i security group (ed equivalenti su altri cloud provider) piuttosto che avere un intero sistema da gestire. Ritengo pfSense un ottima soluzione da utilizzare come firewall casalingo o per piccole-medie imprese e sicuramente è utile anche per studiare il funzionamento di questo tipo di apparati senza spendere nulla.

Lascia un commento