Iptables è un'utilità firewall estremamente flessibile creata per i sistemi operativi Linux. Che tu sia un principiante di Linux o un amministratore di sistema, probabilmente c'è un modo in cui iptables può esserti di grande utilità. Continua a leggere mentre ti mostriamo come configurare il firewall Linux più versatile.
A proposito di iptables
iptables è un'utilità firewall della riga di comando che utilizza catene di politiche per consentire o bloccare il traffico. Quando una connessione cerca di stabilirsi sul tuo sistema, iptables cerca una regola nel suo elenco a cui abbinarla. Se non ne trova uno, ricorre all'azione predefinita.
iptables viene quasi sempre preinstallato su qualsiasi distribuzione Linux. Per aggiornarlo / installarlo, recupera il pacchetto iptables:
sudo apt-get install iptables
Ci sono alternative GUI a iptables come Avviatore di fuoco , ma iptables non è poi così difficile una volta che hai alcuni comandi inattivo. Devi essere estremamente attento quando configuri le regole di iptables, in particolare se sei in SSH su un server, perché un comando sbagliato può bloccarti permanentemente fino a quando non viene riparato manualmente sulla macchina fisica.
Tipi di catene
iptables utilizza tre diverse catene: input, forward e output.
Ingresso - Questa catena viene utilizzata per controllare il comportamento delle connessioni in entrata. Ad esempio, se un utente tenta di accedere a SSH nel tuo PC / server, iptables tenterà di abbinare l'indirizzo IP e la porta a una regola nella catena di input.
Inoltrare - Questa catena viene utilizzata per le connessioni in entrata che non vengono effettivamente fornite localmente. Pensa a un router: i dati vengono sempre inviati ad esso, ma raramente sono effettivamente destinati al router stesso; i dati vengono semplicemente inoltrati alla destinazione. A meno che tu non stia eseguendo un qualche tipo di routing, NAT o qualcos'altro sul tuo sistema che richiede l'inoltro, non utilizzerai nemmeno questa catena.
C'è un modo infallibile per verificare se il tuo sistema utilizza / necessita la catena di inoltro.
iptables -L -v
Lo screenshot qui sopra mostra un server 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 esegue alcun tipo di inoltro né viene utilizzato come dispositivo pass-through.
Produzione - Questa catena viene utilizzata per le connessioni in uscita. Ad esempio, se provi a eseguire il ping su howtogeek.com, iptables controllerà la sua catena di output per vedere quali sono le regole relative a ping e howtogeek.com prima di decidere se consentire o negare il tentativo di connessione.
L'avvertenza
Anche se il ping di un host esterno sembra qualcosa che dovrebbe solo attraversare la catena di output, tieni presente che per restituire i dati, verrà utilizzata anche la catena di input. Quando usi iptables per bloccare il tuo sistema, ricorda che molti protocolli richiedono una comunicazione a due vie, quindi sia la catena di input che quella di output dovranno essere configurate correttamente. SSH è un protocollo comune che le persone dimenticano di consentire su entrambe le catene.
Comportamento predefinito della catena di criteri
Prima di entrare e configurare regole specifiche, ti consigliamo di decidere quale sia il comportamento predefinito delle tre catene. In altre parole, cosa vuoi che faccia iptables se la connessione non corrisponde ad alcuna regola esistente?
Per vedere cosa sono attualmente configurate le tue catene di criteri con il traffico senza corrispondenza, esegui il
iptables -L
comando.
Come puoi vedere, abbiamo anche usato il comando grep per darci un output più pulito. In quello screenshot, le nostre catene sono attualmente immaginate per accettare il traffico.
Il più delle volte, vorrai che il tuo sistema accetti le connessioni per impostazione predefinita. A meno che tu non abbia modificato in precedenza le regole della catena di criteri, questa impostazione dovrebbe essere già configurata. Ad ogni modo, ecco il comando per accettare le connessioni per impostazione predefinita:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy ACCETTA INOLTRO
Impostando per impostazione predefinita la regola di accettazione, è quindi possibile utilizzare iptables per negare indirizzi IP o numeri di porta specifici, pur continuando ad accettare tutte le altre connessioni. Arriveremo a quei comandi tra un minuto.
Se preferisci negare tutte le connessioni e specificare manualmente quelle a cui vuoi consentire la connessione, dovresti modificare la politica predefinita delle tue catene per eliminare. Fare questo sarebbe probabilmente utile solo per i server che contengono informazioni sensibili e hanno solo gli stessi indirizzi IP collegati a loro.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Risposte specifiche della connessione
Con i criteri di catena predefiniti configurati, puoi 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 utilizzate.
Accettare - Consenti la connessione.
Far cadere - Interrompi la connessione, comportati come se non fosse mai successo. Questa è la cosa migliore se non vuoi che la fonte realizzi che il tuo sistema esiste.
Rifiutare - Non consentire la connessione, ma restituisci un errore. Questa è la soluzione migliore se non vuoi che una particolare fonte si connetta al tuo sistema, ma vuoi che sappiano che il tuo firewall l'ha bloccata.
Il modo migliore per mostrare la differenza tra queste tre regole è mostrare come appare quando un PC tenta di eseguire il ping di una macchina Linux con iptables configurato per ciascuna di queste impostazioni.
Consentire la connessione:
Interruzione della connessione:
Rifiutare la connessione:
Consentire o bloccare connessioni specifiche
Dopo aver configurato le catene di criteri, è ora possibile configurare iptables per consentire o bloccare indirizzi, intervalli di indirizzi e porte specifici. In questi esempi, imposteremo le connessioni su
FAR CADERE
, ma puoi passare a
ACCETTARE
o
RIFIUTARE
, a seconda delle tue esigenze e di come hai configurato le catene di policy.
Nota: in questi esempi, utilizzeremo
iptables -A
per aggiungere regole alla catena esistente. iptables inizia all'inizio della sua lista e segue ogni regola fino a quando non ne trova una che corrisponde. Se devi inserire una regola sopra un'altra, puoi usare
iptables -I [chain] [number]
per specificare il numero che dovrebbe essere nella lista.
Connessioni da un unico 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 dal 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 utilizza UDP anziché 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 richiederanno una comunicazione a due vie. Ad esempio, se si desidera consentire le connessioni SSH al sistema, le catene di input e output avranno bisogno di una regola aggiunta a esse. Ma cosa succede se si desidera che sia consentito l'ingresso SSH nel proprio sistema? L'aggiunta di una regola alla catena di output non consentirà anche i tentativi SSH in uscita?
È qui che entrano in gioco gli stati di connessione, che ti danno la capacità di cui hai bisogno per consentire la comunicazione a due vie, ma consentono di stabilire solo connessioni unidirezionali. Dai un'occhiata a questo esempio, dove le connessioni SSH DA 10.10.10.10 sono consentite, ma le connessioni SSH a 10.10.10.10 non lo sono. Tuttavia, il sistema è autorizzato a restituire informazioni su SSH finché la sessione è 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, ISTABLISHED -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 di iptables verranno eliminate la prossima volta che il servizio iptables verrà riavviato a meno che non si esegua un comando per salvare le modifiche. Questo comando può variare a seconda della distribuzione:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables salva
O
/etc/init.d/iptables save
Altri comandi
Elenca le regole di iptables attualmente configurate:
iptables -L
Aggiungendo il file
-a
opzione ti darà informazioni su pacchetti e byte e aggiungendo
-n
elencherà tutto numericamente. In altre parole, i nomi host, i protocolli e le reti sono elencati come numeri.
Per cancellare tutte le regole attualmente configurate, puoi emettere il comando flush.
iptables -F