martedì 17 maggio 2011

Zeroshell: il miglior Router, Bridge, Firewall italiano

Zeroshell è una distribuzione software Linux gratuita ed italiana che può essere installata su hardware comune (come ad esempio un Personal Computer) e che fornisce i principali servizi di rete di cui una rete locale (LAN) normalmente necessita (router, bridge, firewal, VPN, http proxy, captive portal, ecc.) 

Zeroshell è disponibile nel formato di Live CD o di immagine per Compact Flash ed è configurabile ed amministrabile tramite un qualunque browser web. 

Chiunque abbia un poco di dimestichezza con l'hardware può ad esempio riutilizzare un vecchio PC e trasformarlo in firewall / router (tutto a costo zero quindi!).

Zeroshell può operare come Firewall in due modalità:
1) Packet Filter Firewall (o Stateless FW) cioè filtra i pacchetti basandosi su delle condizioni (regole) imposte sugli header dei pacchetti. Quindi analizza ogni pacchetto che lo attraversa singolarmente, senza tenere conto dei pacchetti che lo hanno preceduto.

2) Stateful Packet Inspection (SPI) cioè filtra i pacchetti basandosi sulla loro correlazione con connessioni già attive o altri pacchetti già transitati. Quindi svolge lo stesso tipo di filtraggio dei packet filter firewall e in più tiene traccia delle connessioni e del loro stato.

Le regole sono raccolte in liste dette chain. Le chain predefinite sono:
la chain INPUT le cui regole si applicano ai pacchetti in ingresso al box Zeroshell e diretti ai suoi processi locali; 
la chain OUTPUT le cui regole si applicano ai pacchetti uscenti dal box e generati dai processi locali; 
la chain FORWARD che si applica ai pacchetti in transito nel box e quindi destinati a subire il routing o il bridging. 

I possibili target, cioè le azioni da compiere su di un pacchetto quando soddisfa i criteri che compongono una regola sono:

ACCEPT: il pacchetto oltrepassa il firewall e prosegue verso la destinazione;
DROP: il pacchetto viene scartato e pertanto non raggiungerà mai la destinazione. Al mittente non viene mandato alcun messaggio che lo avvisi del mancato recapito;
REJECT: come DROP solo che il mittente riceverà un ICMP a scelta dell'amministratore che lo avvisa del mancato recapito;
CHAIN: in questo caso si specifica una chain user defined che prenderà il controllo. Se il pacchetto non soddisferà i criteri di nessuna regola il controllo ritorna alla chain chiamante;
RETURN: il controllo ritorna alla chain chiamante o se il RETURN è invocato da una chain predefinita, il pacchetto segue la policy di default.
Per le chain predefinite viene stabilita la cosidetta Policy di Default che può essere ACCEPT o DROP e viene applicata sui pacchetti che non soddisfano alcuna regola.

I criteri di tipo packet filter sono:
Input: rappresenta l'interfaccia di rete da cui il pacchetto entra nel firewall. Può essere un'interfaccia ethernet, una VPN, un point-to-point, un bridge, un bond o una VLAN 802.1Q applicata a una delle precedenti interfacce;
Output: rappresenta l'interfaccia di rete da cui il pacchetto lascia il firewall. Può essere un'interfaccia ethernet, una VPN, un point-to-point, un bridge, un bond o una VLAN 802.1Q applicata a una delle precedenti interfacce;
Source IP: rappresenta l'indirizzo IP sorgente del pacchetto. Può essere espresso nella forma di singolo IP, subnet o intervallo;
Destination IP: rappresenta l'indirizzo IP destinazione del pacchetto. Può essere espresso nella forma di singolo IP, subnet o intervallo;
Fragments: indica che si tratta del secondo o successivo frammento di un pacchetto IP;
Source MAC: indica il MAC address sorgente del pacchetto;
Protocol Matching: si tratta di filtri sul layer 4 (trasporto) e variano a seconda del protocollo che si sceglie. In particolare nel caso di TCP sono: porta sorgente, porta destinazione, opzioni e flag di connessione (SYN, ACK, FIN, RST, URG, PSH);
Time Matching: rappresenta l'ora e il giorno della settimana in cui il filtro viene applicato.


I criteri di tipo Stateful Packet Inspection sono:
  • NEW: si tratta di un pacchetto appartenente ad una nuova connessione in layer 4;
  • ESTABLISHED: si tratta di un pacchetto appartenente ad una connessione già stabilita;
  • RELATED: si tratta di un pacchetto correlato ad una connessione già stabilita. In genere è un ICMP;
  • INVALID: è è un pacchetto malformato;
Si noti che ogni criterio può essere negato e che i criteri di packet filter possono operare contemporaneamente a quelli SPI rendendo molto flessibili le regole del firewal

Fra le molte caratteristiche messe a disposizione da questo strumento ho trovato molto interessanti:
1) il Bilanciamento e Failover di connessioni multiple a Internet (Net Balancer) che può funzionare in due modi:
  • "Load Balancing and Failover" ovvero le richieste di accesso a Internet vengono bilanciate automaticamente e proporzionalmente al peso di ciascun gateway e in caso di guasto di un gateway, questo viene escluso dal bilanciamento automatico; 
  • "Failover" un solo link risulta attivo per volta (quello con peso più alto fra quelli che non sono nello stato di Fault). Gli altri sono nello stato di Spare, pronti per intervenire in caso di interruzione del collegamento attivo. 
2) il Virtual Private Network (VPN) di tipo LAN-to-LAN ovvero la possibilità di  creare tunnel cifrati (permanenti ed automatici) attraverso Internet che uniscono reti geograficamente distanti.

In Zeroshell si è scelto come soluzione alle VPN site-to-site di incapsulare le trame Ethernet in tunnel TLS autenticati mediante certificato X.509 su entrambi gli endpoint. Questa soluzione, non standardizzata, richiede l'utilizzo di un box Zeroshell in entrambe le LAN o comunque di un altro sistema che utilizzi il software Open Source OpenVPN. Questa soluzione è stata scelta perché presenta i seguenti vantaggi:

Realizzando tra le due LAN una connessione Ethernet (Layer 2) permette oltre al routing anche il bridging delle reti garantendo il passaggio di qualsiasi protocollo di livello 3 (IP, IPX, Appletalk,ecc);
È supportato il protocollo VLAN 802.1Q. Ciò significa che se una rete è divisa in Virtual LAN, queste ultime possono essere trasportate anche sull'altra rete con un unico tunnel VPN;
È supportato il bonding di due o più VPN in configurazione load balancing o fault tollerance. Ciò significa per esempio, che se si dispone di due o più connessioni ADSL, si può realizzare una VPN per ogni connessione e unirle insieme aumentando la banda o l'affidabilità
L'uso di tunnel TLS su porte TCP o UDP permette di attraversare senza problemi router su cui sia abilitato il NAT.

Aggiornamento 07-08-2013: Importante aggiornamento di sicurezza 
"Con la versione 2.0.RC3 di Zeroshell vengono corretti alcuni problemi di sicurezza. In particolare, il DNS ora effettua il caching e accetta query ricorsive solo per le reti locali se non configurato altrimenti. Ultimamente i DNS completamenti aperti sono stati presi di mira per effettuare attacchi DDoS con conseguente consumo di banda. Per questo motivo la migrazione alla 2.0.RC3 è fortemente consigliata.
È stato aggiunto No-IP come provider per il DNS dinamico ed è stato migliorato il riconoscimento dei modem 3G USB. È ora possibile disabilitare la scansione antivirus delle pagine web con conseguente miglioramento delle prestazioni del proxy trasparente su hardware modesto.

Sono stati applicati diversi Fix sulla procedura di Backup/Restore dei profili."


Aggiornamento 02-01-2014: Zeroshell 3.0.0
"Zeroshell 3.0.0 include sostanziali novità tra cui il sistema di update automatico che applica automaticamente security e bug fix e permette l'aggiornamento alle nuove release. È stata migliorata la sicurezza e corretti numerosi bug. I grafici non richiedono più la chiave di attivazione. Sono disponibili numerosi Kernel ottimizzati per i diversi processori e un Kernel compilato con il PAE (Physical Address Extension) che permette di utilizzare più di 4GB di RAM."
Inoltre lo Sviluppatore Fulvio Ricciardi  ha comunicato per email agli iscritti in mailing list l'introduzione di una nuova modalità di bilanciamento del traffico chiamata "Weighted Bonding ":
"E'stata implementata una nuova modalità di bonding disponibile come New Feature per Zeroshell 3.0.0.
Con il Weighted Bonding è possibile distribuire il traffico in maniera proporzionale alla capacità delle interfacce facenti parte del bond. Prima dell'introduzione di questa funzionalità, la distribuzione del traffico avveniva con un semplice Round-Robin che trattava le interfacce in maniera uniforme indipendentemente dall'effettiva banda disponibile. La conseguenza diretta di ciò era che si poteva trarre giovamento dal bonding solo se le linee aggregate avevano una capacità simile. Si poteva constatare che sommare una linea ADSL da 2Mbit/s con una da 7Mbit/s risultava in una banda prossima a soli 4Mbit/s. Ben lontani dal risultato sperato.
Adesso con il Weighted Bonding, basta assegnare alla prima linea ADSL un peso di 2 e alla seconda un peso pari a 7, per vedere una banda aggregata molto prossima alla somma delle due linee. Si noti, che nell'esempio si è volutamentee omesso, per semplictà, di specificare che il bonding di linee WAN ha senso solo tramite il VPN bonding e che quindi il peso va assegnato alle VPN in layer 2."

Aggiornamento 15-07-2014: Zeroshell 3.1.0
Una nuova versione con le seguenti caratteristiche [Fonte Zeroshell.it]
"E' disponibile la nuova release Zeroshell 3.1.0. Con questa release si e' migliorata la stabilita' del sistema e sono stati corretti molti bug. Tra le nuove feature, ce ne sono alcune importanti come:
  • L'Installation Manager che permette un'installazione piu' facile e veloce rispetto a prima, partendo da CD o Flash USB oppure utilizzando un'installazione gia' esistente.
  • Il Weighted Bonding che permette di bilanciare il traffico su link con velocita' differente.
  • Il sistema di Monitoring e Alerting via e-Mail/SMS che tiene sotto controllo il verificarsi di determinati eventi come per esempio l'assenza di rete. La lista degli eventi puo' essere estesa e i gestori degli eventi personalizzati.
  • L'utility CNTop che visualizza gli indirizzi IP con il maggior numero di connessioni TCP/UDP aperte contemporaneamente. Cio' puo' essere usato efficacemente per determinare un host dal quale sta avvendo un attacco DDoS da o verso la propria rete.
Tra le altre cose, il Captive Portal e' stato migliorato e permette ora un maggior numero di utenti connessi contemporaneamente.
Se e' gia' installata la release 3.0.0 e l'accesso al repository attivo e' possibile fare l'upgrade alla 3.1.0 automaticamente, senza perdita della configurazione e con pochi semplici click. Il pacchetto da installare dal repository e' il 53100 che si occupera' di effettuare la migrazione con una minima interruzione di servizio dovuta al reboot. Se invece si vuole usare l'Installation Manager, tenete presente che tutti i dati sul disco di destinazione saranno distrutti. E' percio' necessario effettuare prima un backup del profilo e poi il successivo ripristino sulla nuova installazione."


Aggiornamento 04-11-2017: Zeroshell 3.8.0
A partire da Zeroshell 3.3.0 è disponibile un Kernel a 64 bit che garantisce prestazioni migliori per processi Kernel Mode quali per esempio il Firewall, il Routing, il Bridging, il Traffic Shaping, i Filtri Layer 7 e il Network Address Translation (NAT).
Zeroshell 3.4.0 ha un nuovo Kernel con un migliorato riconoscimento e supporto per l'hardware di nuova generazione. Migliorate le prestazioni e corretti numerosi bug. Garantita la connettività Wireless per iPad e iPhone aggiornati all'ultimo iOS 9.

A partire dalla versione Zeroshell 3.7.1A esiste una distribuzione software compatibile anche per  hardware con Architettura ARM. Al momento sono supportate le seguenti piattaforme: 
  • Orange Pi PC Plus (Wifi supportato in Access Point e Client mode e possibile installazione su 8GB MMC integrata)
  • Orange Pi R1 (Wifi supportato in Access Point e Client mode e 2 Ethernet 10/100)
  • Raspberry Pi 2 Model B
  • Raspberry Pi 3 Model B (Wifi supportto in Access Point e Client mode)
  • Orange Pi Zero (Wifi supportato in Access Point e Client mode)
  • Orange Pi PC
  • Orange Pi Plus/Plus2 (Wifi supportato in Access Point e Client mode e possibile installazione su 16GB MMC integrata)
   


I Requisiti Hardware necessari a Zeroshell per funzionare su un Personal Computer sono molto esigui.
Zeroshell funziona su PC x86 o x86_64 con minimo un Pentium a 233Mhz, 96MB di RAM, un lettore CDROM ATA o adattatore ATA per Compact Flash (CF) se si preferisce fare il boot da questo tipo di supporto (per esempio negli embedded device).
Sono supportati device di storage quali dischi IDE, SATA, SCSI e USB per la memorizzazione del database contenente i dati e la configurazione.
È supportata qualsiasi scheda grafica e porta seriale RS232 per la funzione di terminale a carattere.
Sono supportate tutte le schede di rete PCI, USB e PCMCIA che hanno supporto nel kernel di Linux. Alcuni modelli di network card, benché perfettamente funzionanti possono non avere supporto completo per le VLAN 802.1q. In tal caso le trame ethernet più grandi di 1496 byte non vengono inoltrate sulle VLAN.

Zeroshell 3.8.0 ha un nuovo Kernel e diversi Bug e Security Fix. 

LINK [Zeroshell Donwload]
New Site [Zeroshell.org]


   




ESPERIENZA PERSONALE: 
Utilizzo uno Zeroshell con bilanciamento su due collegamenti ADSL gestiti con differenti internet provider e differenti velocità.
Utilizzo una VPN LAN-to-LAN su altri due Zeroshell per collegare facilmente un'Azienda che possiede due sedi localizzate in città differenti sfruttando la loro connessione ADSL.

Di seguito alcune delle caratteristiche più importanti:
- Bilanciamento e Failover di connessioni multiple a Internet;
- Connessioni UMTS/HSDPA mediante modem 3G;
- Server RADIUS 
- Captive Portal 
- Gestione del QoS (Quality of Service) 
- HTTP Proxy con antivirus open source ClamAV 
- Supporto per la funzionalità di Wireless Access Point con Multi SSID utilizzando schede di rete WiFi basate sui chipset Atheros. 
- VPN host-to-lan con protocollo L2TP/IPsec 
- VPN lan-to-lan con incapsulamento delle trame Ethernet in tunnel SSL/TLS, 
- Router con route statiche e dinamiche 
- Bridge 802.1d con protocollo Spanning Tree 
- Firewall Packet Filter e Stateful Packet Inspection (SPI) 
- Controllo mediante Firewall e Classificatore QoS del traffico di tipo File sharing P2P;
- NAT (Network Address Translation)
- TCP/UDP port forwarding (PAT) per creare Virtual Server
- Server DNS multizona e con gestione automatica della Reverse Resolution in-addr.arpa;
- Server DHCP multi subnet con possibilità di assegnare l'indirizzo IP in base al MAC Address del richiedente;
- Virtual LAN 802.1Q (tagged VLAN) applicabili sulle interfacce Ethernet, sulle VPN lan-to-lan, sui bonding di VPN e sui bridge composti da interfacce Ethernet, VPN e bond di VPN;
- Client PPPoE per la connessione alla WAN tramite linee ADSL, DSL e cavo 
- Client DNS dinamico che permette la rintracciabilità su WAN anche quando l'IP è dinamico. 
- Server e client NTP (Network Time Protocol);
- Server syslog per la ricezione e la catalogazione dei log di sistema prodotti da host remoti quali sistemi Unix, router, switch, access point WI-FI, stampanti di rete e altro compatibile con protocollo syslog;
- Autenticazione Kerberos 5 mediante un KDC integrato e cross autenticazione tra domini;
- Autorizzazione LDAP, NIS e RADIUS;
- Autorità di certificazione X.509 per l'emissione e la gestione di certificati elettronici;
- Integrazione tra sistemi Unix e domini Windows Active Directory in un unico sistema di autenticazione e autorizzazione mediante LDAP e Kerberos 5 cross realm authentication.


©RIPRODUZIONE RISERVATA