The Beginner's Guide to iptables, il firewall Linux

Sommario:

The Beginner's Guide to iptables, il firewall Linux
The Beginner's Guide to iptables, il firewall Linux

Video: The Beginner's Guide to iptables, il firewall Linux

Video: The Beginner's Guide to iptables, il firewall Linux
Video: COME SCEGLIERE IL MONITOR PERFETTO | OLED, IPS o VA? - YouTube 2024, Maggio
Anonim
Iptables è un'utilità firewall estremamente flessibile creata per i sistemi operativi Linux. Che tu sia un novizio di Linux o un amministratore di sistema, probabilmente c'è un modo in cui iptables può essere di grande utilità per te. Continua a leggere mentre ti mostriamo come configurare il firewall Linux più versatile.
Iptables è un'utilità firewall estremamente flessibile creata per i sistemi operativi Linux. Che tu sia un novizio di Linux o un amministratore di sistema, probabilmente c'è un modo in cui iptables può essere di grande utilità per te. Continua a leggere mentre ti mostriamo come configurare il firewall Linux più versatile.

fotografato da ezioman.

Informazioni su iptables

iptables è un'utilità firewall da riga di comando che utilizza le policy chains per consentire o bloccare il traffico. Quando una connessione tenta di stabilirsi sul tuo sistema, iptables cerca una regola nel suo elenco per abbinarla a. Se non lo trova, ricorre all'azione predefinita.

iptables viene sempre preinstallato su qualsiasi distribuzione Linux. Per aggiornarlo / installarlo, recupera il pacchetto iptables:

sudo apt-get install iptables

Ci sono alternative GUI ad iptables come Firestarter, ma iptables non è poi così difficile una volta che hai qualche comando in giù. Vuoi essere estremamente attento quando configuri le regole di iptables, in particolare se sei SSH in un server, perché un comando errato può bloccarti in modo permanente fino a quando non viene fissato manualmente sulla macchina fisica.

Tipi di catene

iptables utilizza tre diverse catene: input, forward e output.

Ingresso - Questa catena è utilizzata per controllare il comportamento delle connessioni in entrata. Ad esempio, se un utente tenta di accedere a SSH nel PC / server, iptables tenterà di far corrispondere l'indirizzo IP e la porta a una regola nella catena di input.

Inoltrare - Questa catena viene utilizzata per le connessioni in ingresso che non vengono effettivamente consegnate localmente. Pensa a un router: i dati vengono sempre inviati ma raramente effettivamente destinati al router stesso; i dati sono appena inoltrati al suo obiettivo. A meno che tu non stia eseguendo un qualche tipo di instradamento, NATing o qualcos'altro sul tuo sistema che richiede l'inoltro, non userai nemmeno questa catena.

C'è un modo infallibile per verificare se il tuo sistema utilizza / ha bisogno della catena forward.

iptables -L -v

Lo screenshot qui sopra è di un server che è in esecuzione da alcune settimane e non ha restrizioni sulle connessioni in entrata o in uscita. Come puoi vedere, la catena di input ha elaborato 11 GB di pacchetti e la catena di output ha elaborato 17 GB. La catena forward, d'altra parte, non ha avuto bisogno di elaborare un singolo pacchetto. Questo perché il server non sta facendo alcun tipo di inoltro o utilizzato come dispositivo pass-through.
Lo screenshot qui sopra è di un server che è in esecuzione da alcune settimane e non ha restrizioni sulle connessioni in entrata o in uscita. Come puoi vedere, la catena di input ha elaborato 11 GB di pacchetti e la catena di output ha elaborato 17 GB. La catena forward, d'altra parte, non ha avuto bisogno di elaborare un singolo pacchetto. Questo perché il server non sta facendo alcun tipo di inoltro o utilizzato come dispositivo pass-through.

Produzione - Questa catena è utilizzata per le connessioni in uscita. Ad esempio, se si tenta di eseguire il ping su howtogeek.com, iptables controllerà la catena di output per vedere quali sono le regole riguardanti ping e howtogeek.com prima di prendere una decisione per consentire o negare il tentativo di connessione.

Il caveat

Anche se eseguire il ping di un host esterno sembra qualcosa che dovrebbe solo attraversare la catena di output, tenere presente che per restituire i dati, verrà utilizzata anche la catena di input. Quando si utilizza iptables per bloccare il sistema, ricordare che molti protocolli richiederanno una comunicazione bidirezionale, quindi sia la catena di input che quella di uscita dovranno essere configurate correttamente. SSH è un protocollo comune che le persone dimenticano di consentire su entrambe le catene.

Comportamento predefinito della policy policy

Prima di entrare e configurare regole specifiche, vorrete decidere quale sarà il comportamento predefinito delle tre catene. In altre parole, cosa si vuole fare in iptables se la connessione non corrisponde a nessuna regola esistente?

Per vedere quali sono le policy chain attualmente configurate per il traffico senza paragoni, esegui

iptables -L

comando.

Come puoi vedere, abbiamo anche usato il comando grep per darci un output più pulito. In questo screenshot, le nostre catene sono attualmente in grado di accettare il traffico.
Come puoi vedere, abbiamo anche usato il comando grep per darci un output più pulito. In questo screenshot, le nostre catene sono attualmente in grado di accettare il traffico.

