La risorsa Italiana per pfSense

Latest Posts

14 marzo 2024

Riservare un IP specifico ai client collegati in VPN su pfSense 2.7

Se utilizzate OpenVPN una delle necessità più ricorrenti è quella di operare un assegnamento statico degli indirizzi IP di uno o più client.

Tale necessità può sorgere, in genere, quando serve abilitare per una specifico utente l'accesso a un particolare servizio.

A livello di rules sarà necessario creare la regola di pass verso il servizio, limitandola alla source autorizzata: per fare questa limitazione sull'indirizzo sorgente, dovremo fare in modo che ogni volta che l'utente si collega, acquisisca sempre lo stesso IP.

Avevamo già scritto un articolo in precedenza (Assegnare IP statico a client OpenVPN), di cui riportiamo qui i requisiti, sempre validi, mentre aggiorniamo la procedura di configurazione che ora è ancora più semplice.

Prima di iniziare rammentiamo alcuni concetti di base:
  • tutte le configurazioni OpenVPN sono di tipo Client-Server;
  • anche le VPN Site to Site sono di tipo Client-Server;
  • quando parliamo di IP del client ci stiamo riferendo all'IP del tunnel stabilito tra client e server.
Sebbene siano nozioni scontate è bene rinfrescarle perchè spesso ci si dimentica che:
  • anche una connessione tra due firewall pfSense o più in generale tra due gateway deve essere configurata come client-server 
  • al nostro client non verrà mai assegnato un IP della subnet locale del server.
Per poter assegnare un indirizzo IP statico ad un client è necessario:
  • poterlo individuare con certezza;
  • che non esistano due client che si presentino con lo stesso nome.
L'unico modo per farlo è utilizzare connessioni OpenVPN con certificati dove ogni client è identificato da un certificato con CN univoco e soprattutto usato per una sola installazione. 

Se non sapete come fare vi consiglio di legere prima l'articolo "OpenVPN server su pfSense 2.7"

A questo punto assumiamo:
  • di aver configurato correttamente server e client;
  • di aver creato un certificato client: mario.rossi;
  • di aver scelto come subnet per il tunnel 10.0.0.0/24;
Per poter assegnare un IP statico alle due connessioni occorre effettuare la seguente configurazione sul server.
Accediamo a VPN > OpenVPN > Client Specific Overrides

In questa sezione dovremo creare un override per ogni client a cui vogliamo assegnare un IP statico
Per ogni Overrides dovremo indicare:
  • la descrizione dell'override in Description: es. Mario Rossi
  • l'identificativo del certificato sotto Common Name: es. mario.rossi
  • l'ip da assegnare staticamente in IPv4 Tunnel Network: es. 10.0.0.250/24
Questa configurazione, in cui viene indicato direttamente l'ip da assegnare, sostituisce la precedente, un pochino più tricky, che utilizzava le subnet /30.

La nuova modalità è onfigurata in questo del server Ovpn dove deve essere selezionato il valore di default "One IP address per client in a common subnet". Se selezioniamo l'altra opzione disponibile (net30), torniamo alla modalità con le subnet /30, che è ancora presente per retrocompatibilità e ambienti legacy.



Una volta effettuata questa configurazione avremo un ip statico sulla VPN per il Sig. Rossi da utilizzare per creare delle regole ad hoc che lo riguardano.



11 marzo 2024

Log Management in pfSense



La gestione dei log è un tema ormai fondamentale quando si parla di sicurezza informatica.

I log ci permettono di mantenere traccia degli eventi che impattano il nostro sistema e delle attività svolte dagli amministratori e dagli utenti.
Attualmente inoltre, una corretta gestione dei log non è solo un tema di sicurezza, ma anche di ottemperanza a leggi quali il GDPR, o di compliance a normative come la ISO27001 e a direttive europee, ad esempio la recente NIS2.

Oggi vedremo quali sono i principali strumenti di logging che ci offre pfSense e come configurarli in modo ottimale, per porterne gestire lo storico in modo flessibile e confacente le proprie necessità.

I log di pfSense sono conservati nel percorso /var/log e sono fruibili tramite interfaccia web nel menù Status > System Logs.
Sono organizzati in diversi macroblocchi, sfogliando i quali possiamo andare a rintracciare le attività legate a:
  • Sistema 
  • Filtraggio del traffico 
  • DHCP
  • Autenticazione
  • VPN (OpenVPN, IPsec, ecc.)
  • NTP
  • Pacchetti aggiuntivi 
