Zeroshell, sfruttando il Netfilter e l’iptables di Linux, può essere configurato per agire da firewall proteggendo la LAN da attacchi e port scan provenienti dalla WAN. Zeroshell può operare sia da Packet Filter, cioè filtrare basandosi su delle condizioni (regole) imposte sugli header dei pacchetti, sia da Stateful Packet Inspection (SPI) cioè filtrando i pacchetti basandosi sulla loro correlazione con connessioni già attive o altri pacchetti già transitati.
Le regole sono raccolte in delle 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. Si noti che in quest’ultimo caso si può stabilire se la regola debba essere applicata solo ai pacchetti in routing, solo ai pacchetti in bridging o indifferentemente agli uni e agli altri. Allo scopo di rendere più modulare la programmazione delle regole del firewall possono essere create nuove liste (user defined chain) le quali possono essere il target di quelle predefinite o di altre definite dall’amministratore.
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 firewall.