Articles

Linux iptables Firewall Esempi semplificati

Nel post precedente, abbiamo parlato di come proteggere il server Linux utilizzando le best practice di Hardening. Alcune persone mi hanno chiesto della sezione firewall, che era una breve introduzione al firewall iptables. Oggi discuteremo in dettaglio il firewall iptables Linux e come proteggere il traffico del server utilizzando quel firewall impressionante.

Sommario

Iptables su CentOS 7

Se stai usando CentOS 7, scoprirai che firewalld gestisce iptables, quindi se vuoi tornare a iptables, devi fermarti e mascherare firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

Quindi installa il servizio iptables e abilitalo:

$ yum install iptables-services$ systemctl enable iptables

Quindi puoi avviarlo:

$ systemctl start iptables

Come funziona il firewall Linux

Le funzioni del firewall Iptables sono costruite sul Netfilter framework disponibile nel kernel Linux per il filtraggio dei pacchetti.

Tipi di firewall

Esistono due tipi di firewall:

Il firewall stateless elabora ogni pacchetto da solo, significa che non vede altri pacchetti della stessa connessione.

Stateful firewall questo tipo di firewall si preoccupa di tutti i pacchetti passati attraverso di esso, quindi conosce lo stato della connessione. Dà più controllo sul traffico.

Netfilter contiene tabelle. Queste tabelle contengono catene e catene contengono regole individuali.

Se un pacchetto corrisponde a qualsiasi regola, iptables applicherà l’azione regola a quel pacchetto.

Le azioni possono essere: accetta, rifiuta, ignora o passa il pacchetto ad altre regole per una maggiore elaborazione.

Netfilter può elaborare il traffico in entrata o in uscita utilizzando l’indirizzo IP e il numero di porta.

Il comando iptables gestisce e configura Netfilter.

Prima di iniziare a scrivere i comandi del firewall, dobbiamo capire un po ‘ la struttura del firewall in modo da poter scrivere facilmente le regole del firewall.

tabelle firewall iptables

Netfilter ha tre tabelle che possono contenere regole per l’elaborazione.

La tabella dei filtri iptables è la tabella principale per l’elaborazione del traffico.

La seconda è la tabella nat, che gestisce le regole NAT.

La terza tabella è la tabella mangle per i pacchetti mangling.

Catene di tabelle

Ogni tabella delle tabelle menzionate sopra contiene catene; queste catene sono il contenitore delle regole di iptables.

La tabella dei filtri contiene le catene FORWARD, INPUT e OUTPUT. È possibile creare una catena personalizzata per salvare le regole su di esso.

Se un pacchetto arriva all’host, iptables lo elaborerà in base alle regole della catena di INPUT.

Se il pacchetto sta andando su un altro host, ciò significa che le regole della catena di output lo elaboreranno.

iptables utilizza la catena FORWARD per gestire i pacchetti che hanno avuto accesso all’host ma sono destinati a un altro host.

Politica di catena

Ogni catena nella tabella dei filtri ha una politica. Il criterio è l’azione predefinita eseguita da iptables.

La politica potrebbe essere DROP, REJECT e ACCEPT.

Il criterio ACCEPT consente ai pacchetti di passare il firewall. La politica di rilascio rilascia un pacchetto senza informare il client. Il criterio di rifiuto elimina anche il pacchetto e informa il mittente.

Dal punto di vista della sicurezza, è necessario eliminare tutti i pacchetti che arrivano all’host e accettare solo i pacchetti che provengono da fonti attendibili.

Aggiungere regole iptables

Puoi aggiungere una nuova regola usando il comando iptables in questo modo:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Spezziamo questo comando in pezzi in modo da poter capire tutto su di esso.

Il-A significa che stiamo aggiungendo una nuova regola. Per impostazione predefinita, iptables aggiunge tutte le nuove regole alla tabella dei filtri a meno che non si specifichi un’altra tabella.

Il flag-i specifica il dispositivo a cui verrà applicata la regola. Se non si specifica un dispositivo, iptables applicherà la regola a tutto il traffico in entrata indipendentemente dai dispositivi.