Ciascuna di queste voci dispone di una serie di sotto menù per la registrazione puntuale di diverse ti
topologie di eventi.

Log Settings

In questa voce di menù, che è l'ultima, troviamo tutte opzioni di configurazione per la raccolta dei log che andremo ad analizzare oggi.

PfSense mette a disposizione di default un numero molto ampio di log, tuttavia la loro conservazione in locale ha limiti di spazio, prestazioni e durata, motivo per cui porremo particolare attenzione alla conservazione in remoto.

Opzioni Generali

Log Message Format: è il formato dei syslog messaggi che vengono conservati in locale o che vengono inviati a un eventuale syslog server remoto. Sono disponibili due formati (RFC3164 o RFC5424): la scelta tra i due dipende dalla compatibilità col sistema di raccolta remoto.
RFC3164 è lo standard più datato, nativo di BSD, mentre RFC5424 è uno standard più recente che permette una gestione più precisa del timestamp.

La scelta tra i due formati dipende dalla compatibilità col sistema di parsing prescelto per renderli maggiormente leggibili, anche se entrambi gli standard possono essere utilizzati in qualsiasi demone syslog (syslog-ng e rsyslog, ecc.) e tendenzialmente i template per parsarli sono presenti nei principali motori di aggregazione log, come Splunk o Elastic, su cui si basa la maggior parte dei prodotti di log management in commercio.
La trasmissione dei messaggi Syslog inoltre può avvenire sia in UDP che in TCP.

Se non ci sono esigenze particolari, possiamo lasciare il default (RFC3164)

Selezionare le seguenti opzioni, valutando le altre alla bisogna:
  • Forward/Reverse Display
  • Log firewall default blocks
  • Log packets blocked by 'Block Bogon Networks' rules
  • Log packets blocked by 'Block Private Networks' rules
  • Log errors from the web server process
  • Generate log entries when making changes to the configuration
GUI Log Entries: 1000

Il tasto Reset log files, ci permette di eliminare tutti i log presenti in locale compresi i file di rotazione dei log.

Log Rotation

In questa sezione possiamo decidere la dimensione dei singoli file di log e poichè il sistema non è studiato per una conservazione long term in locale si consiglia di mantenere questi valori:

Log Rotation Size (Bytes):  tra 512000 e 10240000
Log Retention Count: tra 7 e 14

Queste impostazioni si applicheranno a tutte e 20 le tipologie di file di log presenti, bisogna perciò fare attenzione allo spazio occupato.
Il sistema ci preallerta, indicandoci l'attuale spazio occupato dai log, il massimo raggiungibile con le dimensioni da noi impostate e lo spazio libero su disco in questo momento.

Log Compression: La compressione dei log va attivata solo in caso di file system diverso da ZFS, che di default comprime già il contenuto del disco.
Può essere utile disattivarla anche in caso di file di log molto grandi per i quali ci metterebbe troppa a comprimere o per sistemi particolarmente lenti.

Remote Logging Options

In questa sezione possiamo fare il redirect dei log verso un sistema remoto.

Source Address: scelgo l'interfaccia su cui fare il bind del servizio
IP Protocol: IPv4/IPv6
Remote log servers: ip_remote_syslog_server:port

E' possibile specificare fino a 3 server syslog remoti. E' necessario specificare la porta solo se differente dalla 514 UDP che è la porta di default del syslog.
L'invio avviene solo in UPD, se necessario attivarlo in TCP, si può utilizzare il pacchetto aggiuntivo syslog-ng, di cui non parleremo oggi, ma sarà oggetto di un articolo futuro.

Remote Syslog Contents: è possibile filtrare la tipologia di eventi da inviare al remote syslog selezionando le voci di interesse in questo menù.

Salvare al termine delle modifiche.


7 marzo 2024

OpenVPN Server su pfSense 2.7


Una delle funzionalità più utilizzate e più apprezzate di pfSense è la possibilità di fare da terminatore per la OpenVPN.

Abbiamo già descritto come creare un Server OpenVPN in diversi articoli precedenti (OpenVPN Server su pfSense 2.3, l'ultimo), ma vogliamo riprendere l'argomento, in quanto col passare del tempo e delle versioni sono cambiati gli algoritmi supportati e anche alcune delle funzionalità offerte dal configuratore.

In questo articolo prendiamo in considerazione la configurazione di un server pfSense come terminatore per una VPN Road Warrior, che permetta agli utenti remoti di collegare il proprio pc, da ovunque si trovino, alla rete aziendale.
Per autenticarsi saranno necessari un certificato SSL + username e password.
Il backend di autenticazione sarà il database locale del firewall stesso.

La configurazione che vedremo in seguito è effettuata su un pfSense 2.7.2

Gli step da effettuare sono i seguenti:
  • Creazione dei certificati (CA - Server - User)
  • Configurazione del server OpenVPN
  • Configurazione dell'interfaccia virtuale
  • Impostazione regole di firewall
  • Export della configurazione del client

Creazione dei certificati

Creazione del certificato della CA

Portarsi nel menù System > Cert Manager > CAs
Cliccare su Add
Compilare in modo preciso i campi sotto ripotati per la creazione del nostro certificato
  • Descriptive Name: Nome del certificato
  • Method: Create an internal Certificate Authority
  • Key length: 4096
  • Digest Algorithm: sha512
  • Lifetime: 3650 days (10 anni)
  • Country Code:
  • State or Province:
  • City:
  • Organization:
  • Email Address:
  • Common Name: internal-ca


Cliccare su Save    

Creazione del certificato Server

Portarsi nel menù System > Cert Manager > Certificates
Cliccare su Add
Compilare in modo preciso i campi sotto ripotati per la creazione del nostro certificato
  • Method: Create an internal Certificate
  • Descriptive Name: Nome del certificato
  • Certificate Authority: la CA creata in precedentza
  • Key length: 4096
  • Digest Algorithm: sha512
  • Lifetime: 3650 days (10 anni)
  • Common Name: nome dns firewall
  • Country Code:
  • State or Province:
  • City:
  • Organization:
  • Email Address:
  • Certificate Type: Server Certificate
Cliccare su Save


Creazione della Certificate Revocation List

A questo punto è buona prassi creare anche  una Certificate Revocation List che tornerà utile nel momento in cui ci sarà da invalidare dei certificati.

Portarsi nel menù System > Cert Manager > Certificate Revocation
Cliccare su Add or Import CRL in corrispondenza del nome del certificato della nostra CA
 
Compilare in modo preciso i campi sotto riportati per la creazione del nostro certificato
  • Certification Authority: la CA creata in precedentza
  • Method: Create an internal Certificate Revocation List
  • Descriptive Name: CRL
  • Lifetime: 730 days
  • Serial: 0
Cliccare su Save


Creazione del certificato User

Portarsi nel menù System > Cert Manager > Certificates
Cliccare su Add
Compilare in modo preciso i campi sotto riportati per la creazione del nostro certificato
  • Method: Create an internal Certificate
  • Descriptive Name: Nome del certificato (per esempio lo username dell'utente)
  • Certificate Authority: la CA creata in precedentza
  • Key length: 4096
  • Digest Algorithm: sha512  
  • Lifetime: 3650 days (10 anni)
  • Common Name: lo username dell'utente
  • Distinguished Name:
  • Country Code:
  • State or Province:
  • City:
  • Organization:
  • Email Address:
  • Certificate Type: User Certificate
Se si utilizzano utenti locali al firewall la creazione del certificato può essere fatta contestualmente alla creazione dell'utente cliccando sulla voce apposita



Configurazione del server OpenVPN

Portarsi nel menù VPN > OpenVPN > Server

Cliccare su Add

Impostare i seguenti campi:
  • Description: il nome descrittivo
  • Server Mode: Remote Access (SSL/TSL + User Auth)
  • Selezioniamo i backend di autenticazione

  • Device Mode: tun
  • Protocol: UDP
  • Interface: WAN (interfaccia su cui viene fatto il bind)
  • Local Port: 1194
  • TLS authentication: YES
  • Automatically generate a shared TLS authentication key: YES
  • Peer Certificate Authority: Selezionare il certificato della CA appena creato
  • Peer Certificate Revocation List: Selezionare  la CRL appena creata
  • Server Certificate: Selezionare il certificato del server appena creato
  • DH Parameters Length: 4096 bits
  • Encryption algorithm: CHACHA20-POLY1305 + AES-256-GCM
  • Auth digest algorithm: SHA256 (256-bit)
  • Hardware Crypto: selezionare una eventuale scheda di accelerazione
  • Certificate Depth: One (Client+Server)
  • Flaggare Strict User-CN Matching
  • Flaggare Enforce key usage
  • Tunnel Network: Inserire una subnet per il tunnel, non usare subnet già in uso.
  • Ipv4 Local network(s): inserire le subnet locali raggiugibili tramite la VPN separandole con virgola
  • Allow Compression: Refuse any non-stub compression
  • Topology: One IP address per client
  • Configurare eventuali impostazioni relative a DNS default domain, server DNS, NTP, NetBIOS secondo le proprie esigenze
Cliccare su Save

Configurazione dell'interfaccia virtuale

Per poter utilizzare il tunnel VPN come gateway nelle roules o per creare rotte statiche, è necessario assegnare al tunnel VPN un interfaccia virtuale.
  • Portarsi nel menù Interfaces > (assign
  • Nella colonna Network port selezionare ovpns1 (REMOTE ACCESS)
  • Cliccare su Add per aggiungere la nuova interfaccia
  • Cliccare sul nome della nuova interfaccia, tipicamente optx
  • Nell'interfaccia effettuare le seguenti modifiche:
    • Enable: Yes
    • Description: OPENVPN_REMOTE



Cliccare su Save

Impostazione regole di firewall

A questo punto non ci resta che configurare il firewall affinchè permetta il traffico verso la wan sulla porta 1194 UDP per ricevere le connessioni dai client OpenVPN e creare le regole sull'interfaccia virtuale per permettere il traffico tra i client e il site della vpn.

Portarsi sul menù Firewall > Rules > WAN
Cliccare su Add
E compilare i seguenti campi:
  • Action: Pass
  • Protocol: UDP
  • Destination Port Range: From OpenVPN to OpenVPN  
Cliccare su Save

Portarsi sul menù Firewall > Rules > OPENVPN_REMOTE
Cliccare su Add
E compilare i seguenti campi:
  • Action: Pass
  • Protocol: Any
  • Source: Any  
  • Destination: Any 
Cliccare su Save (questa regola fa passare tutto il traffico verso le subnet raggiungibili in VPN, restringere le regole secondo necessità).



Export della configurazione del client

Per esportare la configurazione da inserire nel client OpenVPN sul proprio device, installare il pacchetto aggiuntivo openvpn-client-export

Una volta installato posizionarsi su VPN > OpenVPN > Client Export 
Scaricare il file di configurazione cliccando sul tasto Most Clients di fianco al nome dell'utnete di nostro interesse








4 marzo 2024

Bloccare regole con gateway specifico in ambiente MultiWAN quando questo non è disponibile

In ambienti MultiWAN può sorgere l'esigenza di configurare una regola affinché utilizzi sempre e solo uno specifico gateway.

In caso il gateway in questione si trovi in stato di down, il comportamento di default di pfSense è quello di ignorare tale specifica e di far fluire il traffico tramite il gateway di default.

Se questo comportamento non è quello desiderato, è possibile inibire tale l'automatismo, vincolando il traffico intercettato dalla regola alla disponibilità del suo specifico gateway.

La modifica va apportata in System - Advanced - Miscellaneous ed ha valenza globale



E' consigliabile, infine, creare una regola di reject coi medesimi criteri sotto la rule incriminata, per evitare possibili match con eventuali regole seguenti.

28 febbraio 2024

Abilitare FTP Client Proxy su pfSense

Il FTP Client Proxy su pfSense è uno strumento che offre vantaggi di sicurezza e gestione per le connessioni FTP.

Funziona come intermediario tra il client e il server FTP, intercettando le richieste FTP e gestendo separatamente le connessioni di dati e di controllo. 
I principali vantaggi di una sua implementazione sono:
 
  • NAT traversal: Facilita la gestione delle connessioni in presenza di NAT
  • Sicurezza: L'FTP Proxy Client può fornire un livello aggiuntivo di sicurezza agendo come un punto di controllo per monitorare e filtrare il traffico FTP in base alle politiche di sicurezza dell'azienda;
  • Controllo degli accessi: Può essere utilizzato per controllare e limitare gli accessi agli utenti FTP. Ad esempio, è possibile configurarlo per consentire solo determinati indirizzi IP o utenti autorizzati a connettersi ai server FTP interni;
  • Logging: L'FTP Proxy Client registra le attività FTP, consentendo agli amministratori di rete di monitorare e analizzare il traffico per identificare eventuali problemi di sicurezza o anomalie;
  • Riduzione del carico di lavoro: In ambienti con un alto volume di traffico FTP, l'FTP Proxy Client può ridurre il carico sui server FTP interni, gestendo in modo efficiente le connessioni e ottimizzando le risorse di rete;
  • Supporto per protocolli FTP attuali e legacy: Può essere configurato per supportare sia il tradizionale protocollo FTP (File Transfer Protocol) che le sue varianti più sicure come FTPS (FTP over SSL/TLS) e SFTP (SSH File Transfer Protocol).


Gli step di installazione e configurazione sono i seguenti:

  • Installare il package da System à Package Manager à Avaiable Packages
  • Individuare il Package: FTP_Client_Proxy


  • Una volta installando andare su à Services à FTP Client Proxy
  • Posizionarsi su Local Interface à Selezionare l’interfaccia locale sul quale applicare questo package (la/le LAN/VLAN desiderate): in questo caso lo applichiamo su un interfaccia di Bridge.


  • Flaggare Early Firewall Rule per posizionare le regole FTP in cima al set di regole per ignorare i blocchi espliciti; aiuta inoltre a consentire l’FTP passivo verso destinazioni arbitrarie
  • Flaggare Rewrite Source to Port 20
  • Abilitare le Log Connection per avere una traccia all’interno dei log.

15 febbraio 2024

Rilasciata la versione 2.7.2 di pfSense

 

 E' stata rilasciata la versione 2.7 di pfSense a cui sono seguite, nel giro di poche settimane, le minor release 2.7.1 e 2.7.2.
Vediamo quali sono le principali migliorie e i fix più importanti introdotti.

Versione 2.7.0


La versione 2.7.0 (qui i dettagli) ha introdotto diverse novità interessanti, in particolare i major upgrade delle versioni di PHP e del sistema operativo FreeBSD.

In particolare:

  • PHP è stato aggiornato dalla versione 7.4.x a 8.2.6.
  • Il sistema operativo di base è stato aggiornato a FreeBSD 14-CURRENT
Sono poi state apportate diverse modifiche agli algoritmi accettati dalle VPN Ipsec:
  • Sono stati rimossi diversi algoritmi IPsec deprecati, tra cui:
    • 3DES Encryption
    • Blowfish Encryption
    • CAST 128 Encryption
    • MD5 HMAC Authentication
Stanti queste modifiche, prima di aggiornare, è importante controllare e riconfigurare le tue connessioni IPsec utilizzando algoritmi di crittografia più sicuri, e testarle.
  • E’ stato aggiunto il supporto per la crittografia ChaCha20-Poly1305 con IPsec.
Altre modifiche:
  • Captive Portal è stato migrato da IPFW a PF
  • E’ stata introdotta una nuova GUI per il Packet Capture
  • OpenVPN è stata upgradata alla 2.6.4
Sono state inoltre fixate diverse vulnerabilità e migliorata la GUI

NB. Il processo di aggiornamento da versioni più vecchie (2.5.x) prevede la necessità di fare un aggiornamento intermedio alla 2.6.
Come sempre, prima di effettuare un aggiornamento è consigliato effettuare il backup della configurazione.


Versioni 2.7.1 e 2.7.2


Le versioni 2.71. e 2.7.2 apportano poche modifiche sostanziali, ma implementano il fix di diverse vulnerabilità:

    • Migliora il supporto a SCTP
    • PHP è stato aggiornato alla versione 8.2.11.
    • Il sistema operativo di base è stato aggiornato a un punto più recente su FreeBSD 14-CURRENT.
    • OpenSSL nel sistema base è stato aggiornato dalla versione 1.1.1g a 1.1.1n.
    • Risolve la vulnerabilità di tipo remote code execution CVE-2023-42326
    • Sono state apportate correzioni per diverse Notices e Security Advisories di FreeBSD, tra cui:
      • Vulnerabilità di spoofing TCP in pf (4) (FreeBSD-SA-23:17.pf)
      • Possibile corruzione dei dati ZFS (FreeBSD-EN-23:16.openzfs)
      • Utilizzo elevato della CPU da parte dei thread del kernel ZFS (FreeBSD-EN-23:18.openzfs)
      • Implementazione AES-GCM errata in ossl (4) (FreeBSD-EN-23:17.ossl)
      • Problemi di prestazioni in OpenSSL, corretti con accelerazione come AES-NI
    • Viene installata la versione 2.6.8 di OpenVPN che risolve le vulnerabilità CVE-2023-46849  e CVE-2023-46850
 

Come sempre, prima di effettuare un aggiornamento è consigliato effettuare il backup della configurazione. Al termine dell’update, installare tramite l'apposito addon le eventuali patch presenti.




Per quanto riguarda gli update, nei test effettuati anche su configurazioni complesse, non ho riscontrato problemi.

Se aggiornate in presenza di pacchetti deprecati perderete le funzionalità offerte da tali pacchetti, non sono state previste migrazioni automatiche a versioni alternative dei servizi.

Se durante gli aggiornamenti doveste riscontrare anomalie, scrivetelo nei commenti


Nome

Email *

Messaggio *