Obiettivi

Ho iniziato a costruire il mio homelab, cercando di rispettare i seguenti punti:

  • Riutilizzare hardware in mio possesso o di seconda mano, per ridurre al minimo i costi
  • Segmentare la rete tramite VLAN per una migliore la sicurezza
  • Integrare soluzioni che garantiscano alta disponibilità e ridondanza, dove possibile e costi permettendo
  • Progettare una configurazione compatta per motivi estetici e pratici

meme-bender

Componenti

Per la realizzazione, utilizzeró:

  • Il mini PC Bosgame P4: aggiornato a 32 GB di RAM e con due SSD NVMe M.2 da 1 TB, su cui installerò Proxmox VE come Hypervisor
  • Utilizzerò OpnSense virtualizzato come firewall. Questa soluzione consente di contenere i costi e offre la possibilità di eseguire backup completi dell’intera VM. Un potenziale svantaggio è che eventuali problemi su PVE o nel mini PC influenzeranno anche il firewall
  • Switch managed TP-Link TL-SG116E: uno switch gestito con 16 porte da 1 Gbps, scelto per il suo costo competitivo, la facilità di reperibilità sul mercato dell’usato e la semplicità di configurazione. Essendo fanless, risulta anche silenzioso
  • Switch managed Zyxel GS1200-5: già in mio possesso, questo switch gestito offre 5 porte da 1 Gbps. La configurazione è molto semplice e, basandomi sulle mie esperienze, funziona bene. Consiglio la versione da 8 porte, che ha un costo di poco superiore. In futuro, per gestire un Access Point PoE credo che acquisteró il modello GS1200-8HPV3

Entrambi gli switch supportano QoS, il tagging VLAN 802.1Q, oltre alla configurazione VLAN basata su PVID

Concetti fondamentali

VLAN

L’obiettivo dell’introduzione delle VLAN nel mio homelab è la segmentazione della rete in reti logiche distinte, migliorando sicurezza, gestione del traffico e isolamento dei dispositivi.

Le Virtual Local Area Networks (VLAN) consentono appunto di suddividere una rete fisica in più reti logiche, raggruppando dispositivi e carichi di lavoro in base a criteri funzionali o di sicurezza. Ogni VLAN agisce come un dominio di broadcast separato, limitando la propagazione del traffico non necessario e migliorando la sicurezza complessiva.

Le VLAN aggiungono un tag di 4 byte, utilizzando il protocollo di incapsulamento 802.1Q, all’intestazione dei frame Ethernet, consentendo a switch e dispositivi compatibili di identificare la VLAN di appartenenza. I frame possono essere:

  • Tagged: contengono un VLAN ID esplicito, che indica a quale VLAN il frame appartiene
  • Untagged: non contengono VLAN ID e vengono assegnati a una VLAN tramite il PVID (Port VLAN ID)

Gli switch che offrono il supporto VLAN sono definiti switch gestiti o managed, mentre quelli che non lo offrono sono non gestiti o unmanaged.

Tagged frame

I frame taggati includono un VLAN ID nell’intestazione e sono utilizzati tra dispositivi VLAN-aware (switch, firewall, access point, ecc.). Le porte in trunk su uno switch consentono il transito di più VLAN su un unico link fisico, taggando i frame per identificarne l’appartenenza.

Un esempio di flusso tagged:

  • L’host A invia un frame non taggato a uno switch su una porta con PVID 77 (access port)
  • Lo switch aggiunge il tag VLAN 77 e inoltra il frame su una porta in trunk verso un altro switch
  • Lo switch di destinazione riceve il frame sulla porta in trunk
  • Lo switch inoltra il frame taggato alle sue porte in access associate alla VLAN 77
  • Sulle porte in access, il tag viene rimosso prima dell’invio all’host finale

Untagged frame

I frame non taggati non contengono VLAN ID e sono tipici di dispositivi finali (PC, telefoni, console). Lo switch utilizza il PVID della porta per assegnare il frame alla VLAN corretta.

Un esempio di flusso untagged:

  • L’host A invia un frame non taggato a uno switch su una porta in access sulla VLAN 10
  • Lo switch riceve il frame e gli assegna implicitamente il tag VLAN 10
  • Il frame viene inoltrato alle altre porte in access appartenenti alla stessa VLAN 10
  • Sulla porta di uscita verso l’host B (untagged), lo switch rimuove il tag e invia il frame

Tipologie di porte

  • Access Port: trasporta una singola VLAN. I frame in ingresso e uscita sono non taggati. Lo switch assegna tutto il traffico non taggato alla VLAN definita dal PVID
  • Trunk Port: trasporta più VLAN. I frame in ingresso e uscita sono taggati

Desing

Il progetto sarà integrato dietro la rete domestica esistente, senza modificare la configurazione attuale. La struttura è pensata per essere semplice e scalabile.

La rete è suddivisa in tre VLAN distinte, ciascuna con uno scopo specifico e un intervallo IP dedicato:

VLAN Tag Purpose IP
Management 5 Gestione (Proxmox, switch, AP) 10.0.5.0/24
LAN 10 Dispositivi personali (PC, VM, cellulari) 10.0.10.0/24
GUEST 50 Dispositivi ospiti/non fidati 10.0.50.0/24
  • OPNsense (firewall) funge da gateway predefinito per tutte le VLAN, con indirizzo 10.0.X.254/24 su ogni sotto-interfaccia, dove X corrisponde all’ID della VLAN
  • Range DHCP 10.0.X.51-10.0.X.249
  • PVE1: primo nodo di un futuro cluster, con indirizzo IP 10.0.5.1
  • Switch TPLink TL-SG116E: 10.0.5.10
  • Switch Zyxel GS1200-5: 10.0.5.11
  • Dominio: home.lan

Di seguito il diagramma dell’infrastruttura fisica:

network-diagram

In particolare, il router 5g funge da gateway principale per la connessione a Internet (WAN).

Configurazione degli switch

Per prima cosa, occorre configurare le porte degli switch come da specifiche.

1
2
IP di default: 192.168.0.1
Credenziali: admin / admin
  • Per poter gestire lo switch, bisogna innanzitutto impostare al PC un indirizzo IP statico nella stessa subnet dello switch, utilizzando il comando sudo ip address add 192.168.0.2/24 dev eno1 e collegarsi a una porta qualsiasi dello switch tramite cavo di rete RJ45

Il nome assegnato da Linux alla scheda di rete del proprio PC é visibile col comando ip a

  • Accedere alla pagina http://192.168.0.1, ricordandosi di aggiornare la password di accesso
  • Impostare un hostname e assegnare allo switch l’IP statico 10.0.5.10, disattivando il DHCP, come da specifiche. Dopo il salvataggio, aggiornare l’IP statico del PC per riconnettersi.

sw-tplink-settings

  • Aggiornare il firmware all’ultima versione, seguendo le istruzioni riportate nel manuale ufficiale

Di seguito le configurazioni delle porte e delle VLAN:

tplink-sw-pvid

Le porte dalla 11 alla 16 sono disattivate per ragioni di sicurezza e assegnate a una VLAN che non ha accesso a risorse critiche:

tplink-sw-port-setting

tplink-sw-vlan

Come visto in precedenza, le porte possono essere:

  • Not a member: la porta é esclusa dalla VLAN
  • Untagged: il traffico in uscita dalla porta è non taggato, in modo che lo switch rimuova l’intestazione del tag prima di inviare il frame all’host finale (come un computer)
  • Tagged: il traffico in uscita è taggato (per dispositivi VLAN-aware, come Proxmox e OPNsense o un altro switch)

Zyxel GS1200-5

1
2
IP di default: 192.168.1.3
Password: 1234
  • Impostare un IP statico sul proprio PC e collegarsi a una porta a caso dello switch
  • Cambiare la password di accesso
  • Impostare un hostname e l’indirizzo IP statico 10.0.5.11, disattivando il DHCP, come da specifiche
  • Aggiornare il firmware all’ultima versione, seguendo le istruzioni riportate nel manuale

zyxel-sw-settings

Queste le configurazioni per VLAN e PVID:

zyxel-sw-vlan

In questo contesto, i termini sono leggermente differenti, ma i concetti sono i medesimi:

  • Quando una porta è configurata come Tagged Egress per una determinata VLAN, lo switch aggiunge il tag della VLAN ai frame in uscita su quella porta. Si usa per collegare dispositivi VLAN-aware o per trasportare più VLAN su un unico link fisico (porta in trunk)
  • Quando, invece, una porta è configurata come Untagged Egress per una VLAN, lo switch rimuove il tag VLAN dai frame in uscita su quella porta. Si usa per collegare dispositivi non VLAN-aware (come PC, stampanti, ecc.) e per porte dedicate a una singola VLAN (porta in access)

PVE

Proxmox VE è un hypervisor di tipo 1 (bare-metal) basato su Debian, che consente di creare ed eseguire macchine virtuali e container LXC. Ne abbiamo parlato approfonditamente anche in questo articolo.

Di seguito, un ottimo video che riassume i passaggi successivi:

Installazione di PVE

  • Abilitare Secure Boot dal firmware UEFI
  • Dopo aver scaricato la ISO, creare una pendrive avviabile
  • Avviare l’installazione e selezionare Install Proxmox VE (Graphical)

pve-graphical-installer

  • Selezionare Options, quindi zfs (RAID1). I dischi devono essere almeno due e della stessa dimensione.

pve-zfs-raid1

ZFS (Zettabyte File System) è un filesystem avanzato con funzionalità di volume management, snapshot, compressione e ridondanza. È nato come parte del sistema operativo Solaris di Sun Microsystems nel 2001. Proxmox supporta diverse configurazioni RAID via ZFS:

- Striped ≈ RAID0 Mirror ≃ RAID1 RAIDZ ≃ RAID5 RAIDZ2 ≃ RAID6 RAIDZ3 ZFS only
Min of disks 1 2 3 4 5
Disk Fault tolerance None (N-1) disk 1 2 3
  • Impostare un hostname, come pve01.home.lan, una password di accesso e un indirizzo email valido, in quanto sará utilizzato per ricevere le notifiche da PVE
  • Assegnare l’IP statico a PVE come da design. Prendere nota del NIC a cui si assegna l’indirizzo IP: nel nostro caso, nic0

Primo accesso a PVE

  • Al termine dell’installazione, connettere direttamente il proprio PC al nic0 di PVE tramite cavo RJ45
  • Impostare un indirizzo IP statico sul proprio PC, in modo da poter raggiungere Proxmox. Il comando é il seguente sudo ip address add 10.0.5.50/24 dev eno1
  • É possibile operare anche graficamente, tramite la GUI del proprio DE:

gui-static-ip

  • Ora si dovrebbe riuscire a pingare PVE:
1
2
3
4
5
6
7
8
9
ping 10.0.5.1 -c 2

PING 10.0.5.1 (10.0.5.1) 56(84) bytes of data.
64 bytes from 10.0.5.1: icmp_seq=1 ttl=64 time=0.484 ms
64 bytes from 10.0.5.1: icmp_seq=2 ttl=64 time=0.418 ms

--- 10.0.5.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.418/0.451/0.484/0.033 ms
  • Collegarsi quindi all’indirizzo https://10.0.5.1:8006

PVE config

  • Disabilitare i repository enterprise e abilitare i repository no-subscription su PVE

no-subscription-repo-pve

  • Fare uno snapshot del sistema tramite zfs ed eseguire i vari update. Riavviare e verificare il funzionamento
1
zfs snapshot -r rpool/ROOT/pve-1@$(date +%Y-%m-%d-%H:%M)

Creating and Destroying ZFS Snapshots

  • Abilitare la MFA

Creazione chiavi SSH

Per la creazione, gestione e hardening di SSH, riferirsi all’articolo sul VPS

Security Update

Si consiglia di abilitare gli aggiornamenti automatici di sicurezza, come illustrato da questo video:

Networking di base

  • Per iniziare, bisogna configurare un bridge VLAN-aware, denominato vmbr1, associato al nic fisico nic0, collegato alla porta 1 dello switch. Ad ogni VM sarà assegnata almeno una vNIC collegata a questo bridge in trunk: durante la configurazione della rete per ciascuna VM, sarà necessario specificare l’ID del tag VLAN corrispondente, garantendo così la corretta segmentazione del traffico
  • Il bridge vmbr0, creato in automatico, sarà associato al nic fisico nic1, collegato al router ZTE, fungendo pertanto da interfaccia per la rete WAN
  • Creare la VLAN 5 da Create > Linux VLAN, associata al bridge vmbr1, dedicata al traffico di gestione, compilando i parametri come da design:

vlan-mng-creation-pve

  • Infine, cliccare su Apply Configuration

Il risultante file di configurazione:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
root@pve:~# cat /etc/network/interfaces

auto lo
iface lo inet loopback

iface nic1 inet manual

iface nic0 inet manual

iface nic2 inet manual

iface wlp3s0 inet manual

auto vmbr0
iface vmbr0 inet manual
	bridge-ports nic1
	bridge-stp off
	bridge-fd 0
#WAN

auto vmbr1
iface vmbr1 inet manual
	bridge-ports nic0
	bridge-stp off
	bridge-fd 0
	bridge-vlan-aware yes
	bridge-vids 2-4094
#TRUNK

auto vmbr1.5
iface vmbr1.5 inet static
	address 10.0.5.1/24
	gateway 10.0.5.254
#PVE-MNG

Ora PVE non risulta piú raggiungibile, anche se l’indirizzo IP non é cambiato: si trova su un’altra VLAN rispetto al nostro PC. Dobbiamo quindi:

  • Collegare il nic0 del mini PC alla porta 1 dello switch
  • Collegare il proprio PC alla porta 2 dello switch, che deve essere precedentemente configurato
  • Collegare il nic1 alla porta LAN del router

In questo modo, dovremmo riuscire a raggiungere PVE e fare login alla pagina https://10.0.5.1:8006.

OPNsense

OPNsense è un firewall open source basato su FreeBSD, sviluppato da Deciso, un’azienda dei Paesi Bassi.

  • Scaricare la ISO dal sito di OPNsense
  • Decomprimere l’archivio col comando bzip2 -d OPNsense-25.7-dvd-amd64.iso.bz2
  • Copiare il file ISO su PVE in /var/lib/vz/template/iso/ utilizzando il comando rsync -Pz OPNsense-25.7-dvd-amd64.iso root@10.0.5.1:/var/lib/vz/template/iso/

Creazione VM

  • Cliccare il pulsante Create VM, in alto a destra
  • Scegliere un nome e un ID per la VM
  • Abilitare lo Start at boot

create-opnsense-vm

  • Come tipo di OS, selezionare Other Type, in quanto FreeBSD non é Linux

os-type

  • Abilitare Qemu Agent, che consente di migliorare l’interazione tra l’host e le VM. Funziona come un agent che viene eseguito all’interno della VM e comunica con l’hypervisor, permettendo ad esempio la creazione di snapshot consistenti e l’invio di comandi dall’host alla VM. Permette anche di raccogliere informazioni sullo stato delle risorse della VM, come l’uso della CPU, della memoria e dello storage

qemu-agent

Il controller VirtIO SCSI single é consigliato se si punta ad alte prestazioni.

Il machine type definisce il chipset della scheda madre virtuale della VM. Il chipset q35, moderno (2007) e orientato alle prestazioni, supporta UEFI, Secure Boot e il PCIe passthrough (es. schede di rete, GPU).

  • Impostare le seguenti opzioni per il disco
1
2
3
4
5
1. Discard: abilita il supporto per il comando TRIM/UNMAP, che permette al sistema operativo guest di informare lo storage host quali di blocchi non sono più in uso (utile per thin provisioning e SSD)

2. IO Thread: assegna un thread dedicato per le operazioni di I/O del disco, migliorando le prestazioni in caso di carichi di I/O elevati

3. SSD emulation

Maggiori informazioni sulle varie opzioni nella creazione di una VM si trovano nella Proxmox VE Administration Guide

disk-options

  • La cache write back è una strategia di gestione della cache per le operazioni di scrittura sullo storage. Quando si utilizza questa configurazione, i dati scritti nelle VM vengono prima memorizzati nella cache e successivamente scritti in modo asincrono sul disco fisico. Questa configurazione permette una maggiore velocità nelle operazioni di scrittura, poiché le applicazioni non devono attendere che i dati siano scritti effettivamente sul disco. Nel caso di un’interruzione di corrente o un crash del sistema, ci può essere il rischio di perdita di dati non ancora scritti sul disco. Per approfondimenti, riferirsi alla pagina Performance Tweaks della wiki di Proxmox

  • Assegnare 1 socket e 2 core alla VM. Abilitare AES Instruction, in modo da attivare il supporto hardware per la crittografia AES, usata da diverse VPN per crittografare il traffico. Se non abilitato, la crittografia viene gestita solo via software, con prestazioni inferiori

aes-instructions

  • Abilitare il ballooning per ottimizzare l’uso della RAM, impostando la RAM massima e minima assegnata a OPNsense

ballooning

  • Selezionare vmbr0 come WAN
  • Rivedere tutte le impostazioni e poi cliccare su Finish. Non selezionare l’opzione Start VM in questo momento
  • Ora in VM > Hardware, aggiungere la seconda scheda di rete (bridge vmbr1) e prendersi nota dei MAC Address di entrambi i vNIC

second-nic

É importante che, momentaneamente, e fino a quando non avremo configurato le VLAN su OPNsese, il traffico della LAN sia taggato con ID VLAN 5, altrimenti il firewall non sará raggiungibile: si trova infatti su un’altra VLAN rispetto al nostro PC

  • Assicurarsi che nelle Options della VM Qemu Agent sia abilitato

Installazione di OPNsense

  • Avviare la VM e procedere con l’installazione
  • Durante il boot, quando compare il messaggio Press any key to start the manual interface assignment, premere un tasto per assegnare manualmente le interfacce di rete. In questa fase verranno assegnate solo due interfacce, WAN e LAN. Le VLAN verranno create in seguito tramite GUI

opnsense-nic-config

  • In VM > Hardware prendere nota dei MAC address di vtnet0 e vtnet1
  • Assegnare l’interfaccia WAN a vtnet0 (vmbr0 - nic1)
  • Assegnare l’interfaccia LAN a vtnet1 (vmbr1 - nic0)

nic-assignment

  • OPNsense completerà il boot. Se è presente un server DHCP sulla WAN, l’interfaccia riceverà automaticamente un indirizzo IP
  • Loggarsi con utente installer e password opnsense per avviare l’installazione permanente
  • Selezionare UFS come filesystem e seguire la procedura guidata

ufs-filesystem

  • Non serve modificare la password di root in questa fase (verrà cambiata successivamente tramite GUI)
  • Al termine della installazione, il sistema si riavvierà. Quando il boot sarà completato, si consiglia di spegnere la VM e rimuovere l’unità CD/DVD dalle impostazioni hardware della VM

Primo avvio

  • Dopo il riavvio, l’interfaccia LAN avrà un indirizzo IP predefinito non corretto, mentre l’interfaccia WAN dovrebbe aver ottenuto un indirizzo IP dal server DHCP (ovvero il router ZTE)

lan-default-ip

  • Per prima cosa, tramite la console web, accedere con le credenziali predefinite:
1
2
Username: root  
Password: opnsense
  • Selezionare l’opzione 2 Set Interface IP Address

set-interface-ip-address

  • Modificare l’indirizzo IP associato alla LAN in 10.0.5.254/24 per consentire l’accesso via web

mng-interface-ip-address

  • Da browser, collegarsi alla pagina https://10.0.5.254
  • Procedere con la configurazione iniziale. Inserire un hostname, un nome di dominio, dei server dns, e abilitare il DNSSEC

config-wizard

  • Possiamo deselezionare l’opzione Block RFC1918 Private Networks per l’interfaccia WAN, poiché non stiamo utilizzando un indirizzo IP pubblico. Inoltre, disabilitare questa opzione torna utile per testare il collegamento tramite VPN dalla nostra rete domestica, simulando un accesso da Internet

wan-config

  • Sulla LAN, possiamo lasciare momentaneamente come indirizzo IP 10.0.5.254/24
  • Impostare una password sicura per l’utente root
  • Al termine della configurazione, spegnere la VM ed eseguire da VM > Snapshots lo snapshot initial-setup

OPNsense upgrade

  • Da System > Firmware, eseguire tutti gli update disponibili
  • Installare il Qemu Agent da System > Firmware > Plugins, abilitando i community plugins
  • Riavviare la VM e verificare che tutto funzioni correttamente
  • Spegnere la VM e eseguire lo snapshot after-update

Se dal summary della VM si visualizza l’indirizzo IP sulla WAN e altre informazioni, il qemu agent é correttamente installato e abilitato.

qemu-agent-enabled

Creazione delle VLAN

  • Nella sezione Interfaces > Assignments viene visualizzato il nome dell’interfaccia fisica associata alla LAN (es. vtnet1). Tale interfaccia sarà utilizzata come parent per la configurazione delle VLAN
  • Avviare la VM e creare la VLAN 10 10_LAN da Interfaces > Devices > VLAN

create-vlan10

1
2
3
4
Device: nome dell’interfaccia, che deve iniziare con `vlan0` 
Parent: interfaccia fisica parent, nel nostro caso sempre LAN o vtnet1
VLAN tag: ID della VLAN  
Description
  • Dopo aver compilato i campi, salvare la configurazione
  • Da Interfaces > Assignments > 10_LAN abilitare la VLAN, assegnando l’IP statico 10.0.10.254/24, come da specifiche

enable-vlan10

  • Abilitare il DHCP per la VLAN 10 da Services > Dnsmasq DNS & DHCP > General. Da Services > Dnsmasq DNS & DHCP > DHCP Ranges impostare il range del DHCP: noi utilizzeremo 10.0.X.51-10.0.X.249, dove X indica l’ID della VLAN
  • Da Firewall > Rules > 10_LAN, creare una nuova regola per consentire l’accesso alla Web GUI di OPNsense
1
2
3
4
5
6
7
8
9
Action: Pass
Interface: 10_LAN
Direction: In
TCP/IP Version: IPv4
Protocol: TCP
Source: LAN net
Destination: LAN_10 address
Destination port range 443 (HTTPS)
Description: allow acces OPNsense Web GUI

access-opnsense-from-vlan10

  • Eliminare il tag 5 dalla scheda LAN di OPNsense

opnsense-nic-vlan5-tag

  • Dopo aver collegato un dispositivo alla porta dello switch configurata nella VLAN 10 (es. porta 4), è possibile accedere alla Web GUI di OPNsense all’indirizzo https://10.0.10.254
  • Creare la VLAN 5 5_MNG e la VLAN 50 50_GUEST, come da procedura descritta nei punti precedenti, ricordandosi di abilitare il DHCP
  • Creare una regola di firewall per consentire l’accesso alla pagina web di OPNsense dalla VLAN di Management
  • Se il collegamento avviene in maniera corretta, è possibile disabilitare la regola temporanea per l’accesso dalla VLAN 10 alla web GUI. Inoltre, da Interfaces > LAN, è possibile disabilitare l’interfaccia fisica non taggata, rimuovendo l’assegnazione della LAN da Interfaces > Assignments.

Di seguito un ottimo video che illustra la creazione delle VLAN, diverse Firewall Rules, come configurare il DHCP, ecc.

Firewall Rules

Le regole di firewall vengono create sull’interfaccia di origine del traffico. Ad esempio, per consentire il traffico dalla VLAN 10 verso una risorsa sulla VLAN 50, la regola deve essere configurata nell’interfaccia 10_LAN.

Le regole vengono valutate dall’alto verso il basso. Una regola “consenti tutto” posizionata in cima renderà inefficaci tutte le regole di blocco sottostanti.

OPNsense, per impostazione predefinita, crea una regola chiamata Default allow LAN to any sull’interfaccia LAN (tipicamente 192.168.1.0/24). Questa regola consente ai client della rete LAN di raggiungere qualsiasi altra rete senza restrizioni.