Il flag-p specifica il protocollo del pacchetto che si desidera elaborare, che è TCP nel nostro caso.

Il flag –dport specifica la porta di destinazione, che è 80.

Il-d specifica l’indirizzo IP di destinazione, che è 1.2.3.4. Se nessun indirizzo IP di destinazione specificato, la regola si applica a tutto il traffico in entrata su eth1 indipendentemente dall’indirizzo IP.

Il-j specifica l’azione o l’azione di SALTO da eseguire. Qui stiamo accettando i pacchetti usando la politica di accettazione.

La regola precedente consente il traffico HTTP in entrata, che si trova sulla porta 80.

Che dire di consentire il traffico in uscita?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

È possibile utilizzare il flag-A per aggiungere regole alla catena di OUTPUT.

Il flag-o viene utilizzato per il dispositivo utilizzato per il traffico in uscita.

Il flag-sport specifica la porta di origine.

È possibile utilizzare il nome del servizio come http o https invece del numero di porta numerico su sport o dport. Tutti i nomi dei servizi sono nel file / etc / services.

Dovresti usare il nome del servizio piuttosto che un numero di porta, il che semplifica la lettura delle regole.

ordine delle regole iptables

Le regole iptables pongono nuove regole alla fine della catena. Puoi aggiungerlo in cima usando l’opzione-I.

La sequenza delle regole è importante come vedrai ora. Puoi inserire le tue regole esattamente dove vuoi usando il flag I.

Guarda le seguenti regole per capire come l’ordinamento delle regole è importante:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

La prima regola accetta tutto il traffico UDP arriva a eth1 e il numero 3 è l’ordine delle regole.

La seconda regola elimina il traffico che entra nella porta 80.

La prima regola accetterà tutto il traffico, quindi la seconda regola che dovrebbe eliminare il traffico non farà nulla poiché iptables passa il traffico nella prima regola.

Le tue regole dovrebbero avere senso poiché l’ordine delle regole nella catena è importante.

Elenca le regole iptables

Puoi elencare le regole in una catena usando-L flag:

$ iptables -L INPUT

Puoi mostrare i numeri di riga per le regole usando –line-numbers:

$ iptables -L INPUT --line-numbers

L’elenco mostra i nomi dei servizi. Puoi mostrare i numeri di porta invece usando l’opzione-n:

$ iptables -L INPUT -n --line-numbers

La regola di cui sopra renderà l’elenco più veloce perché impedisce a iptables di risoluzione DNS e ricerche di servizio.

Puoi elencare tutte le regole per tutte le catene in questo modo:

$ iptables -L -n --line-numbers

Per ottenere quanti pacchetti elaborati da ogni regola, puoi usare il flag-v:

$ iptables -L -v

Inoltre, puoi resettare i contatori a zero usando il flag-Z.

Ora possiamo aggiungere una nuova regola a qualsiasi catena che vogliamo, possiamo inserire la regola in un ordine specifico e possiamo elencare le regole per qualsiasi catena o tutte le catene, ma per quanto riguarda l’eliminazione di una regola?

Eliminazione delle regole

È possibile eliminare una regola utilizzando-D flag:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Questo comando eliminerà la regola HTTP specificata in precedenza.

Prima di eliminare una regola, assicurati della specifica della regola elencandola, quindi eliminala.

È possibile eliminare la regola utilizzando il numero d’ordine invece di scrivere le specifiche della regola.

$ iptables -D INPUT 2

Puoi eliminare tutte le regole in una catena specifica usando il flag-F, che significa svuotare tutte le regole.

$ iptables -F INPUT

Se si dimentica di menzionare il nome della catena quando si utilizza il flag-F, tutte le regole della catena verranno eliminate.

Sostituzione delle regole

Puoi sostituire le regole esistenti con la tua regola usando-R flag:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

Questo comando sostituirà la prima regola nella catena di INPUT con la regola digitata.

Elenco tabella specifica

Per elencare una tabella specifica, utilizzare il flag-t con il nome della tabella in questo modo:

$ iptables -L -t nat

Qui elenchiamo le regole nella tabella nat.

Iptables User Defined Chain

Per creare una catena definita dall’utente, usa il flag-N.

$ iptables -N MY_CHAIN

Inoltre, è possibile rinominarlo utilizzando-E flag.

$ iptables -E MY_CHAIN NEW_NAME

Ed è possibile eliminare la catena definita dall’utente utilizzando il flag-X.

$ iptables -X MY_CHAIN

Se non si menziona il nome della catena quando si utilizza il flag-X, verranno eliminate tutte le catene definite dall’utente. Non è possibile eliminare catene incorporate come INPUT e OUTPUT.

Reindirizzamento a una catena definita dall’utente

È possibile reindirizzare i pacchetti a una catena definita dall’utente come catene incorporate utilizzando-j flag.

$ iptables -A INPUT -p icmp -j MY_CHAIN

La regola precedente reindirizzerà tutto il traffico ICMP alla catena MY_CHAIN.

Impostazione del criterio predefinito per le catene

È possibile utilizzare il flag-P per impostare il criterio predefinito per una catena specifica. Il criterio predefinito potrebbe essere ACCEPT, REJECT e DROP.

$ iptables -P INPUT DROP

Quindi ora, la catena di input lascerà cadere qualsiasi pacchetto a meno che non si scriva una regola per consentire qualsiasi traffico in entrata.

SYN Flooding

L’attaccante invia pacchetti SYN solo senza completare l’handshake TCP e di conseguenza, l’host ricevente avrebbe molte connessioni aperte e il server diventa troppo occupato per rispondere ad altri client.

Possiamo usare il modulo limite di iptables firewall per proteggerci dalle inondazioni SYN.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

Qui specifichiamo solo 10 pacchetti SYN al secondo. È possibile regolare questo valore in base alle proprie esigenze di rete.

Se questo limiterà la tua rete, puoi usare i cookie SYN.

SYN Cookies

In

/etc/sysctl.conf

file e aggiungi questa riga:

net.ipv4.tcp_syncookies = 1

Quindi salva e ricarica.

$ sysctl -p

Rilascia pacchetti di stato NON VALIDI

I pacchetti di stato NON VALIDI sono pacchetti che non appartengono a nessuna connessione e li rilasci.

$ iptables -A INPUT -m state --state INVALID -j DROP

Questa regola eliminerà tutti i pacchetti di stato non validi in arrivo.

Rilascia pacchetti frammentati

I pacchetti frammentati sono pezzi rotti di pacchetti malformati di grandi dimensioni e dovresti scrivere regole per rilasciarli.

Il flag-f indica al firewall iptables di selezionare tutti i frammenti. Quindi, se non si utilizza iptables come router, è possibile eliminare i pacchetti frammentati.

$ iptables -A INPUT -f -j DROP

Salva le regole iptables

Se riavvii il tuo server, perderai tutte le regole che hai scritto,quindi come mantenerle?

Puoi salvare tutte le tue regole usando il comando iptables-save se stai usando CentOS o Red Hat.

iptables-save > /etc/sysconfig/iptables

Su CentOS 7, puoi salvare regole come questa:

$ service iptables save

Puoi salvare una tabella specifica come solo la tabella dei filtri:

$ iptables-save -t filter

Inoltre, è possibile utilizzare iptables-restore per ripristinare le regole.

Nelle distribuzioni basate su Debian, è possibile utilizzare il pacchetto iptables-persistent per salvare e ripristinare le regole.

Per prima cosa, installalo:

$ apt-get install iptables-persistent

Quindi puoi salvare e ripristinare le regole:

$ netfilter-persistent save
$ netfilter-persistent reload

Spero che tu trovi il firewall iptables facile. Continua a tornare.

Grazie.

Fondatore di LikeGeeks. Sto lavorando come amministratore di sistema Linux dal 2010. Sono responsabile della manutenzione, della protezione e della risoluzione dei problemi dei server Linux per più client in tutto il mondo. Mi piace scrivere script shell e Python per automatizzare il mio lavoro.