Homepage » come » The Beginner's Guide to iptables, il firewall Linux

    The Beginner's Guide to iptables, il firewall Linux

    Iptables è un'utilità firewall estremamente flessibile creata per i sistemi operativi Linux. Che tu sia un principiante geek di Linux o un amministratore di sistema, probabilmente c'è un modo in cui iptables ti può essere di grande aiuto. 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, basta recuperare il pacchetto iptables:

    sudo apt-get install iptables

    Ci sono alternative GUI a 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 risolto 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 facendo 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.

    Produzione - Questa catena è utilizzata per le connessioni in uscita. Ad esempio, se provi a pingare howtogeek.com, iptables controllerà la sua 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 chain

    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 quello 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 le regole della catena di policy in precedenza, 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, è quindi possibile utilizzare iptables per negare specifici indirizzi IP o numeri di porta, pur continuando ad accettare tutte le altre connessioni. Raggiungeremo questi comandi in un minuto.

    Se si preferisce negare tutte le connessioni e specificare manualmente a 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 riservate 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 - Consenti la connessione.

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

    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:

    Eliminazione della connessione:

    Rifiutare 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 FAR CADERE, ma puoi cambiarli in ACCETTARE o RIFIUTARE, in base alle tue esigenze e al modo in cui hai configurato le tue policy bar.

    Nota: in questi esempi, useremo iptables -A per 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] [numero] 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? L'aggiunta di una regola alla catena di output non consentirà inoltre tentativi SSH in uscita?

    Ecco dove arrivano gli stati di 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 fino a quando 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 NUOVO, 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