Il firewall su Linux svolge un ruolo fondamentale nella protezione di un sistema informatico. Agisce come una barriera, controllando e filtrando il traffico di rete per proteggere il sistema da accessi non autorizzati, attacchi e altre minacce. Senza un firewall configurato correttamente, il server potrebbe essere vulnerabile a vari tipi di attacchi informatici, con gravi conseguenze per la sicurezza e la riservatezza dei dati.
In questo articolo, esamineremo due strumenti principali per configurare il firewall Linux: firewalld e iptables. Condurremo un'analisi comparativa delle loro caratteristiche, funzionalità e vantaggi. Inoltre, forniremo istruzioni dettagliate per l'impostazione e l'utilizzo di ciascuno di questi strumenti, nonché discuteremo le best practice per proteggere il tuo sistema con un firewall sulla piattaforma Linux. Tutte le azioni saranno illustrate su un server virtuale con accesso root.
Configurazione di firewalld su Linux
Firewalld (Firewall Daemon) è un programma per la gestione del firewall nei sistemi operativi Linux. Fornisce un'interfaccia utente per configurare le regole del firewall, consentendo o bloccando le connessioni delle applicazioni di rete. È preinstallato di default nella maggior parte delle distribuzioni server. Se Firewalld non è preinstallato, può essere installato indipendentemente dai repository ufficiali della distribuzione.
Per i sistemi Red Hat (come RHEL, CentOS, Fedora) l'installazione viene eseguita con il comando:
yum install firewalld
Per Debian/Ubuntu:
apt-get install firewalld
Dopo l'installazione, può essere avviato e attivato immediatamente con il comando:
systemctl start firewalld
Successivamente, è necessario aggiungere il servizio all'avvio:
systemctl enable firewalld
A questo punto, consigliamo di disabilitare ufw, poiché l'uso simultaneo di questo strumento con firewalld o iptables non è consigliato. Controlla lo stato:
systemctl status ufw
Per fermarlo, immettere il comando:
systemctl stop ufw
Per la disattivazione completa:
ufw disable
Dopo queste azioni, puoi procedere alla configurazione di firewalld.
Per prima cosa, è necessario definire le zone di attendibilità. Firewalld usa il concetto di zone per determinare il livello di attendibilità per le interfacce di rete. A ogni interfaccia viene assegnata una zona e le regole del firewall vengono applicate in base alla zona. L'elenco di tutte le zone disponibili viene aperto con il comando:
firewall-cmd --get-zones
In genere vengono utilizzate 4 zone principali:
- Pubblico: Questa zona è per le reti che consideri non sicure;
- Privata: Si applica alle reti domestiche o ad altre connessioni di rete affidabili;
- Interno: Utilizzato per reti interne, come quelle all'interno di un'organizzazione o di una rete aziendale;
- DMZ: In questa zona solitamente vengono posizionati i server che dovrebbero essere accessibili da Internet.
Tuttavia, questo è solo un esempio. Puoi aggiungere la tua zona usando il comando:
firewall-cmd --permanent --new-zone=nameyourzone
Dopo l'aggiunta è necessario ricaricare:
firewall-cmd --reload
Per eliminare una zona si usa un metodo simile
firewall-cmd --permanent --delete-zone=nameyourzone
Dopo aver definito le zone, è necessario consentire il traffico per i servizi e le porte necessari. Per consentire un determinato servizio, utilizzare il comando:
firewall-cmd --zone=public --add-service=name
Dove Nome è il nome del servizio. Ad esempio, per consentire il traffico per Apache:
firewall-cmd --zone=public --add-service=http
Per definire le porte consentite, utilizzare il comando:
firewall-cmd --zone=public --add-port=number/protocol
Ad esempio, la porta standard 22 per SSH si presenterebbe così:
firewall-cmd --zone=public --add-port=22/tcp
In questa fase, le regole principali sono già state create. Successivamente, determina come verrà elaborato il traffico in base a origine, destinazione, porta e altri criteri. Per aggiungere una regola (utilizzando la percezione zona come esempio):
firewall-cmd --zone=public rule
Ad esempio, per consentire il traffico in entrata da qualsiasi sorgente alla porta 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
Per rimuovere una regola:
firewall-cmd --permanent --remove-rule=rule_specification
Dove regola è il tipo di regola (ad esempio, porta, servizio, regola ricca, ecc.) e specificazione_regola è la specificazione della regola stessa.
Dopo aver apportato modifiche alla configurazione di Firewalld, è necessario salvarle e applicarle. Per salvare le modifiche, utilizzare il comando:
firewall-cmd --runtime-to-permanent
Per applicare le modifiche:
firewall-cmd --reload
Una volta completata la configurazione, puoi verificare i parametri selezionati aprendo l'elenco di tutte le regole:
firewall-cmd --list-all
In caso di problemi, controllare i log di Firewalld con il comando:
journalctl -u firewalld
Nota: abbiamo trattato solo l'algoritmo generale per impostare la connessione. Lo strumento ha funzionalità estese. Per informazioni complete su tutte le opzioni disponibili, puoi usare documentazione ufficiale oppure apri la guida:
firewall-cmd --help
Configurazione di iptables su Linux
A differenza di Firewalld, iptables è uno strumento più vecchio ma ancora ampiamente utilizzato in Linux per la gestione del firewall. Fornisce un approccio più diretto e flessibile alle regole di filtraggio dei pacchetti a livello del kernel Linux. Tuttavia, iptables richiede conoscenze ed esperienza più avanzate rispetto a Firewalld, il che lo rende meno accessibile ai principianti. Controlla la versione preinstallata dello strumento con il comando:
iptables -V
Se lo strumento non è installato, sarà necessario installarlo. Il comando per l'installazione su Ubuntu, Debian:
apt install iptables
Per i sistemi Red Hat (ad esempio, CentOS, Fedora):
yum install iptables
Comando per l'attivazione dopo l'installazione:
systemctl start iptables
Per aggiungerlo all'avvio, eseguire:
systemctl enable iptables
Prima di iniziare la configurazione di iptables, è importante capire come funziona. Questo è facilitato dalla sintassi del programma. Appare come segue:
iptables -t table action chain additional_parameters
Analizziamo più approfonditamente ogni elemento.
Iptables ha quattro tabelle principali: filtro, nat, mangle e raw. Ognuno è progettato per elaborare determinati tipi di pacchetti e ha le sue catene di regole:
- filtro: Questa è la tabella usata più di frequente, contenente le regole di filtraggio dei pacchetti. È usata per prendere decisioni se consentire o negare i pacchetti.
- nat: Questa tabella è usata per modificare gli indirizzi di rete e le porte nei pacchetti. È spesso usata per impostare il masquerading (NAT).
- mancante: In questa tabella puoi modificare le intestazioni dei pacchetti. È utilizzata per operazioni specializzate sui pacchetti, come la marcatura.
- crudo: Questa tabella è utilizzata per configurare le regole che si applicano prima che passino attraverso il sistema di tracciamento delle connessioni. In genere è utilizzata per impostare regole che non devono essere modificate dal sistema di tracciamento, come l'eliminazione di pacchetti da determinati indirizzi.
Ogni tabella contiene un set di catene. Le catene sono una sequenza di regole che vengono controllate in sequenza. Ci sono tre catene predefinite:
- INPUT (in entrata)Le regole di questa catena determinano cosa fare con i pacchetti in arrivo.
- OUTPUT (in uscita)Questa catena si applica a tutti i pacchetti che il tuo computer invia ad altri dispositivi o computer sulla rete.
- FORWARD (inoltro)Le regole in questa catena specificano cosa fare con i pacchetti inoltrati.
Infine, ogni catena possiede una qualche azione (obiettivo). In pratica, vengono utilizzate 5 azioni principali:
- ACCETTA: Consenti al pacchetto di passare attraverso il firewall.
- GOCCIA: Rifiuta il pacchetto e lo scarta senza alcuna risposta.
- RIFIUTA: Rifiuta il pacchetto e invia al mittente un messaggio di errore ICMP.
- LOG: Registra il pacchetto nel registro di sistema ed esegui un'altra azione (ad esempio, ACCETTA o ELIMINA).
- RITORNO: Interrompe il controllo delle regole nella catena corrente e torna alla catena chiamante (se applicabile).
Per avviare la configurazione, aprire l'elenco delle regole esistenti con il comando:
iptables -L
Come guida per la configurazione di Iptables, diamo un'occhiata ad alcuni esempi pratici dei comandi più comunemente usati. Per comodità, divideremo gli esempi in 3 gruppi, a seconda della specifica catena.
Catena INGRESSO:
- Consentire il traffico in entrata tramite protocollo TCP sulla porta 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Consentire il traffico in entrata tramite protocollo UDP sulla porta 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Bloccare il traffico in entrata da un indirizzo IP specifico:
iptables -A INPUT -s 192.168.1.100 -j DROP
Catena USCITA:
- Consentire il traffico in uscita tramite protocollo TCP sulla porta 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Consentire il traffico in uscita tramite protocollo UDP sulla porta 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Bloccare il traffico in uscita verso una porta specifica (ad esempio, 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Catena INOLTRARE:
- Blocca il traffico inoltrato da un intervallo specifico di indirizzi IP:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Bloccare l'inoltro di pacchetti da un'interfaccia di rete specifica:
iptables -A FORWARD -i eth1 -j DROP
3. Limitare il numero di connessioni simultanee per una porta specifica (in questo esempio, 10 connessioni al minuto sulla porta 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Come puoi vedere, in ogni caso separato, viene utilizzato un argomento aggiuntivo (comando). Per ottenere un elenco completo di possibili argomenti e supporto generale per la funzionalità dello strumento, inserisci:
iptables -h
Per verificare che le impostazioni siano corrette, immettere nuovamente il comando per visualizzare l'elenco delle regole:
iptables -L
Per eliminare una regola specifica, utilizzare il comando:
iptables -D chain rule_number
Ad esempio, se si desidera eliminare la regola numero 1 dalla catena INPUT, il comando sarà simile al seguente:
iptables -D INPUT 1
Per eliminare tutte le regole con un comando:
iptables -F
Nota importante: le regole di iptables non vengono salvate automaticamente dopo il riavvio del sistema o del servizio. Per salvare le regole, è necessario aggiungerle a un file di configurazione e ripristinarle dopo il riavvio. iptables-salva e iptables-ripristino le utility possono aiutarti. Per salvare le regole, inserisci il comando:
iptables-save > /etc/iptables/rules.v4
Questo salva le regole iptables correnti nel file rules.v4. Per ripristinare dopo il riavvio, inserisci:
iptables-restore < /etc/iptables/rules.v4
Questo comando ripristina le regole dal file rules.v4.
Conclusione
La configurazione del firewall su Linux tramite firewalld o iptables è un aspetto importante per garantire la sicurezza del server. Entrambi gli strumenti offrono mezzi affidabili per gestire il traffico di rete e proteggere il sistema da accessi non autorizzati e attacchi informatici. La scelta tra firewalld e iptables dipende dalle esigenze e dalle preferenze specifiche dell'utente, considerando le loro diverse funzionalità e punti di forza.