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
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.
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:
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