Inoltre, di default, nessun traffico é consentito. Bisognerá quindi creare delle regole di firewall per consentire il ping del gateway, per raggiungere i DNS della VLAN, per poter navigare su Internet, ecc.

  • Creare da Firewall > Aliases l’alias RFC1918 con contenuto gli IP privati 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16:
1
2
3
4
    Name: RFC1918
    Type: Network(s)
    Content: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    Description: Group of Private Networks
  • Da Firewall > VLAN > Rules creare una regola che consenta ai client l’accesso al DNS della VLAN e una seconda che consenta la navigazione in Internet. Le regole vanno create per ogni interfaccia
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
    Action: Pass
    Interface: 5_MNG
    Direction: In
    Protocol: UDP
    Source: 5_MNG net
    Destination: 5_MNG address
    Destination port: DNS-DNS
    Description: Allow to internal DNS

---

    Action: Pass
    Interface: 5_MNG
    Direction: In
    Protocol: TCP/UDP
    Source: 5_MNG net
    Destination / Invert: check (to invert the match)
    Destination: RFC1918
    Destination port range: HTTPS-HTTPS
    Description: Allow HTTPS to non-private network

Per approfondire, si consiglia la lettura del post OPNsense Firewall Rule “Cheat Sheet” di homenetworkguy.

Reservation di un indirizzo IP

  • Da Services > Dnsmasq DNS & DHCP > Leases é possibile visualizzare gli host coi relativi indirizzi IP assegnati dal DHCP e procedere con una reservation da Services: Dnsmasq DNS & DHCP > Hosts tramite mac-address della scheda di rete, visulizzabile col comando ip -c a

static-dhcp-ip

  • Riservando un determinato indirizzo IP al nostro computer, é possibile creare una regola di firewall per consentire l’accesso alla Web GUI di OPNsense o PVE solo da questo IP

Unbound DNS

Da Services > Unbound DNS > Overrides é possibile impostare dei record di tipo A (o altri tipi di record DNS), ad esempio:

overrides-dns

In questo modo, invece di accedere a PVE tramite indirizzo IP, sará possibile accedere da https://pve01.home.lan:8006.

OPNsense config

  • Abilitare HTTP Strict Transport Security

http-strict-transport-security

  • DNS Rebind Protection: il DNS rebinding è un metodo di manipolazione della risoluzione dei nomi di dominio comunemente usato come forma di attacco informatico. In questo attacco, una pagina web dannosa induce i visitatori a eseguire uno script client‑side, che tenta di connettersi a un dominio controllato dall’attaccante. Inizialmente, questo dominio risolve a un indirizzo IP pubblico (ad esempio, 203.0.113.1), che è sotto il controllo diretto dell’attaccante. Mentre lo script è in esecuzione, l’attaccante modifica la configurazione DNS del dominio, facendolo risolvere a un indirizzo IP privato (ad esempio, 192.168.1.1), che corrisponde a un dispositivo nella rete locale della vittima (router, NAS, ecc.). Il browser non verifica nuovamente il dominio dopo la prima risoluzione, quindi continua a considerare le richieste come legittime, anche se ora puntano a un IP interno. Lo script può così inviare richieste HTTP, leggere risposte e persino modificare configurazioni se il dispositivo locale è vulnerabile.

dns-rebind-protection

  • Disabilitare l’utente root e creare un nuovo utente admin, come descritto qui
  • Disabilitare SSH, se non necessario, da System > Settings > Administration

MFA

Per abilitare la 2FA TOTP bisogna:

  • Da System > Access > Servers aggiungere un nuovo TOTP Server. Selezionare Reverse token order se, durante il login, si desidera inserire password+token nel campo password, invece di token+password
  • Da System > Access > Users cliccare su show nella sezione OTP seed e scannerizzare il QRCode con un’applicazione per la 2FA, come Aegis Authenticator o Ente Auth

totp-server

  • Nella sezione System > Access > Tester é possibile testare il token, inserendo lo username dell’utente e token+password (o password+token a seconda della configurazione del server TOTP)

show-otp-seed

  • Nella sezione Authentication in System > Settings > Administration, alla voce Server selezionare il server TOTP creato precedentemente

Spamhaus DROP-list

Le liste DROP (Don’t Route Or Peer) e DROPv6 costituiscono elenchi di tipo drop all traffic. Tali elenchi comprendono blocchi di indirizzi IP (netblock) che risultano essere associati a attività malevole. A differenza della Spamhaus Block List (SBL), una lista più ampia, le liste DROP e DROPv6 sono specificamente progettate per essere integrate in firewall e dispositivi di routing, al fine di filtrare e bloccare in modo efficiente il traffico proveniente da netblock identificati come pericolosi.

Configure Spamhaus DROP

  • Da Firewall > Aliases > All creare i seguenti due alias:

spamhaus_drop

spamhaus_dropv6

  • Creare le seguenti regole per bloccare il traffico IPv4 e IPv6 in ingresso (inbound) e in uscita (outbound) da questi IP dalla WAN, senza dover creare una regola per ogni VLAN
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Traffico in ingresso

    Action: Block
    Interface: WAN
    Direction: In
    TCP/IP Version: IPv4
    Protocol: any
    Source: spamhaus_drop
    Destination: any
    Category: Spamhaus
    Description: Block DROP

---

    Action: Block
    Interface: WAN
    Direction: In
    TCP/IP Version: IPv6
    Protocol: any
    Source: spamhaus_dropv6
    Destination: any
    Category: Spamhaus
    Description: Block DROPv6

// Traffico in uscita

    Action: Block
    Interface: WAN
    Direction: Out
    TCP/IP Version: IPv4
    Protocol: any
    Source: WAN NET
    Destination: spamhaus_drop
    Category: Spamhaus
    Description: Block DROP

---

    Action: Block
    Interface: WAN
    Direction: Out
    TCP/IP Version: IPv6
    Protocol: any
    Source: WAN NET
    Destination: spamhaus_dropv6
    Category: Spamhaus
    Description: Block DROPv6

block-spamhaus-ip

Backup automatici su Nextcloud

  • Su OPNsense, installare il plugin os-nextcloud-backup
  • Sul proprio server Nextcloud, creare un nuovo token d’accesso in Settings > Security
  • Da System > Configuration > Backups, connettere OPNsense a Nextcloud. Si consiglia di inserire anche una password per la cifratura del file .xml

opnsense-to-nc

  • Cliccare il pulsante Setup/Test Nextcloud per salvare la configurazione e avviare il backup delle configurazioni
  • Infine, da System > Settings > Cron si puó creare un nuovo job di backup

backup-job

Per approfondimenti, seguire la documentazione ufficiale.

Videorecap

Prossimi step

Nei prossimi articoli illustreremo, passo passo, come ottimizzare al meglio PVE, come creare una VM assegnandole il tag VLAN corretto, come configurare e gestire gli utenti in PVE con i permessi appropriati e come creare una VPN per accedere dalla WAN (ovvero dalla nostra rete domestica) al nostro homelab. Vedremo anche come accedere effettivamente dall’esterno sia tramite VPN Wireguard che Tailscale.

Nell’immediato futuro, l’homelab dovrebbe evolvere nel seguente modo:

future-homelab

Dunque, si renderá necessario acquistare un AP PoE che supporti le VLAN, come il TP-Link AP TL-WA1201, e lo switch PoE GS1200-8HPV3, in modo da poter raggiungere le risorse anche da mobile, e installare Proxmox Backup su un Intel NUC in mio possesso.

Succesivamente, l’idea sarebbe quella di:

  • Comprare due ulteriori mini PC, in modo da creare un cluster PVE a 3 nodi
  • Creare un cluster OPNsense
  • Fare l’upgrade degli switch 1G con switch a 2.5G, come i SODOLA, in modo da migliorare le performance di Ceph
  • Configurare un NAS UGREEN NASync DXP2800

Riferimenti

The Tech Guy

Tim Shand

bitgrounds.tech

Learn To HomeLab

casaursus

homenetworkguy