Vai al contenuto

Il firewall: regole, alias e NAT

In questa lezione impari a

  • spiegare il funzionamento di un firewall stateful
  • creare regole nell'ordine corretto
  • usare gli alias
  • configurare NAT in uscita e port forwarding

Le regole del firewall decidono che cosa passa e che cosa no. È la lezione più importante del corso: tutte le successive la danno per acquisita.

Il firewall di pfSense: concetti fondamentali

Il firewall è il cuore di pfSense. È la componente che decide quali pacchetti possono passare attraverso il sistema e quali devono essere bloccati. Comprendere come funziona il firewall di pfSense è essenziale per configurare una rete sicura ed efficiente.

Stateful packet filtering

pfSense utilizza un firewall stateful, basato su pf (Packet Filter) di OpenBSD. A differenza dei firewall stateless che esaminano ogni pacchetto in isolamento, un firewall stateful:

  • Traccia lo stato delle connessioni - Ricorda quali connessioni sono state aperte dai client interni
  • Permette automaticamente il traffico di ritorno - Se un client interno fa una richiesta HTTP, la risposta Γ¨ automaticamente permessa
  • Previene spoofing e attacchi - Blocca pacchetti che non appartengono a connessioni valide
  • PiΓΉ efficiente - Richiede meno regole rispetto ai firewall stateless

Esempio pratico: come funziona lo stateful firewall. Scenario: Un PC nella LAN (192.168.1.100) apre una pagina web su google.com

  1. Client invia richiesta: 192.168.1.100:54321 β†’ 172.217.16.142:443 (HTTPS)
  2. pfSense crea "state entry": Registra questa connessione nella tabella degli stati
  3. Regola firewall permette: LAN β†’ any (allow)
  4. Server Google risponde: 172.217.16.142:443 β†’ 192.168.1.100:54321
  5. pfSense riconosce lo stato: Questo pacchetto appartiene a una connessione esistente
  6. Traffico automaticamente permesso: Anche senza regola esplicita per il ritorno.

Risultato: Hai bisogno di UNA sola regola (LAN β†’ Internet) invece di DUE (andata + ritorno)

Ordine di valutazione delle regole

Le regole firewall di pfSense sono valutate dall'alto verso il basso, e si applica la prima regola che corrisponde (first match wins). Questo Γ¨ cruciale da capire.

Pacchetto in arrivo: 192.168.1.50 β†’ 8.8.8.8:53 (DNS)

Regole LAN (dall'alto verso il basso):
1. ❌ Block: 192.168.1.50 β†’ Facebook       β†’ Non corrisponde (dest diversa)
2. ❌ Allow: 192.168.1.100 β†’ any          β†’ Non corrisponde (source diversa)
3. βœ… Allow: 192.168.1.0/24 β†’ any         β†’ CORRISPONDE! β†’ Pacchetto PERMESSO
4.    Allow: 192.168.1.50 β†’ any          β†’ MAI VALUTATA (giΓ  match sopra)
5.    Block: any β†’ any                    β†’ MAI VALUTATA

Risultato: Pacchetto PERMESSO (regola 3)

Attenzione all'ordine. Errore comune: Mettere una regola "Allow any β†’ any" in cima disabilita tutte le regole successive di blocco.

Regola d'oro:

  1. Regole piΓΉ specifiche in ALTO (es: blocca singolo IP)
  2. Regole intermedie al centro (es: permetti subnet)
  3. Regole generiche in BASSO (es: blocca tutto il resto)

Default deny

pfSense applica il principio di "default deny": ciΓ² che non Γ¨ esplicitamente permesso Γ¨ automaticamente bloccato. Questo Γ¨ visibile come regola invisibile finale:

# Alla fine di ogni interfaccia, pfSense ha una regola implicita:
Block: any β†’ any (non loggata per default)

Questo significa che DEVI creare regole esplicite per permettere traffico.

Creazione regole firewall

Creiamo la prima regola passo-passo per capire ogni singolo parametro disponibile.

Esempio 1: permettere accesso a Internet dalla LAN

  1. Accedi alle regole LAN
    Vai in Firewall β†’ Rules β†’ LAN
    Vedrai le regole esistenti (probabilmente giΓ  presente una regola "Default allow LAN to any")
  2. Aggiungi nuova regola
    Clicca il pulsante ↑ Add (in alto) o ↓ Add (in basso)
    Nota: "Add top" aggiunge in cima, "Add bottom" in fondo
  3. Configura azione
    Action: Pass (permetti il traffico)
    Altre opzioni:
    - Block: scarta il pacchetto senza rispondere
    - Reject: scarta il pacchetto e avvisa il mittente (reset TCP o ICMP unreachable)
    
    Consiglio: Usa "Pass" per permettere, "Block" per bloccare silenziosamente
  4. Disabilita/Abilita
    Disabled: Deseleziona (vogliamo la regola attiva)
    Seleziona solo se vuoi disabilitare temporaneamente la regola senza cancellarla
  5. Interfaccia
    Interface: LAN
    Questa regola si applica al traffico che ENTRA nell'interfaccia LAN
  6. Address Family
    Address Family: IPv4 (o IPv6, o IPv4+IPv6)
    Per la maggior parte dei casi, IPv4 Γ¨ sufficiente
  7. Protocollo
    Protocol: any (permetti TCP, UDP, ICMP, etc.)

    Opzioni protocollo.

    • TCP: Web (HTTP/HTTPS), Email (SMTP/IMAP), SSH, FTP
    • UDP: DNS, VoIP, Gaming, Streaming video
    • ICMP: Ping, traceroute
    • any: Tutti i protocolli (piΓΉ comune)
  8. Source (Sorgente)
    Source: LAN net (192.168.1.0/24 - tutta la rete LAN)
    
    Altre opzioni comuni:
    - any: Qualsiasi sorgente
    - Single host or alias: Singolo IP (es: 192.168.1.50)
    - Network: Subnet specifica (es: 192.168.1.0/28)
    - LAN address: L'IP di pfSense sulla LAN
    - (alias name): Gruppo di IP predefinito
  9. Destination (Destinazione)
    Destination: any (qualsiasi destinazione - Internet incluso)
    
    ☐ not: Inverte la logica (es: "not 192.168.1.0/24" = tutto tranne LAN)
  10. Destination Port Range
    From: any
    To: any
    Permetti qualsiasi porta (HTTP, HTTPS, DNS, etc.)
  11. Descrizione
    Description: Permetti LAN a Internet
    Usa descrizioni chiare - apparirΓ  nella lista regole.
  12. Salva
    Clicca Save β†’ La regola appare nella lista
    Clicca Apply Changes (banner rosso in alto)
    Regola attiva immediatamente.
Regole firewall WAN
Esempio di regole firewall configurate sull'interfaccia WAN

Esempio 2: bloccare Facebook dalla LAN

Scenario: Vuoi bloccare l'accesso a Facebook per tutti gli utenti LAN durante l'orario lavorativo.

  1. Crea alias per Facebook
    (Vedremo gli alias dettagliatamente dopo, per ora segui)
    Firewall β†’ Aliases β†’ IP β†’ Add
    Name: Facebook_IPs
    Description: Indirizzi IP Facebook
    Type: Host(s)
    IP Address:
      31.13.64.0/18
      66.220.144.0/20
      69.63.176.0/20
      157.240.0.0/16
    (Lista IP di Facebook - aggiorna periodicamente)
  2. Crea regola di blocco
    Firewall β†’ Rules β†’ LAN β†’ Add (in CIMA!)
    Action: Block
    Interface: LAN
    Protocol: any
    Source: LAN net
    Destination: Single host or alias β†’ Facebook_IPs
    Description: Blocca accesso Facebook
    
    IMPORTANTE: Questa regola deve essere SOPRA la regola "Allow LAN to any"!
  3. Salva e applica
    Save β†’ Apply Changes
    Facebook ora bloccato per tutta la LAN!

Limitazioni blocco per IP. Bloccare siti web tramite IP funziona ma ha limiti:

  • Molti siti usano CDN con IP che cambiano frequentemente
  • Gli IP possono essere condivisi con altri servizi
  • HTTPS cifrato nasconde il nome del sito (vedi solo IP)

Soluzione migliore: Usa pfBlockerNG per bloccare per dominio (DNS filtering) - vedremo nel Capitolo 11

Firewall aliases

Gli Aliases semplificano molto la gestione delle regole firewall. Un alias Γ¨ un nome simbolico che rappresenta uno o piΓΉ indirizzi IP, reti, porte, o URL.

PerchΓ© usare gli aliases?

  • Riutilizzo – Definisci una volta, usa in multiple regole
  • Manutenzione – Modifica l'alias β†’ aggiorna automaticamente tutte le regole
  • LeggibilitΓ  – "Servers_DMZ" Γ¨ piΓΉ chiaro di "10.0.10.10-10.0.10.20"
  • Organizzazione – Raggruppa logicamente IP correlati

Tipi di aliases

TipoContenutoEsempio Uso
Host(s)Singoli IP o subnetServer aziendali, workstation VIP
Network(s)Reti intere (CIDR)Filiali remote, subnet
Port(s)Porte TCP/UDPServizi custom, range porte
URL (IPs)Lista IP da URL remotoBlocklist malware (aggiornate automaticamente)
URL Table (IPs)Grande lista da URLGeoblocking, threat intelligence

Creazione alias: esempi pratici

Creazione alias firewall
Interfaccia di creazione alias con campi per nome, tipo e indirizzi IP

Esempio 1: alias host: server aziendali

  1. Apri gestione Aliases
    Vai in Firewall β†’ Aliases β†’ IP
  2. Aggiungi nuovo alias
    Clicca + Add
  3. Configura alias
    Name: Servers_Critical
    (Solo lettere, numeri, underscore - NO spazi!)
    
    Description: Server critici aziendali
    
    Type: Host(s)
    
    Host(s):
    IP Address 1: 192.168.1.10  | Description: Mail Server
    IP Address 2: 192.168.1.11  | Description: File Server
    IP Address 3: 192.168.1.12  | Description: Database Server
    IP Address 4: 10.0.10.5     | Description: Web Server DMZ
    
    (Clicca "Add Host" per aggiungere piΓΉ righe)
  4. Salva
    Save β†’ Apply Changes
Lista aliases configurati
Elenco completo degli aliases IP configurati nel firewall

Esempio 2: alias port: servizi custom

Vai in Firewall β†’ Aliases β†’ Ports:

Name: VoIP_Ports
Description: Porte per telefonia VoIP
Type: Port(s)

Ports:
5060  | SIP signaling
5061  | SIP TLS
10000:20000 | RTP media (range)

Uso: Ora puoi usare "VoIP_Ports" nelle regole invece di scrivere tutte le porte ogni volta!

Esempio 3: alias URL: blocklist automatiche

Molto flessibile. pfSense scarica automaticamente liste IP da URL e le aggiorna periodicamente.

Name: Malware_IPs
Description: IP malevoli da Spamhaus
Type: URL (IPs)

URL: https://www.spamhaus.org/drop/drop.txt
Update Frequency: 1 day

Cosa succede:
- pfSense scarica la lista ogni giorno
- La usa automaticamente nelle regole che referenziano "Malware_IPs"
- Lista sempre aggiornata senza intervento manuale!

Uso degli aliases nelle regole

Una volta creato un alias, lo usi nelle regole selezionandolo dal menu:

Firewall β†’ Rules β†’ LAN β†’ Add

Source: Single host or alias β†’ (seleziona) Servers_Critical
Destination: any
Port: VoIP_Ports

Descrizione: Permetti server critici a usare VoIP

Vantaggio: Se domani aggiungi un server, basta modificare l'alias "Servers_Critical"
e la regola si aggiorna automaticamente!

NAT (network address translation)

Il NAT Γ¨ la funzionalitΓ  che permette a piΓΉ dispositivi di una rete privata (LAN) di condividere un singolo indirizzo IP pubblico (WAN). pfSense gestisce tre tipi principali di NAT.

1. Outbound NAT (NAT in uscita)

Traduce gli IP privati della LAN nell'IP pubblico della WAN quando i client accedono a Internet.

Client LAN: 192.168.1.50 β†’ Internet (google.com)

PRIMA del NAT:
Source: 192.168.1.50:54321 β†’ Dest: 172.217.16.142:443

DOPO il NAT (fatto da pfSense WAN):
Source: 203.0.113.5:12345 β†’ Dest: 172.217.16.142:443
         └─ IP pubblico WAN  └─ Porta random assegnata

Google risponde a 203.0.113.5:12345
pfSense riconosce la connessione e rimanda a 192.168.1.50:54321

Configurazione: Firewall β†’ NAT β†’ Outbound

Mode:

βšͺ Automatic outbound NAT (default)
   - pfSense gestisce tutto automaticamente
   - Consigliato per 95% degli utenti

βšͺ Hybrid Outbound NAT
   - Automatic + regole manuali aggiuntive
   - Utile per eccezioni specifiche

βšͺ Manual Outbound NAT
   - Controllo totale, tutte regole manuali
   - Solo per scenari molto avanzati

2. Port forwarding (NAT in entrata)

Permette di rendere accessibili da Internet servizi ospitati nella LAN/DMZ.

Scenario Tipico: Hai un server web nella DMZ (10.0.10.10) e vuoi renderlo raggiungibile da Internet sulla porta 443.

Configurazione Port Forward
Creazione regola NAT/Port Forward per esporre servizio interno
  1. Accedi a Port Forward
    Vai in Firewall β†’ NAT β†’ Port Forward
  2. Aggiungi regola
    Clicca ↑ Add
  3. Configura Port Forward
    Interface: WAN
    
    Protocol: TCP
    
    Destination: WAN address (l'IP pubblico della WAN)
    
    Destination port range:
    From: HTTPS (443)
    To: HTTPS (443)
    
    Redirect target IP: 10.0.10.10 (IP del server interno)
    
    Redirect target port: HTTPS (443)
    (Puoi cambiare porta: es. WAN:443 β†’ LAN:8443)
    
    Description: Port Forward HTTPS a Web Server DMZ
    
    β˜‘ Filter rule association: Add associated filter rule
    (pfSense crea automaticamente la regola firewall WAN necessaria!)
  4. Salva e applica
    Save β†’ Apply Changes
  5. Verifica regola firewall creata
    Vai in Firewall β†’ Rules β†’ WAN
    Dovresti vedere una nuova regola automatica:
    NAT HTTPS β†’ 10.0.10.10

Test port forward. Per testare se il port forward funziona:

  1. Da Internet: Apri browser β†’ https://IL_TUO_IP_PUBBLICO
  2. Dovresti vedere: Il sito del server interno (10.0.10.10)
  3. Tool utili:
    • canyouseeme.org (verifica porta aperta)
    • nmap -p 443 TUO_IP_PUBBLICO (da esterno)

Sicurezza port forward. Esporre servizi su WAN Γ¨ PERICOLOSO se non fatto correttamente:

  • Usa SOLO protocolli cifrati (HTTPS, SSH, SFTP - NO HTTP, FTP, Telnet)
  • Mantieni il server aggiornato (patch di sicurezza)
  • Usa password forti o autenticazione a chiave
  • Implementa fail2ban per bloccare brute force
  • Considera VPN invece di port forward quando possibile
  • Limita source IP se possibile (non "any")

3. NAT 1:1 (One-to-one NAT)

Associa un IP pubblico dedicato a un IP privato in modo bidirezionale. Utile quando hai piΓΉ IP pubblici.

Scenario: Hai 2 IP pubblici e vuoi dedicare il secondo al mail server

IP Pubblico WAN: 203.0.113.5 (principale)
IP Pubblico Extra: 203.0.113.6 (dedicato mail server)
Mail Server LAN: 192.168.1.10

Firewall β†’ NAT β†’ 1:1

Interface: WAN
External subnet IP: 203.0.113.6 / 32
Internal IP: 192.168.1.10
Description: Mail Server dedicato

Risultato:
- Tutto il traffico verso 203.0.113.6 va a 192.168.1.10
- Tutto il traffico DA 192.168.1.10 esce con IP 203.0.113.6
- Bidirezionale e automatico per tutte le porte

Video: β–Ά Guarda: Regole Firewall pfSense

Buone pratiche firewall

Sicurezza

  • Principio del minimo privilegio: Permetti solo ciΓ² che Γ¨ strettamente necessario
  • Regole specifiche prima: Blocchi specifici in alto, permessi generici in basso
  • Descrizioni chiare: Ogni regola deve avere description comprensibile
  • Log regole critiche: Abilita logging per regole di blocco importanti
  • Review periodica: Rivedi le regole ogni 3-6 mesi, elimina obsolete
  • Test prima di produzione: Testa regole in orari a basso traffico
  • Mai "allow any any" su WAN: Estremamente pericoloso.

Organizzazione

  • Usa aliases abbondantemente: Semplifica manutenzione
  • Naming convention: Es. "BLOCK_", "ALLOW_", "FWD_" come prefissi
  • Separa logicamente: Usa separator (Firewall β†’ Rules β†’ Add Separator)
  • Documenta eccezioni: Regole "strane" devono avere spiegazione dettagliata

Performance

  • Regole usate spesso in alto: Meno confronti = piΓΉ veloce
  • Usa aliases invece di molteplici regole: PiΓΉ efficiente
  • Evita regole ridondanti: Pulisci regole duplicate
  • Monitora tabella stati: Status β†’ States (troppi stati = problema)

Verificare le regole

Visualizzare stati attivi

Vai in Diagnostics β†’ States per vedere tutte le connessioni attive tracciate dal firewall.

tcp 192.168.1.100:54321 (LAN) β†’ 172.217.16.142:443 (WAN) ESTABLISHED
udp 192.168.1.50:53124 (LAN) β†’ 8.8.8.8:53 (WAN) MULTIPLE:SINGLE
tcp 10.0.10.10:443 (DMZ) ← 203.0.113.100:51234 (WAN) ESTABLISHED

Filtri utili:
- Filter by: 192.168.1.100 (mostra solo connessioni di questo IP)
- Interface: LAN (solo stati LAN)
- Protocol: tcp (solo TCP)

Log firewall

Per vedere quali pacchetti vengono bloccati/permessi:

  1. Abilita logging su regola
    Modifica regola β†’ Log packets that are handled by this rule
  2. Visualizza log
    Vai in Status β†’ System Logs β†’ Firewall
  3. Analizza log
    Jan 3 15:30:42 LAN block 192.168.1.100:54321 β†’ 31.13.64.1:443 (TCP:S)
                  β””β”€β”¬β”€β”˜ β””β”€β”€β”¬β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”¬β”€β”˜
                    β”‚      β”‚              β”‚                  β”‚         β”‚
                 Data   Intf   Sorgente:porta       Dest:porta    Flags
    
    Flags TCP comuni:
    S = SYN (inizio connessione)
    A = ACK (acknowledge)
    F = FIN (fine connessione)
    R = RST (reset)

Test regole con packet capture

Per debug avanzato, cattura pacchetti in tempo reale:

  1. Vai in Diagnostics β†’ Packet Capture
  2. Configura cattura:
    Interface: LAN
    Address Family: IPv4
    Protocol: any
    Host Address: 192.168.1.100 (IP da monitorare)
    Packet Length: 0 (cattura tutto)
    
    Start β†’ Cattura pacchetti
  3. Riproduci il problema (es: prova a connetterti al servizio)
  4. Stop β†’ Download PCAP β†’ Analizza con Wireshark

Esercizi

Regole, alias e NAT: prima ragiona, poi prova in laboratorio.

⭐ Facile

Esercizio 1 – L'ordine conta. Sulla LAN ci sono, in quest'ordine: 1) Pass qualsiasi traffico; 2) Block verso l'alias SOCIAL; 3) Pass HTTP verso Internet. Un client apre un social: cosa succede? PerchΓ©? Come correggi?

Suggerimento

pfSense applica la prima regola che corrisponde: la regola 1 lascia passare tutto e la 2 non viene mai letta. Sposta il blocco in cima.

⭐⭐ Medio

Esercizio 2 – Port forwarding con alias. Crea l'alias SERVER_WEB (host 192.168.1.10) e l'alias PORTE_WEB (porte 80 e 443). Crea il port forward dalla WAN verso SERVER_WEB sulle PORTE_WEB e verifica la regola firewall associata creata in automatico.

⭐⭐ Medio

Esercizio 3 – La rete ospiti. Sulla rete ospiti consenti solo DNS (53) e navigazione web (80, 443) verso Internet e blocca tutto verso le reti private. Suggerimento: crea un alias con le reti RFC 1918.

Suggerimento

Alias RETI_PRIVATE: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Prima la regola Block verso l'alias, poi le Pass per 53, 80, 443.

⭐⭐⭐ Sfida

Esercizio 4 – "La regola non funziona". Un collega dice che la sua regola non ha effetto. Scrivi in ordine i controlli che fai, indicando per ognuno dove si trova in pfSense.

Suggerimento

Interfaccia giusta (le regole valgono in ingresso) β†’ ordine delle regole β†’ stati giΓ  aperti (Diagnostics β†’ States) β†’ log della regola β†’ Packet Capture.