Come configurare smartphone e PC. Portale informativo
  • casa
  • Errori
  • Concetti di base di iptables in Linux. Configurazione di netfilter con iptables

Concetti di base di iptables in Linux. Configurazione di netfilter con iptables

Il compito principale firewall(firewall) filtrare ed elaborare i pacchetti che passano attraverso la rete. Quando analizza un pacchetto di input, il firewall prende una decisione sul destino di questo pacchetto: scartare il pacchetto ( FAR CADERE), accetta il pacco ( ACCETTARE) o fare qualcos'altro con esso.

A linux firewall è un modulo del kernel chiamato netfilter ed è un insieme di hook per lavorare con lo stack di rete. L'interfaccia per modificare le regole con cui il firewall elabora i pacchetti è l'utilità iptables per IPv4 e utilità ip6tables per IPv6.

Tutto il lavoro di filtraggio del traffico viene eseguito dal core del sistema. iptables non è un demone e non crea nuovi processi nel sistema. Accendi o spegni iptables sta solo inviando un segnale al kernel. L'elevata velocità di filtraggio si ottiene analizzando solo le intestazioni dei pacchetti.

Torna alle caratteristiche principali iptables relazionare:

  • filtrare il traffico in base agli indirizzi del mittente e del destinatario dei pacchetti, numeri di porta;
  • reindirizzare i pacchetti secondo determinati parametri;
  • organizzazione dell'accesso alla rete (SNAT);
  • port forwarding da WAN a LAN (DNAT);
  • limitare il numero di connessioni;
  • definizione delle quote di traffico;
  • esecuzione delle regole secondo il programma;

Considera il processo di lavoro principale iptables(fonte immagine rigacci.org).

Un pacchetto in arrivo colpisce prima il dispositivo di rete, dopodiché viene intercettato dal driver e passato al kernel. Successivamente, il pacchetto viene passato attraverso una serie di tabelle e solo allora viene trasferito all'applicazione locale o reindirizzato a un altro sistema se si tratta di un pacchetto di transito.

A iptables Esistono tre tipi di tabelle:

  1. mazza– utilizzato per apportare modifiche all'intestazione del pacchetto;
  2. nat– utilizzato per la traduzione degli indirizzi di rete;
  3. filtro– per filtrare il traffico;

tavolo mangano

Lo scopo principale del tavolo mazza- apportare modifiche all'intestazione del pacchetto. Questa tabella può eseguire le seguenti operazioni:

  • impostare il bit Tipo di servizio;
  • impostazione del campo Time To Live;
  • impostare un'etichetta su un pacchetto che può essere verificato in altre regole;

Catene nel tavolo mazza:

  • PREPERCORSO- utilizzato per apportare modifiche ai pacchetti all'ingresso di iptables, prima di prendere una decisione di instradamento;
  • POSTERIORE- utilizzato per apportare modifiche ai pacchetti all'uscita da iptables, dopo che è stata presa una decisione di instradamento;
  • INGRESSO- utilizzato per apportare modifiche ai pacchetti prima che vengano trasferiti all'applicazione locale;
  • PRODUZIONE- utilizzato per apportare modifiche ai pacchetti provenienti da un'applicazione all'interno di iptables;
  • INOLTRARE- utilizzato per apportare modifiche ai pacchetti di transito;

tavola naturale

La tabella viene utilizzata per Network Address Translation e quando viene rilevato un pacchetto che stabilisce una nuova connessione. Questa tabella può eseguire le seguenti operazioni:

  • DNAT (Traduzione dell'indirizzo di rete di destinazione)– traduzione dell'indirizzo di destinazione nell'intestazione del pacchetto;
  • SNAT (Traduzione dell'indirizzo di rete di origine)– modifica dell'indirizzo di origine del pacchetto;
  • MASCHERA- utilizzato per le stesse finalità di SNAT, ma consente di lavorare con indirizzi IP dinamici;

Catene in questa tabella:

  • PREPERCORSO- utilizzato per apportare modifiche ai pacchetti all'ingresso di iptables;
  • PRODUZIONE– utilizzato per tradurre gli indirizzi in pacchetti prima dell'ulteriore instradamento;
  • POSTERIORE– utilizzato per convertire i pacchetti prima di inviarli alla rete;

tabella dei filtri

La tabella viene utilizzata per il filtraggio dei pacchetti. Questa tabella ha tre catene:

  1. INGRESSO– catena per i pacchetti in arrivo;
  2. INOLTRARE– catena per i pacchetti inoltrati (di transito);
  3. PRODUZIONE– catena per i pacchetti in uscita;

Un pacchetto che passa attraverso queste catene può essere soggetto a: ACCETTARE, FAR CADERE, RIFIUTARE, TRONCO D'ALBERO.

Per riassumere, un pacchetto in arrivo passa attraverso una catena di regole. Ogni regola contiene condizione e obiettivo(azione). Se il pacchetto soddisfa la condizione, viene trasmesso al target, altrimenti al pacchetto viene applicata la regola successiva nella catena. Se il pacchetto non soddisfa nessuna delle condizioni nella catena, viene applicata l'azione predefinita.

Catena Tavolo
filtro nat mazza
INGRESSO + +
INOLTRARE + +
PRODUZIONE + + +
PREPERCORSO + +
POSTERIORE + +

utilità iptables

Installazione di iptables

# sotto Arch Linux yaourt -S iptables # sotto Ubuntu sudo apt-get install iptables

Avvio di iptables

# sotto Arch Linux sudo systemctl abilita iptables sudo systemctl start iptables # sotto Ubuntu sudo service iptables start

Regole di salvataggio

# sotto Arch Linux sudo sh -c "iptables-save > /etc/iptables/iptables.rules" # sotto Ubuntu sudo sh -c "iptables-save > /etc/iptables.rules"

Ripristino delle regole da un file

iptables-ripristino< firewall-config

Ogni regola dentro iptablesè una linea separata formata secondo determinate regole e contenente criteri e azioni. In generale, la regola ha il seguente formato:

Comando Iptables [-t table].

  • t table - specifica il nome della tabella per la quale verrà creata la regola;
  • comando - il comando che specifica l'azione iptables- aggiungere una regola, eliminare una regola, ecc.;
  • match - imposta i criteri di test in base ai quali viene determinato se il pacchetto rientra o meno nella regola;
  • bersaglio/salto - quale azione dovrebbe essere eseguita quando il criterio è soddisfatto;

Comandi iptables:

  • -A - aggiungendo una regola alla catena, la regola verrà aggiunta alla fine della catena;
  • -D - elimina la regola dalla catena;
  • -R - sostituire una regola con un'altra;
  • -I - inserisce una nuova regola nella catena;
  • -L - visualizza l'elenco delle regole nella catena data;
  • -F - ripristina tutte le regole nella catena specificata;
  • -Z - azzera tutti i contatori nella catena data;
  • -N - crea una nuova catena con il nome dato;
  • -X - eliminazione di una catena;
  • -P - imposta la politica di default per la catena;
  • -E - rinomina catena utente;

Esempi di comandi iptables

I pacchetti possono essere filtrati in base ai seguenti parametri:

Sorgente del pacchetto

L'opzione -s viene utilizzata per filtrare in base all'origine. Ad esempio, neghiamo tutti i pacchetti in arrivo dall'host 192.168.1.95:

Iptables -A INPUT -s 192.168.1.95 -j DROP

È possibile utilizzare il nome di dominio per specificare l'indirizzo host:

Iptables -A INPUT -s test.host.net -j DROP

Puoi anche specificare un'intera sottorete:

Iptables -A INPUT -s 192.168.1.0/24 -j DROP

Puoi anche usare la negazione (segno!). Ad esempio, tutti i pacchetti provenienti da host diversi da 192.168.1.96 verranno eliminati:

Iptables -A INGRESSO ! -s 192.168.1.96 -j GOCCIA

Consenti al traffico di andare a localhost:

Iptables -A INGRESSO 1 -i lo -j ACCEPT

Registrazione dei tentativi di spoofing con il prefisso "IP_SPOOF A:" e interruzione della connessione

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Indirizzo di destinazione

Per fare ciò, usa l'opzione -d. Ad esempio, neghiamo tutti i pacchetti in uscita all'host 192.168.1.95:

Iptables -A OUTPUT -d 192.168.156.156 -j DROP

Nega l'accesso a una risorsa

Iptables -A OUTPUT -d vk.com -j RIFIUTA

Come nel caso della sorgente del pacchetto, possono essere utilizzati indirizzi di sottorete e nomi di dominio. Anche la negazione funziona.

Protocollo

L'opzione -p specifica il protocollo. Può essere utilizzata tutto, icmp, tcp, udp o numero di protocollo (da /etc/protocolli).

Consentire le richieste di eco in entrata

Iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Porta di origine

Consentiamo tutti i pacchetti in uscita dalla porta 80:

Iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Blocca tutte le richieste in arrivo sulla porta 80:

Iptables -A INPUT -p tcp --dport 80 -j DROP

Per specificare la porta, è necessario specificare il protocollo (tcp o udp). Puoi usare la negazione.

Gamma aperta di porte

Iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Porto di destinazione

Consenti connessioni HTTP

iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Consentiamo la ricezione di dati dal server DHCP

Iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

  • A distanza sfruttamento degli errori nel software al fine di renderlo inutilizzabile;
  • Alluvione- invio di un numero enorme di pacchetti privi di significato all'indirizzo della vittima. Lo scopo dell'inondazione può essere un canale di comunicazione o risorse della macchina. Nel primo caso, il flusso di pacchetti occupa l'intera larghezza di banda e non consente alla macchina attaccata di elaborare richieste legittime. Nella seconda, le risorse della macchina vengono catturate tramite chiamate ripetute e molto frequenti a qualche servizio che esegue un'operazione complessa e ad alta intensità di risorse. Può trattarsi, ad esempio, di una lunga chiamata a uno dei componenti attivi (script) del server web. Il server spende tutte le risorse della macchina per elaborare le richieste dell'attaccante e gli utenti devono attendere. Flood può essere diverso: ICMP flood, SYN flood, UDP flood e HTTP flood

Raccolta di informazioni sulle connessioni di rete

Visualizza connessioni aperte

Netstat -ntu | awk "(stampa $ 5)" | taglia -d: -f1 | ordina | uniq -c | ordina-n

Numero di connessioni alla porta 80

Netstat -na | grep ":80" | wc -l

Dump TCP delle connessioni (a quali richieste di dominio vengono inviate più spesso)

Dominio della porta Tcpdump -npi eth0

SYN flood può essere verificato contando il numero di connessioni TCP semiaperte

Netstat -na | grep ":80" | grep SYN_RCVD

Protezione da diversi tipi di allagamento.

Alluvione dell'ICMP. Un metodo molto primitivo per regolare la larghezza di banda e creare carichi sullo stack di rete tramite l'invio monotono di richieste ICMP ECHO (ping). Facilmente rilevabili analizzando il flusso di traffico in entrambe le direzioni: durante un attacco flood ICMP, sono quasi identici. Un modo quasi indolore di protezione assoluta si basa sulla disabilitazione delle risposte alle richieste ICMP ECHO:

sysctl net.ipv4.icmp_echo_ignore_all=1

O usando iptables:

Iptables -A INPUT -p icmp -j DROP --icmp-type 8

SYN inondazione. Uno dei modi più comuni non solo per intasare il canale di comunicazione, ma anche per mettere lo stack di rete del sistema operativo in uno stato in cui non può più accettare nuove richieste di connessione. Basato su un tentativo di inizializzare un gran numero di connessioni TCP simultanee inviando un pacchetto SYN con un indirizzo di ritorno inesistente. Dopo diversi tentativi di inviare un pacchetto ACK di risposta a un indirizzo irraggiungibile, la maggior parte dei sistemi operativi accoda la connessione non riuscita. E solo dopo l'ennesimo tentativo, la connessione viene chiusa. Poiché il flusso di pacchetti ACK è molto grande, presto la coda si riempie e il kernel si rifiuta di provare ad aprire una nuova connessione. I bot DoS più intelligenti analizzano anche il sistema prima di lanciare un attacco per inviare richieste solo per aprire porte vitali. Identificare un tale attacco è semplice: prova a connetterti a uno dei servizi.

I concetti chiave di iptables sono:

    Regola - consiste in un criterio, un'azione e un contatore. Se il pacchetto soddisfa i criteri, l'azione gli viene applicata e viene conteggiato nel contatore. Potrebbe esserci o meno un criterio, quindi viene implicitamente assunto il criterio "tutti i pacchetti". Inoltre, non è necessario specificare un'azione: in assenza di un'azione, la regola funzionerà solo come contatore. Le regole per ciascuna catena vengono attivate nell'ordine in cui appaiono, quindi l'ordine è importante.

    • Criteri: un'espressione logica che analizza le proprietà di un pacchetto e/o di una connessione e determina se questo particolare pacchetto è soggetto alla regola corrente. I criteri sono collegati da un "AND" logico.

      Azione - Una descrizione dell'azione da intraprendere sul pacchetto e/o sulla connessione se sono soggetti a questa regola. Le azioni saranno discusse più dettagliatamente di seguito.

      Contatore: un componente della regola che fornisce la contabilizzazione del numero di pacchetti che soddisfano i criteri di questa regola. Il contatore tiene anche conto della dimensione totale di tali pacchetti in byte.

    Una catena è una sequenza ordinata di regole. Le catene possono essere suddivise in personalizzate e di base.

    • Catena di base: la catena creata per impostazione predefinita quando la tabella viene inizializzata. Ogni pacchetto, a seconda che sia destinato all'host stesso, da esso generato o in transito, deve passare attraverso l'insieme delle catene di base delle varie tabelle ad esso assegnate. Inoltre, la catena di base differisce dalla catena utente per la presenza di una "azione predefinita" (politica predefinita). Questa azione viene applicata a quei pacchetti che non sono stati elaborati da altre regole di questa catena e catene richiamate da essa. I nomi delle catene di base sono sempre scritti in maiuscolo (PREOUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

      Catena utente: una catena creata dall'utente. Può essere utilizzato solo all'interno della propria tabella. Si consiglia di non utilizzare nomi maiuscoli per tali catene per evitare confusione con le catene di base e le azioni integrate.

    Tabella: un insieme di catene di base e utente, unite da uno scopo funzionale comune. I nomi delle tabelle (così come i moduli dei criteri) sono scritti in minuscolo, poiché in linea di principio non possono entrare in conflitto con i nomi delle catene personalizzate. Quando si chiama il comando iptables, la tabella viene specificata nel formato -t nome_tabella. Se non specificato in modo esplicito, viene utilizzata la tabella dei filtri.

Analisi:

# Scarica le regole della tabella dei filtri$ sudo iptables-save -c -t filter # Filtro tabella * filtro # Catene INPUT, FORWARD, OUTPUT, loro politiche e contatori:ACCETTA INGRESSO [ 19302 :9473669 ] :ACCETTA IN AVANTI [ 0 :0 ] :ACCETTA USCITA [ 5462736 :4247599532 ] # Regola: "" - contatore di regole, "-A INPUT" - catena, "-i em1 -p tcp -m tcp --dport 22" - criteri, "-j ACCEPT" - azione[ 17:1020 ] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPT COMMIT

Architettura

In un sistema netfilter, i pacchetti vengono passati attraverso catene. Una catena è un elenco ordinato di regole e ogni regola può contenere criteri e un'azione o transizione. Quando un pacchetto passa attraverso la catena, il sistema netfilter controlla a sua volta se il pacchetto soddisfa tutti i criteri della regola successiva e, in tal caso, esegue un'azione (se non ci sono criteri nella regola, l'azione viene eseguita per tutti i pacchetti che passano attraverso la regola). Ci sono molti criteri possibili. Ad esempio, un pacchetto corrisponde al criterio -source 192.168.1.1 se l'intestazione del pacchetto specifica che il mittente è 192.168.1.1. Il tipo più semplice di salto, --jump, inoltra semplicemente il pacchetto all'inizio di un'altra catena. Puoi anche specificare un'azione con --jump. Le azioni standard disponibili in tutte le catene sono ACCEPT (salta), DROP (elimina), QUEUE (invia per l'analisi a un programma esterno) e RETURN (ritorna alla catena precedente per l'analisi). Ad esempio, i comandi

iptables -A INPUT --source 192.168.1.1 --jump ACCEPT iptables -A INPUT --jump altra_catena

significa "aggiungi le seguenti regole alla fine della catena INPUT: salta i pacchetti da 192.168.1.1 e invia tutto ciò che resta da inviare all'altra_catena per l'analisi".

Catene

Ci sono 5 tipi di catene standard integrate nel sistema:

    PREROUTING - per l'elaborazione iniziale dei pacchetti in arrivo.

    INPUT - per i pacchetti in entrata indirizzati direttamente al processo locale (client o server).

    FORWARD - per i pacchetti in entrata reindirizzati in uscita (notare che i pacchetti inoltrati passano prima attraverso la catena PREROUTING, quindi FORWARD e POSTROUTING).

    OUTPUT - per i pacchetti generati dai processi locali.

    POSTROUTING - per l'elaborazione finale dei pacchetti in uscita.

Puoi anche creare e distruggere le tue catene usando l'utilità iptables.

tavoli

Le catene sono organizzate in 4 tabelle:

    Raw: visualizzato prima che il pacchetto venga inviato al sistema di rilevamento dello stato. Usato raramente, ad esempio per contrassegnare i pacchetti che NON devono essere elaborati dal sistema statale. Per fare ciò, l'azione NOTRACK è specificata nella regola. Contiene le catene PREROUTING e OUTPUT.

    Mangle - contiene le regole per modificare (solitamente l'intestazione) i pacchetti IP. Tra le altre cose, supporta le azioni TTL (Time to live), TOS (Type of Service) e MARK (per modificare i campi TTL e TOS e per modificare gli indicatori di pacchetto). Raramente necessario e può essere pericoloso. Contiene tutte e cinque le catene standard.

    Nat - Cerca solo i pacchetti che creano una nuova connessione (in base al sistema statale). Supporta azioni DNAT, SNAT, MASQUERADE, REDIRECT. Contiene le catene PREROUTING, OUTPUT e POSTROUTING.

    Filtro: la tabella principale, utilizzata per impostazione predefinita se il nome della tabella non è specificato. Contiene le catene INPUT, FORWARD e OUTPUT.

Le catene con lo stesso nome ma in tabelle diverse sono oggetti completamente indipendenti. Ad esempio, il PREROUTING grezzo e il PREROUTING mangle di solito contengono un diverso insieme di regole; i pacchetti passano prima attraverso la catena PREROUTING grezza, quindi attraverso il PREROUTING mangle.

stati

Nel sistema netfilter, ogni pacchetto che passa attraverso il meccanismo dello stato può avere uno dei quattro possibili stati:

    NUOVO - il pacchetto apre una nuova sessione. Un classico esempio è un pacchetto TCP con il flag SYN.

    STABILITO - Il pacchetto fa parte di una sessione già esistente.

    CORRELATI - Il pacchetto apre una nuova sessione associata a una sessione già aperta. Ad esempio, durante una sessione FTP passiva, il client si connette alla porta 21 del server, il server comunica al client il numero di una seconda porta scelta a caso, dopodiché il client si connette alla seconda porta per trasferire i file. In questo caso, la seconda sessione (trasferimento file sulla seconda porta) è associata ad una sessione già esistente (connessione originale alla porta 21).

    NON VALIDO - tutti gli altri pacchetti.

Schema del passaggio di tavoli e catene

Uno schema semplificato del passaggio di tabelle e catene:

Schema di dettaglio:

Configurazione di base

Di seguito è riportato un esempio di una configurazione iptables statica di base. Quando si salva e si carica tale configurazione, è necessario tenere conto della possibilità di apportare modifiche ad essa da altri servizi, come Fail2ban . Inoltre, quando si utilizza l'indirizzamento IPv6, la configurazione per IPv6 deve essere eseguita indipendentemente da IPv4.

IPv4

sudo iptables-save

Crea uno script con un dump delle regole di iptables:

sudo nano /etc/network/if-up.d/iptables-rules

Copia il seguente codice:

#!/sbin/iptables-restore -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -m conntrack -- ctstate CORRELATO,STABILITO -j ACCETTA -A AVANTI -p icmp -j ACCETTA -A AVANTI -j RIFIUTA --rifiuta-con icmp-host-proibito USCITA #-A -p icmp -j ACCETTA USCITA #-A -o lo - j ACCETTO #-A OUTPUT -j REJECT --reject-with icmp-host-prohibited COMMETTERE

Integriamo con le regole necessarie, tenendo conto di iptables-save.

sudo chmod +x / etc/ network/ if-up.d/ iptables-rules sudo / etc/ network/ if-up.d/ iptables-rules

IPv6

Visualizza la configurazione corrente:

sudo ip6tables-save

Crea uno script con un dump delle regole di ip6tables:

sudo nano /etc/network/if-up.d/ip6tables-rules

Copia il seguente codice:

#!/sbin/ip6tables-restore # La tabella dei filtri e le sue catene* filter:ACCETTA INGRESSO [ 0 :0 ] :ACCETTA IN AVANTI [ 0 :0 ] :ACCETTA USCITA [ 0 :0 ] # Consenti connessioni correlate e stabilite-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # Consenti il ​​traffico del servizio icmp-A INGRESSO -p ipv6-icmp -j ACCEPT # Consenti traffico attendibile sull'interfaccia di loopback-A INGRESSO -i lo -j ACCETTO # Qui puoi inserire regole aggiuntive per la catena INPUT # Disabilita tutto il resto per INPUT-A INPUT -j REJECT --reject-with icmp6-adm-prohibited # L'ordine e il significato delle regole per le catene FORWARD e OUTPUT è simile a INPUT-A AVANTI -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A AVANTI -j REJECT --reject-with icmp6-adm-prohibited # È fortemente sconsigliato filtrare la catena di OUTPUT #-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #-A USCITA -p ipv6-icmp -j ACCEPT#-A USCITA -o lo -j ACCEPT #-A OUTPUT -j REJECT --reject-with icmp6-adm-prohibited COMMETTERE

Integriamo con le regole necessarie, tenendo conto di ip6tables-save.

Salva e chiudi: Ctrl + O , Invio , Ctrl + X

Rendi eseguibile lo script e carica le regole di iptables:

sudo chmod +x / etc/ network/ if-up.d/ ip6tables-rules sudo / etc/ network/ if-up.d/ ip6tables-rules

Regole aggiuntive

Di seguito sono riportate alcune regole di uso relativamente comune. Le catene INPUT/OUTPUT vengono utilizzate per filtrare il traffico locale. Per il traffico in transito, è necessario utilizzare la catena FORWARD.

Accesso remoto

# remote.ssh -A INPUT -p tcp -m conntrack --ctstate NUOVO -m tcp --dport 22 -j ACCEPT # remote.rdp -A INPUT -p tcp -m conntrack --ctstate NUOVO -m tcp --dport 3389 -j ACCEPT # remote.vnc -A INPUT -p tcp -m conntrack --ctstate NUOVO -m tcp --dport 5900 -j ACCEPT

Servizi Web e file

# web.http, web.https -A INPUT -p tcp -m conntrack --ctstate NUOVO -m multiporta -A INPUT -p tcp -m conntrack --ctstate NUOVO -m tcp --dport 21 -j ACCEPT

Posta e messaggi istantanei

# mail.pop3, mail.pop3s -A INPUT -p tcp -m conntrack --ctstate NUOVO -m multiporta --dports 110 ,995 -j ACCEPT # mail.imap, mail.imaps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiporta --dports 143 ,993 -j ACCEPT # mail.smtp, mail.smtps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 25 ,465 -j ACCEPT # im.xmpp -A INPUT -p tcp -m conntrack --ctstate NUOVO -m multiporta --dports 5222 ,5223 -j ACCEPT # im.icq.oscar -A INPUT -p tcp -m conntrack --ctstate NUOVO -m tcp --dport 5190 -j ACCETTO

Servizi di rete

# network.openvpn.vpn -A INPUT -p udp -m conntrack --ctstate NUOVO -m udp --dport 1194 -j ACCEPT # network.squid.proxy -A INPUT -p udp -m conntrack --ctstate NUOVO -m udp --dport 3128 -j ACCEPT # network.dns -A INPUT -p tcp -m conntrack --ctstate NUOVO -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m conntrack --ctstate NUOVO -m udp --dport 53 -j ACCEPT # network.ntp -A INPUT -p udp -m conntrack --ctstate NUOVO -A INPUT -p udp -m conntrack --ctstate NUOVO -m udp --dport 69 -j ACCEPT # richiesta network.dhserver.dhcp.discover-A INPUT -p udp -m conntrack --ctstate NUOVO -m udp --sport 68 --dport 67 -j ACCEPT # network.dhclient.dhcp.discover-richiesta #-A OUTPUT -p udp -m conntrack --ctstate NUOVO -m udp --sport 68 --dport 67 -j ACCEPT # network.dhserver.dhcp.offer-ack #-A OUTPUT -p udp -m conntrack --ctstate NUOVO -m udp --sport 67 --dport 68 -j ACCEPT

Test e debug

Visualizza la configurazione corrente per IPv4 e IPv6:

sudo iptables-save sudo ip6tables-save

Registrazione

tracciare

Moduli del kernel

Visualizza i moduli caricati:

lsmod | grep -E "^ip|^nf" | ordinare

Per caricare moduli aggiuntivi, è conveniente utilizzare il completamento automatico: 2x Tab

sudo modprobe nf sudo modprobe modules-load.d

Ogni computer connesso alla rete è in potenziale pericolo. Ci sono molte minacce sulla rete, che vanno dai programmi che cercheranno di penetrare nel sistema in qualsiasi modo e terminano con gli hacker che vogliono ottenere l'accesso al computer di cui hanno bisogno. E il software installato sul computer potrebbe contenere vulnerabilità ancora sconosciute e senza patch, che possono diventare una falla nella sicurezza.

Se per i computer di casa questo non è molto rilevante, poiché sono collegati alla rete tramite router e NAT, che li nascondono dalla rete esterna, per i server questo è più rilevante che mai. Nel sistema operativo Linux, un firewall iptables molto flessibile e affidabile è integrato nel kernel.

È con l'aiuto di questo programma che il sistema è protetto da intrusioni esterne, port forwarding e anche molte azioni con il traffico. Ma il suo svantaggio è che è un po' difficile da configurare. Questo articolo tratterà la configurazione di iptables per i manichini. Spero che dopo sarai in grado di utilizzare con sicurezza le funzionalità di base di iptables.

I sottosistemi iptables e Netfilter sono stati integrati nel kernel Linux per molto tempo. Tutti i pacchetti di rete che passano attraverso il computer, sono inviati dal computer o sono destinati al computer, il kernel li instrada attraverso il filtro iptables. Lì, questi pacchetti sono soggetti a controlli e quindi per ogni controllo, se superato, viene eseguita l'azione in esso specificata. Ad esempio, il pacchetto viene passato al kernel per essere inviato al programma di destinazione o scartato.

Tipi di pacchetto

Tutti i pacchetti sono divisi in tre tipi: in entrata, in uscita e in transito. In entrata - quelli che sono stati inviati a questo computer, in uscita - inviati da questo computer alla rete. E quelli di passaggio sono pacchetti che devono solo essere inoltrati, ad esempio, se il tuo computer funge da router.

Di conseguenza, nel filtro iptables, tutti i pacchetti sono divisi in tre catene simili:

  • Ingresso- gestisce i pacchetti e le connessioni in entrata. Ad esempio, se un utente esterno sta tentando di connettersi al tuo computer tramite ssh o qualsiasi sito web ti invierà il loro contenuto quando richiesto dal browser. Tutti questi pacchetti finiranno in questa catena;
  • inoltrare- questa catena viene utilizzata per le connessioni di passaggio. Ciò include i pacchetti che vengono inviati al tuo computer, ma non sono destinati a questo, vengono semplicemente inviati sulla rete alla loro destinazione. Come ho detto, questo si osserva sui router o, ad esempio, se il tuo computer distribuisce il wifi;
  • produzione- questa catena viene utilizzata per i pacchetti e le connessioni in uscita. Ciò include i pacchetti che sono stati generati quando si tenta di eseguire il ping di un sito o quando si avvia il browser e si tenta di aprire qualsiasi sito.

Ma se pensi di poter chiudere completamente la catena di input per aumentare la sicurezza, ti sbagli di grosso. Quando la rete è in esecuzione, vengono utilizzate sia le catene di input che quelle di output. Ad esempio, si tenta di eseguire il ping, i dati vengono inviati tramite l'output, ma la risposta arriva tramite l'input. La stessa cosa accade durante la navigazione di siti e altre attività. Ma la catena di inoltro potrebbe non essere utilizzata affatto se il tuo computer non è un router. Quindi la configurazione di iptables deve essere eseguita con molta attenzione.

Regole e azioni

Prima di passare alla creazione di un elenco di regole di iptables, è necessario considerare come funzionano e quali sono. Per ogni tipo di pacchetto, è possibile impostare una serie di regole che verranno verificate a turno per la conformità al pacchetto e, se il pacchetto corrisponde, applicare l'azione specificata nella regola. Le regole formano una catena, quindi input, output e forward sono chiamati catene, catene di regole. Ci possono essere diverse azioni:

  • ACCETTARE- consentire al pacchetto di passare ulteriormente lungo la catena delle regole;
  • FAR CADERE- rimuovere il pacco;
  • RIFIUTARE- rifiutare il pacco, verrà inviato un messaggio al mittente che il pacco è stato rifiutato;
  • TRONCO D'ALBERO- registrare il pacchetto nel file di registro;
  • CODA- inviare un pacchetto a un'applicazione utente.

Le regole possono controllare qualsiasi corrispondenza, ad esempio per ip, per porta del destinatario o del mittente, intestazioni dei pacchetti e molto altro. Se il pacchetto non corrisponde a nessuna delle regole, viene applicata l'azione predefinita, generalmente ACCEPT.

Quando avremo capito le regole, potremo tornare alle catene. Oltre a quelle sopra elencate, ci sono due catene di regole aggiuntive:

  • prerouting- il pacchetto entra in questa catena prima dell'elaborazione di iptables, il sistema non sa ancora dove verrà inviato, input, output o forward;
  • dopo il percorso- tutti i pacchetti di passaggio che hanno già superato la catena di inoltro arrivano qui.

Ma non è tutto. Abbiamo anche tabelle iptables, anch'esse desiderabili da gestire.

ipabili

Sopra le catene di regole in iptables, c'è un altro livello di astrazione, e cioè le tabelle. Nel sistema sono presenti diverse tabelle e tutte dispongono di un set standard di catene di input, forward e output. Le tabelle vengono utilizzate per eseguire varie azioni sui pacchetti, come la modifica o il filtraggio. Ora questo non è così importante per te e ti basterà sapere che il filtraggio dei pacchetti di iptables viene eseguito nella tabella dei filtri. Ma daremo un'occhiata a tutti:

  • crudo- progettati per lavorare con confezioni grezze, mentre non sono state ancora lavorate;
  • mazza- progettato per modificare i pacchetti;
  • nat- fornisce il funzionamento nat se si desidera utilizzare il computer come router;
  • filtro- la tabella principale per il filtraggio dei pacchetti, utilizzata di default.

Con la teoria quasi tutto, ora diamo un'occhiata all'utilità della riga di comando iptables, con la quale viene gestito il sistema iptables.

Utilità Iptables

Il sottosistema iptables e netfilter sono integrati nel kernel, ma un insieme di utilità per gestire tutto questo non è sempre fornito con il sistema. Per installare l'utilità su Ubuntu, digita:

sudo apt install iptables

Sulle distribuzioni basate su Fedora, l'installazione di iptables è leggermente diversa:

sudo yum installa iptables

Quando l'installazione di iptables è completata, puoi procedere alla configurazione, ma diamo prima un'occhiata alla sintassi dell'utilità. Il comando di solito è simile a questo:

-t catena di azioni della tabella Opzioni extra

Ora diamo un'occhiata alle opzioni di iptables, table specifica la tabella con cui lavorare, questa opzione può essere omessa, action - l'azione desiderata, ad esempio, creare o eliminare una regola e le opzioni aggiuntive descrivono l'azione e la regola da eseguire.

Resta da considerare le principali azioni che iptables ti consente di eseguire:

  • -UN- aggiungere una regola alla catena;
  • -DA- controllare tutte le regole;
  • -D- eliminare una regola;
  • -IO- inserire una regola con il numero richiesto;
  • -L- visualizzare tutte le regole della catena corrente;
  • -S- visualizzare tutte le regole;
  • -F- cancellare tutte le regole;
  • -N- creare una catena;
  • -X- togliere la catena;
  • -P- imposta l'azione predefinita.

Opzioni aggiuntive per le regole:

  • -p- specificare il protocollo, uno tra tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
    mh;
  • -S- specificare l'indirizzo ip del dispositivo che invia il pacchetto;
  • -d- specificare l'indirizzo ip del destinatario;
  • -io- interfaccia di rete in ingresso;
  • -o- interfaccia di rete in uscita;
  • -j- seleziona un'azione se la regola corrisponde.

Ora possiamo passare agli esempi di come è configurato iptables.

Esempi di configurazione di Iptables

Vedremo alcuni esempi di base in modo che tu possa consolidare tutto ciò che hai letto sopra.

Elenco delle regole

Per prima cosa, diamo un'occhiata a come viene eseguita la ricerca della regola di iptables, l'opzione -L è sufficiente per questo:

Puoi anche specificare la catena desiderata per visualizzare solo le regole per essa:

iptables -L INGRESSO

Cancellare le regole

Non puoi semplicemente disabilitare iptables interrompendo il servizio di aggiornamento delle regole di iptables tramite systemd o anche rimuovendo il set di utilità di configurazione. Il sottosistema funziona a livello di kernel e non dipende da ciò che hai installato lì. Pertanto, se fai qualcosa di sbagliato, dovrai cancellare le regole. Per fare ciò, esegui:

O solo per una catena specifica:

sudo iptables -F Input

Ti ricordo che tutte queste azioni vengono eseguite per la tabella predefinita - filtro.

Regole predefinite

Come ho detto, se nessuna regola corrisponde a un pacchetto, viene applicata l'azione predefinita. Può essere impostato con l'opzione -p:

sudo iptables -p ACCETTO INGRESSO
$ sudo iptables -p USCITA ACCETTA
$ sudo iptables -p FORWARD DROP

In questo esempio, abilitiamo le catene INPUT e OUTPUT, ma disabilitiamo FORWARD.

Blocco dei pacchetti

Per bloccare i pacchetti, possiamo usare l'azione DROP, possiamo filtrare i pacchetti che dobbiamo bloccare in base a molti criteri, come protocollo, indirizzo IP, maschera di rete, porta e molto altro.

Ecco come apparirà il comando, che ti consente di aggiungere una regola iptables per bloccare tutti i pacchetti in arrivo da 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

E ora i pacchetti in uscita allo stesso indirizzo:

Il blocco dell'intervallo IP viene eseguito in modo simile. Per fare ciò, è necessario utilizzare la netmask 10.10.10.0/24. Questi saranno tutti gli indirizzi a partire dal 10.10.10.0 al 10.10.10.255:

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

O una versione estesa della maschera:

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

Puoi anche bloccare tutte le connessioni ssh in entrata:

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

Come puoi vedere, aggiungere una regola di iptables è molto semplice.

Eliminazione delle regole

L'eliminazione delle regole di iptables viene eseguita allo stesso modo della creazione di nuove regole, ma invece dell'opzione A, è necessario utilizzare l'opzione D. Per prima cosa, guarda l'elenco delle regole:

Ad esempio, ecco come eliminare la regola di iptables che è stata creata per seconda:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Puoi anche cancellare completamente iptables eseguendo il comando con l'opzione -F:

IPTables è un'utilità di gestione del firewall Linux. È uno strumento potente e pratico per connessioni indesiderate. L'intero processo è racchiuso in regole di iptables che possono essere modificate e visualizzate. Maggiori dettagli sono forniti nell'articolo.

Storia della creazione

Prima IPTables su un sistema Linux utilizzava il firewall IPFW, preso in prestito da BSD. Quindi, a partire dal kernel Linux 2.4, è arrivato con il firewall Netfilter e l'utilità IPTables per gestirlo. Nella metodologia del suo lavoro, tutti gli aspetti sono stati preservati e leggermente ampliati funzionalmente.

La struttura e la struttura di IPTables

Quando un pacchetto entra nel firewall, viene sottoposto a diversi controlli. Questo potrebbe essere un checksum o qualsiasi altra analisi a livello di kernel. Quindi è il momento di passare attraverso la catena PREROUTING. Successivamente, viene verificato in base al quale avviene il reindirizzamento alla catena successiva. Se il pacchetto non ha un indirizzo, come ad esempio in TCP, viene indirizzato alla catena FORWARD. Nei casi in cui esiste un indirizzo specifico, segue la catena INPUT, quindi i demoni o servizi a cui è destinato. La loro risposta deve anche passare attraverso diverse catene, ad esempio OUTPUT. L'ultimo anello di questo processo è la catena POSTROUTING.

Ora un po' di catene. Ognuno di essi contiene diverse tabelle. I loro nomi possono essere ripetuti, ma ciò non pregiudica in alcun modo il lavoro, poiché non sono interconnessi.

Le tabelle a loro volta contengono diverse regole. Una regola, infatti, è una determinata condizione che il pacco in controllo deve rispettare. A seconda del risultato, viene eseguita una determinata azione sul pacchetto.

Pertanto, attraversando tutte le fasi della rete, il pacchetto visita in sequenza tutte le catene e in ciascuna viene verificato il rispetto della condizione di una determinata regola. Se la tabella non viene generata dall'utente, viene eseguita l'azione predefinita, in pratica è ACCEPT, che consente di continuare ad andare avanti, o DROP, che interrompe il pacchetto.

Le catene preimpostate rientrano nelle seguenti categorie:

  • PREPERCORSO. Elaborazione iniziale di tutti i pacchetti in arrivo.
  • INGRESSO. Ciò include quei pacchetti che sono diretti direttamente al computer locale.
  • INOLTRARE. Utilizzato per i "pacchetti di transito" che seguono la tabella di routing.
  • PRODUZIONE. Usato per i pacchetti in uscita.
  • POSTERIORE. L'ultima fase nel passaggio del pacchetto in uscita di tutte le catene.

Oltre alle catene integrate, gli utenti possono crearne o eliminarne di proprie.

Visualizzazione e gestione delle regole di IPTables

Come accennato in precedenza, tutte le catene contengono determinate condizioni per i pacchetti. L'utilità IPTables viene utilizzata per visualizzare e gestire le regole IPTables. Ogni singola regola è una riga con una serie di condizioni per i pacchetti, nonché azioni su di essi, a seconda del risultato.

Il formato del comando è simile al seguente: iptables [-t nome della tabella da elaborare] comando da chiamare [criteri] [azione da eseguire].

Tutto ciò che è racchiuso può essere omesso. Se si tratta di un parametro di tabella, verrà utilizzato il filtro. Per utilizzare un nome specifico, è necessario aggiungere l'opzione -t. Il comando chiamato consente di chiamare l'azione necessaria, ad esempio aggiungere una regola IPTables o rimuoverla. I "criteri" specificano i parametri in base ai quali avverrà la selezione. E nell'"azione" viene applicata l'azione da compiere se la condizione è soddisfatta.

Comandi per creare e visualizzare le regole di IPTables

  • Aggiungi(-A). Quando si utilizza il comando, si specifica la catena e la tabella a cui si desidera aggiungere la regola richiesta. Il valore della squadra è che lo fa alla fine di tutta la lista.
  • Elimina (-D). Come suggerisce il nome, elimina la regola. Come parametri è possibile specificare sia il nome completo che i numeri ad essi assegnati.
  • Rinomina-catena (-E). Cambia il nome della catena. Il comando specifica il vecchio nome, quindi il nuovo nome.
  • Sciacquare (-F). Cancellare assolutamente tutte le regole di un determinato tavolo.
  • Inserisci (-I). Questo comando inserisce la regola richiesta nel luogo indicato dal numero.
  • Elenco(-L). Visualizza le regole di Iptables. Se non viene specificata alcuna tabella, verrà utilizzato il filtro predefinito.
  • Politica (-P). Viene utilizzata la politica predefinita per la catena specificata.
  • Sostituire (-R). Cambia la regola sotto il numero specificato in quello richiesto.
  • Elimina catena (-X). Questo comando cancella tutte le catene create. Rimarranno solo quelli preimpostati.
  • Zero (-Z). Reimposta i contatori dei dati trasmessi nella catena specificata.

Un po' sulle opzioni di selezione dei pacchetti

Possono essere grosso modo divisi in tre tipi:

  • Criteri generali. Possono essere specificati per qualsiasi regola. Non richiedono la connessione di estensioni e moduli speciali e inoltre non dipendono dal protocollo che verrà utilizzato.
  • Criteri non generali. Diventano disponibili quando si utilizzano i criteri generali.
  • Esplicito. Per utilizzare questo tipo, è necessario collegare plug-in speciali per netfilter. Inoltre, nel comando deve essere utilizzata l'opzione -m.

Vale la pena parlare un po' dei parametri che si incontrano frequentemente utilizzati nell'analisi dei pacchetti:

  • Protocollo (-p). Indica il protocollo.
  • Fonti). Questo parametro specifica l'indirizzo IP dell'origine da cui proviene il pacchetto. Può essere specificato in diversi modi. Un host, un indirizzo o un'intera sottorete specifici.
  • Destinazione (-d). L'indirizzo di destinazione del pacchetto. Inoltre, come il precedente, può essere descritto in diversi modi.
  • Nell'interfaccia (-i). Specifica l'interfaccia in entrata del pacchetto. Utilizzato principalmente per NAT o su sistemi con più interfacce.
  • Interfaccia esterna (-o). interfaccia in uscita.

Alcuni esempi

Per visualizzare le regole nat di IPTables? devi usare il comando - "iptables -L -t nat". Scopri lo stato generale del firewall - "iptables -L -n -v". Inoltre, questo comando consente di visualizzare le regole IPTables disponibili in tutto il sistema. Inserisci la regola in un punto specifico della tabella, ad esempio, tra la prima e la seconda riga - "iptables -I INPUT 2 -s 202.54.1.2 -j DROP". Quindi controlla se è stato aggiunto - "iptables -L INPUT -n --line-numbers".

Per bloccare un indirizzo specifico, ad esempio, 12.12.12.12 - "iptables -A INPUT -s 12.12.12.12 -j DROP".

Aiuto per iptables - "man iptables". Se hai bisogno di informazioni su un comando specifico - "iptables -j DROP -h".

Infine

Utilizzare i comandi IPTables con cautela, poiché una configurazione errata (inconsapevolmente) può causare errori di rete o il suo completo fallimento. Pertanto, vale la pena studiare in dettaglio i manuali e le istruzioni prima della configurazione. In mani abili, IPTables può essere trasformato in un affidabile protettore delle connessioni di rete. Gli amministratori di sistema utilizzano attivamente l'utilità per creare connessioni isolate da accessi non autorizzati.

In questo articolo, ti guideremo attraverso come configurare iptables su Linux. Imparerai di cosa si tratta e perché è necessario configurare questa funzione. Configurazione di iptables su Linuxè piuttosto semplice.

Configurazione di iptables su Linux: cos'è iptables?

Iptables è un'utilità firewall della riga di comando che utilizza criteri di catena per consentire o bloccare il traffico. Quando una connessione tenta di stabilirsi sul tuo sistema, iptables cerca una regola nel suo elenco che corrisponda a essa. Se non lo trova, ricorre all'azione predefinita.

Iptables viene quasi sempre preinstallato su qualsiasi distribuzione Linux. Per aggiornarlo/installarlo basta scaricare il pacchetto iptables:

sudo apt-get install iptables

Esistono alternative GUI a iptables come Firestarter, ma iptables non è poi così difficile se esegui solo pochi comandi. Fai molta attenzione quando imposti le regole di iptables, specialmente se stai usando SSH'd sul server, perché un comando sbagliato può bloccarti per molto tempo fino a quando non viene eseguito manualmente sulla macchina fisica.

Configurazione di iptables su Linux per i manichini

A proposito, ne abbiamo già parlato prima. Forse questo interesserà anche a te. Il link può essere trovato sopra.

Configurare iptables su Linux, come abbiamo detto sopra, è abbastanza semplice. Ma prima di iniziare la configurazione, è necessario familiarizzare con i concetti generali dell'opzione.

Tipi di circuito

Iptables utilizza tre diverse catene: input, forwarding 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 nella tua macchina/server, iptables proverà a confrontare l'indirizzo IP e la porta con la regola nella catena di input.

inoltrare- Questa catena viene utilizzata per le connessioni in entrata che non vengono effettivamente consegnate localmente. Pensa al router: i dati gli vengono sempre inviati, ma raramente sono effettivamente destinati al router stesso; I dati vengono semplicemente reindirizzati alla pagina di destinazione. A meno che tu non stia eseguendo una sorta di routing, NAT o qualsiasi altra cosa sul tuo sistema che richiede l'inoltro, non utilizzerai nemmeno questa catena.

Esiste un modo affidabile per verificare se il sistema utilizza o necessita di una catena diretta.

Questa schermata proviene da un server in esecuzione da diverse settimane e non ha limiti alle 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. D'altra parte, la catena di inoltro non ha bisogno di elaborare un singolo pacchetto. Ciò è dovuto al fatto che il server non esegue alcun inoltro o non viene utilizzato come dispositivo pass-through.

Output - Questa catena viene utilizzata per le connessioni in uscita. Ad esempio, se si tenta di eseguire il ping di un sito linuxinsider, iptables controllerà la sua catena di output per vedere quali regole si applicano a ping e linuxinsider prima di prendere una decisione per consentire o negare il tentativo di connessione.

Avvertimento

Anche se il controllo dell'host esterno sembra qualcosa che dovrebbe solo essere attraversato sulla catena di output, tieni presente che la catena di input verrà utilizzata anche per restituire i dati. Quando utilizzi iptables per bloccare il tuo sistema, ricorda che molti protocolli richiedono una comunicazione bidirezionale, quindi sia le catene di input che di output devono essere configurate correttamente. SSH è un protocollo comune che le persone dimenticano di consentire su entrambe le catene.

Comportamento predefinito della politica

Prima di iniziare a configurare regole specifiche, devi decidere quale sia il comportamento predefinito di queste tre catene. In altre parole, cosa vuoi che iptables faccia se la connessione non corrisponde a nessuna regola esistente?

Per vedere quali catene di politiche sono configurate per gestire il traffico burst, eseguire il comando iptables -L.

Come puoi vedere, abbiamo anche usato il comando grep per ottenere un risultato più pulito. In questo screenshot, le nostre catene sono attualmente dimensionate per ricevere traffico.

Il più delle volte, vuoi che il tuo sistema accetti le connessioni per impostazione predefinita. Se non hai modificato in precedenza le regole della catena di criteri, questa impostazione dovrebbe essere già configurata. In ogni caso ecco il comando per accettare le connessioni di default:

iptables --policy ACCETTO INGRESSO
iptables --policy OUTPUT ACCEPT
iptables --policy AVANTI ACCETTA

Per impostazione predefinita in una regola di accettazione, puoi utilizzare iptables per rifiutare determinati indirizzi IP o numeri di porta continuando ad accettare tutte le altre connessioni. Arriveremo a quei comandi tra un minuto.

Se preferisci rifiutare tutte le connessioni e specificare manualmente quali vuoi consentire le connessioni, devi modificare la politica predefinita dei tuoi circuiti per rifiutare. Questo sarà probabilmente utile solo per i server che contengono informazioni sensibili e si collegheranno sempre e solo agli stessi indirizzi IP.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Risposte di connessione

Con i criteri di catena predefiniti impostati, puoi procedere con l'aggiunta di regole a iptables per sapere cosa fare quando incontra una connessione con un indirizzo IP o una porta specifici. In questa guida, esamineremo tre delle "risposte" più comuni e utilizzate di frequente.

accettare— consentire la connessione.

Far cadere Abbandona la connessione, comportati come se non fosse mai successo. Questo è il migliore se non vuoi che la fonte sappia che il tuo sistema esiste.

Rifiutare- negare la connessione, ma inviare un messaggio di errore. Questo è il migliore se non vuoi che una particolare fonte si connetta al tuo sistema, ma vuoi che sappiano che il tuo firewall li stava bloccando.

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.

Permesso di connessione:

Rimozione di una connessione:

Rifiuto della connessione:

Una maschera di rete o una caratteristica per specificare un intervallo di indirizzi IP.

Configurazione di iptables su Linux: metodi di connessione

Se parliamo di "Configurazione di iptables su Linux", allora dobbiamo parlare dei metodi di connessione.

Consenti o blocca connessioni specifiche
Con i criteri configurati, puoi configurare iptables per consentire o bloccare indirizzi, intervalli di indirizzi e porte specifici. In questi esempi, imposteremo connessioni a DROP, ma puoi passarle ad ACCEPT o REJECT, a seconda delle tue esigenze e di come imposti le catene di policy.

Nota. In questi esempi, useremo iptables -A per aggiungere regole a una catena esistente. Iptables inizia in cima all'elenco ed esamina ogni regola fino a trovarne una che corrisponda. Se devi inserire una regola sopra un'altra, puoi usare iptables -I per specificare il numero che dovrebbe essere nell'elenco.

Connessioni dallo stesso 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 barra standard per specificare un intervallo di indirizzi IP.

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

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 a 10.10.10.10.

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

Puoi sostituire "ssh" con qualsiasi protocollo o numero di porta. La parte -p tcp del codice dice a iptables quale connessione sta usando il protocollo. Se hai bloccato un protocollo che utilizza UDP anziché TCP, sarà invece richiesto -p udp.

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 una comunicazione bidirezionale. Ad esempio, se desideri consentire le connessioni SSH al tuo sistema, le catene di ingresso e di uscita dovranno aggiungere una regola. Ma cosa succede se si desidera che SSH entri nel sistema? L'aggiunta della regola alla catena in uscita non comporterà anche tentativi SSH in uscita?

È qui che entrano in gioco gli stati di connessione, che ti danno la possibilità di consentire la comunicazione bidirezionale, ma consentono solo di stabilire connessioni unidirezionali. Dai un'occhiata a questo esempio, in cui sono consentite le connessioni SSH DA 10.10.10.10, ma non le connessioni SSH A 10.10.10.10. Tuttavia, il sistema può inviare informazioni su SSH mentre la sessione è già stabilita, il che rende possibile la comunicazione SSH tra i due host.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NUOVO,STABILITO -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 ripristinate al successivo riavvio del servizio iptables, a meno che non venga emesso un comando per salvare le modifiche. Questo comando può variare a seconda della tua distribuzione:

sudo /sbin/iptables-save

Red Hat/CentOS:

/sbin/servizio iptables salva

/etc/init.d/iptables salva

Altri comandi

Elenco delle regole di iptables attualmente configurate:

L'aggiunta dell'opzione -v ti darà informazioni su pacchetti e byte e l'aggiunta di -n conterrà tutti i valori numerici. 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.

Traduzione da un'eccellente risorsa inglese HowToGeek.

Se hai ancora domande sull'argomento "Configurazione di iptables su Linux per manichini", puoi scriverle nel modulo di commento sul nostro sito Web.

Se trovi un errore, evidenzia un pezzo di testo e fai clic Ctrl+Invio.

Articoli correlati in alto