Più volte, vorrete che il vostro sistema accetti le connessioni per impostazione predefinita. A meno che non abbiate modificato in precedenza le regole della catena della politica, questa impostazione dovrebbe già essere configurata. In ogni caso, ecco il comando per accettare le connessioni per impostazione predefinita:

iptables --policy INPUT ACCEPT

iptables --policy OUTPUT ACCEPT

iptables --policy FORWARD ACCEPT

Per impostazione predefinita alla regola di accettazione, è possibile quindi utilizzare iptables per negare specifici indirizzi IP o numeri di porta, pur continuando ad accettare tutte le altre connessioni. Raggiungeremo quei comandi tra un minuto.

Se si preferisce negare tutte le connessioni e specificare manualmente quali si desidera consentire la connessione, è necessario modificare la politica predefinita delle catene da eliminare. Ciò sarebbe probabilmente utile solo per i server che contengono informazioni sensibili e che hanno sempre gli stessi indirizzi IP collegati.

iptables --policy INPUT DROP

iptables --policy OUTPUT DROP

iptables --policy FORWARD DROP

Risposte specifiche della connessione

Con i criteri di catena predefiniti configurati, è possibile iniziare ad aggiungere regole a iptables in modo che sappia cosa fare quando incontra una connessione da o verso un particolare indirizzo IP o porta. In questa guida, esamineremo le tre "risposte" più basilari e comunemente usate.

Accettare - Permetti la connessione.

Far cadere - Lascia cadere la connessione, comportati come se non fosse mai successo. Questo è meglio se non vuoi che l'origine realizzi il tuo sistema.

Rifiutare - Non consentire la connessione, ma inviare un errore. Questo è meglio se non vuoi che una particolare fonte si connetta al tuo sistema, ma vuoi che sappiano che il tuo firewall li ha bloccati.

Il modo migliore per mostrare la differenza tra queste tre regole è mostrare come appare quando un PC tenta di eseguire il ping su una macchina Linux con iptables configurato per ognuna di queste impostazioni.

Permettere la connessione:

Rifiutare la connessione:
Rifiutare la connessione:
Image
Image

Permettere o bloccare connessioni specifiche

Con le policy chain configurate, ora è possibile configurare iptables per consentire o bloccare specifici indirizzi, intervalli di indirizzi e porte. In questi esempi, imposteremo le connessioni

DROP

ma puoi cambiarli

ACCEPT

o

REJECT

in base alle tue esigenze e al modo in cui hai configurato le tue policy chains.

Nota: in questi esempi, useremo

iptables -A

aggiungere regole alla catena esistente. iptables inizia in cima alla sua lista e passa attraverso ogni regola finché non trova quella che corrisponde. Se è necessario inserire una regola sopra un'altra, è possibile utilizzare

iptables -I [chain] [number]

per specificare il numero che dovrebbe essere nella lista.

Connessioni da un singolo indirizzo IP

Questo esempio mostra come bloccare tutte le connessioni dall'indirizzo IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

Connessioni da un intervallo di indirizzi IP

Questo esempio mostra come bloccare tutti gli indirizzi IP nell'intervallo di rete 10.10.10.0/24. È possibile utilizzare una maschera di rete o una notazione barra standard per specificare l'intervallo di indirizzi IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

o

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Connessioni a una porta specifica

Questo esempio mostra come bloccare le connessioni SSH da 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

È possibile sostituire "ssh" con qualsiasi protocollo o numero di porta. Il

-p tcp

parte del codice dice a iptables che tipo di connessione usa il protocollo. Se stavi bloccando un protocollo che usa UDP piuttosto che TCP, allora

-p udp

sarebbe invece necessario.

Questo esempio mostra come bloccare le connessioni SSH da qualsiasi indirizzo IP.

iptables -A INPUT -p tcp --dport ssh -j DROP

Stati di connessione

Come accennato in precedenza, molti protocolli richiedono comunicazioni a due vie. Ad esempio, se si desidera consentire le connessioni SSH al sistema, le catene di input e di output avranno bisogno di una regola aggiunta a loro. Ma, cosa succede se si desidera che SSH venga inserito nel proprio sistema per essere autorizzato? L'aggiunta di una regola alla catena di output non consentirà anche i tentativi SSH in uscita?

È qui che entrano gli stati della connessione, che ti danno la capacità di consentire una comunicazione bidirezionale, ma solo permettere di stabilire connessioni unidirezionali. Date un'occhiata a questo esempio, dove sono consentite le connessioni SSH da 10.10.10.10, ma le connessioni SSH a 10.10.10.10 non lo sono. Tuttavia, il sistema è autorizzato a inviare informazioni su SSH purché la sessione sia già stata stabilita, il che rende possibile la comunicazione SSH tra questi due host.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Salvataggio delle modifiche

Le modifiche apportate alle regole iptables verranno eliminate la volta successiva che il servizio iptables verrà riavviato a meno che non si esegua un comando per salvare le modifiche. Questo comando può variare in base alla distribuzione:

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

O

/etc/init.d/iptables save

Altri comandi

Elenca le regole di iptables attualmente configurate:

iptables -L

Aggiungere il

-v

l'opzione ti darà informazioni su pacchetti e byte e aggiungendo

-n

elencherà tutto numericamente. In altre parole, nomi host, protocolli e reti sono elencati come numeri.

Per cancellare tutte le regole attualmente configurate, è possibile emettere il comando flush.

iptables -F

Consigliato: