In questo tutorial parleremo di iptables, il firewall o firewall che abbiamo in Linux. Questo strumento ci consentirà di filtrare i pacchetti (di cui si occuperà il tutorial), generare un record di registro, eseguire traduzioni NAT.
Grazie a iptables possiamo generare regole per filtrare i pacchetti in modo abbastanza semplice, anche se la prima volta che lo usi può sembrare un po' confuso, vedrai che quando lo usi per alcuni giorni non ha complicazioni.
L'uso di questo strumento richiede privilegi elevati, ovvero dovremo essere superutenti per farlo funzionare. Abbiamo molte funzionalità all'interno di iptables, l'obiettivo del tutorial è vedere un'approssimazione del suo utilizzo attraverso esempi. È importante che una volta terminato il tutorial continui a scavare, poiché è molto utile.
Quindi lasciamo il sito ufficiale nel caso sia di interesse:
NotaPer IPv6 abbiamo ip6tables.
Se vogliamo vedere le informazioni su iptables, eseguiremo quanto segue in un terminale:
uomo iptablesVedremo le seguenti informazioni:
Nell'immagine puoi vedere parte delle informazioni fornite dal comando, per vederle tutte scorri verso il basso nel terminale. Come abbiamo visto all'inizio del tutorial, uno dei compiti che iptables ci permetterà è creare regole o filtri per sapere cosa fare con i pacchetti che hanno la nostra macchina come origine/destinazione. Per questo compito, saremo interessati a sapere perché utilizziamo i seguenti concetti:
tavole
Iptables ha diverse tabelle ma per il nostro tutorial ci concentriamo solo su tabella dei filtri, che si occupa del filtraggio, viene utilizzato per impostazione predefinita in iptables.
Catene
Le stringhe che inserirò qui sono quelle che appartengono alla tabella commentata prima.
- Ingresso: Pacchetti destinati alla nostra macchina.
- Produzione: Pacchetti che provengono dal nostro sistema.
- Inoltrare: Pacchetti che passano attraverso la nostra macchina per essere indirizzati a un'altra.
Regole
Indicheremo i 2 che verranno utilizzati nel tutorial, ma ce ne sono altri.
- Accettare: Si accettano pacchi.
- Far cadere: i pacchetti vengono scartati.
Parametri
Alcuni dei parametri che possiamo utilizzare sono i seguenti.
- -Una regola: Per aggiungere una regola
- -D regola: Per eliminare la regola che indichiamo.
- -L: ci permette di elencare le regole.
- -F: Elimina tutte le regole esistenti.
- -j obiettivo: Imposta il tipo di regola (Accetta, Elimina).
- -t tabella: indicherà la tabella che viene utilizzata (per impostazione predefinita la tabella dei filtri).
- -p protocollo: Usato per indicare il protocollo.
- -i interfaccia: Stabiliamo l'interfaccia per la regola.
- -S: Per indicare l'origine.
- -D: Per indicare la destinazione.
- -h: Visualizza la guida.
Ce ne sono molti altri, come possono essere --porto di destinazione o --porta-sorgente. Per vederli tutti puoi eseguire il comando di cui abbiamo discusso sopra:
uomo iptablesOppure puoi anche eseguire:
iptables -hNotaBisogna guardare con attenzione le opzioni offerte dallo strumento, poiché distingue tra lettere minuscole e maiuscole e possiamo sbagliare (non sarà lo stesso mettere -P Quello -P).
Iniziamo con gli esempi, ne verranno messi in totale 10, così si capirà meglio e potremo vedere come funziona iptables in modalità firewall. Negli esempi non vedrai sudo, non sarà necessario se sei come root, altrimenti dovrai aggiungere la parola sudo all'inizio di ogni esempio.
1. Proibire la partenza verso qualsiasi destinazionePer cominciare, faremo un semplice esempio, non lasciare l'uscita da nessuna parte.
iptables -A OUTPUT -j DROPQuesto è molto facile, come puoi vedere, il prossimo è ancora più facile.
2. Cancella tutte le regoleContinuiamo con un esempio molto semplice, lasciamo i nostri iptables senza regole, per questo eseguiremo:
iptables -FBene, complichiamolo un po' di più nel prossimo.
3. Vieta la partenza attraverso la porta 80Ora ci occupiamo di chiudere l'output tramite una porta specifica, in questo caso è 80, quindi non avremo la navigazione web tramite il protocollo http (se navighiamo su una pagina https, possiamo navigare, anche se potremmo fare lo stesso come 80).
iptables -A OUTPUT -p tcp --destination-port 80 -j DROPNotaQuando si utilizza una porta di destinazione o sorgente, sarà necessario inserire il parametro -p per indicare il protocollo.
Passiamo al quarto esempio.
4. Proibisci la navigazione verso una paginaIn questa occasione siamo interessati a vietare l'accesso alla pagina X dal nostro sistema, immaginiamo che questa pagina sia solvetic.com, per questo scopriamo il suo IP, molto facilmente eseguendo un ping lo otterremo.
E ora eseguiremo:
iptables -A OUTPUT -d 178.33.118.246 -j DROPCome possiamo vedere, è sufficiente indicare il tuo IP dopo il parametro -D.
5. Elenca le regole che esistonoQuesto esempio cercherà di elencare le regole di filtro che abbiamo attualmente definito:
iptables -LVediamo un'immagine, abbiamo solo due regole definite, come vediamo di seguito:
Passiamo al sesto esempio, in cui utilizzeremo nuovamente l'elenco delle regole.
6. Elimina una regola specificaQui, partendo dalle regole che avevamo nell'esempio precedente, elimineremo una delle regole di uscita, in questo caso la prima che appare, eseguiamo quanto segue:
iptables -D USCITA 1E per verificare che sia stato effettivamente eliminato, utilizziamo l'esempio 5:
Continuiamo con altro.
7. Evita di essere pingNon vogliamo che ci eseguano il ping, per questo bloccheremo la voce per il protocollo ICMP.
iptables -A INPUT -p ICMP -j DROPDi seguito lascio un'immagine del ping prima di eseguire il comando sopra e dopo:
Possiamo vedere che la nostra macchina non risponde, perché rifiuta i pacchetti ICMP. Se blocchiamo l'output invece dell'input, eseguiremo:
iptables -A OUTPUT -p ICMP -j DROPLa stessa cosa dell'immagine precedente accadrebbe di nuovo. Per testare ho fatto 3 volte ping, se eseguiamo possiamo vedere il numero di pacchetti:
iptables -L -v
Vediamo che mette effettivamente 3 nell'immagine precedente.
8. Impedire a un IP di inviarci datiApplicheremo un input, non vogliamo che un determinato IP ci colleghi, quindi eseguiremo:
iptables -A INPUT -s 192.168.66.1 -j DROPDiamo un'occhiata a un esempio un po' più lungo.
9. Consenti uscite a un intervallo di IPImmagina di voler accettare solo output per un intervallo di indirizzi IP, ma rifiuta il resto degli output, dobbiamo eseguire:
Iptables -A OUTPUT -d 192.168.0.0/24 -j ACCEPT Iptables -A OUTPUT -j DROPNotaL'ordine di esecuzione delle regole è importante, prova questo esempio con la rete che vuoi consentire e fai una connessione, vedrai che funziona, quindi elimina tutte le regole ed esegui le 2 frasi al contrario, ora rifiuterebbe le connessioni .
Passiamo al decimo e ultimo esempio.
10. Aprire la porta 143 (imap)Stiamo per aprire una porta per l'ingresso di tutti i pacchetti tcp, in questo caso 143 (sarebbe lo stesso per il resto).
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPTIn questo esempio abbiamo voluto usare --dport, quindi puoi vedere che possiamo usare questo o --porto di destinazione, potremmo anche usare --sport invece di --porta-sorgente.
Il tutorial finisce qui, ora provi ad applicare altre regole, più ti eserciti, più velocemente avrai nell'applicare le regole e meno ti costerà. Per finire lasciamo un tutorial che potrebbe interessarti, aprendo e chiudendo le porte in Windows 10.