Debug di iptables e comuni insidie ​​del firewall?


18

Questa è una domanda canonica proposta sulla comprensione e il debug del firewall software su sistemi Linux.

In risposta alla risposta dell'EEAA e al commento di @ Shog, abbiamo bisogno di domande e risposte canoniche adeguate per chiudere domande relativamente semplici su iptables.

Qual è un metodo strutturato per eseguire il debug dei problemi con il firewall del software Linux, il framework di filtraggio dei pacchetti netfilter , comunemente indicato dall'interfaccia utente iptables ?

Quali sono le insidie ​​comuni, le domande ricorrenti e le cose semplici o leggermente più oscure per verificare che un amministratore occasionale del firewall possa trascurare o trarre vantaggio dalla conoscenza?

Anche quando usi strumenti come UFW , FirewallD (aka firewall-cmd), Shorewall o simili, potresti trarre vantaggio dal guardare sotto il cofano senza il livello di astrazione offerto da questi strumenti.

Questa domanda non è intesa come How-To per la creazione di firewall: controlla la documentazione del prodotto per questo e, ad esempio, contribuisci con le ricette su Trip & Tricks di iptables o cerca le domande taggate per punteggi esistenti frequenti e ben valutati Q & A.


1
Che dire delle regole NAT e stateful che possono essere inserite in precedenza nella catena per migliorare le prestazioni e aumentare la sicurezza?
Matt,

1
@Matt: l'ottimizzazione delle regole del firewall è una domanda e risposta completa in sé e in questa domanda e risposta non espanderò una risposta precedente che ho dato qui
HBruijn

1
Se non raggiungi la regola che dovresti utilizzare in IPtables, aggiungi una regola LOG simile e prosegui lungo la catena fino a quando non ricevi i messaggi LOG. Quindi, una delle regole sottostanti sarà la regola che non corrisponde correttamente al pacchetto.
Matthew Ife,

1
Oh e l'impostazione net.netfilter.nf_conntrack_log_invalidsu 255 acquisirà i pacchetti non validi abbastanza bene, il che può aiutare se è la parte stateful di netfilter che sta producendo il cattivo comportamento.
Matthew Ife,

Risposte:


14

In generale:

La visualizzazione e la modifica della configurazione del firewall richiede i privilegi di amministratore ( root) così come l'apertura dei servizi nell'intervallo di numeri di porta limitati. Ciò significa che è necessario accedere come rooto in alternativa utilizzare sudoper eseguire il comando come root. Proverò a contrassegnare tali comandi con il facoltativo [sudo].

Contenuti:

  1. L'ordine è importante o la differenza tra -Ie-A
  2. Visualizza la configurazione corrente del firewall
  3. Interpretazione dell'uscita di iptables -L -v -n
  4. Conosci il tuo ambiente
  5. Le catene INPUT e FORWARD
  6. Moduli del kernel

1. L'ordine è importante o la differenza tra -Ie-A

La cosa da ricordare è che le regole del firewall sono controllate nell'ordine in cui sono elencate. Il kernel interromperà l'elaborazione della catena quando viene attivata una regola che consentirà o non consentirà un pacchetto o una connessione.

Penso che l'errore più comune per gli amministratori di firewall principianti sia che seguono le istruzioni corrette per aprire una nuova porta, come quella qui sotto:

[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

e poi scopri che non avrà effetto.

Il motivo è che l' -Aopzione aggiunge quella nuova regola, dopo tutte le regole esistenti e poiché molto spesso la regola finale nel firewall esistente era quella che blocca tutto il traffico che non è esplicitamente consentito, con conseguente

...
7    2515K  327M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
8        0  0    ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080

O equivalente in iptables-save:

...
iptables -A INPUT  -j REJECT
iptables -A INPUT  -p tcp --dport 8080 -j ACCEPT

e la nuova regola che apre la porta TCP 8080 non sarà mai raggiunta. (come evidenziato dai contatori che rimangono ostinatamente a 0 pacchetti e zero byte).

Inserendo la regola con -Ila nuova regola sarebbe stata la prima della catena e funzionerà.

2. Visualizza la configurazione corrente del firewall

La mia raccomandazione per l'amministratore del firewall è di esaminare la configurazione effettiva che il kernel Linux sta eseguendo, piuttosto che cercare di diagnosticare i problemi del firewall con strumenti intuitivi. Spesso, una volta comprese le problematiche sottostanti, è possibile risolverle facilmente in una questione supportata da tali strumenti.

Il comando [sudo] iptables -L -v -nè tuo amico (anche se ad alcune persone piace di iptables-savepiù). Spesso quando si discute di configurazioni è utile usare anche l' --line-numbersopzione per numerare le righe. Fare riferimento alla regola #X rende un po 'più facile discuterne.
Nota: le regole NAT sono incluse iptables-savenell'output ma devono essere elencate separatamente aggiungendo l' -t natopzione cioè [sudo] iptables -L -v -n -t nat --line-numbers.

Eseguire il comando più volte e verificare la presenza di contatori incrementali può essere uno strumento utile per vedere se una nuova regola viene effettivamente attivata.

[root@host ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     784K   65M fail2ban-SSH  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
2    2789K  866M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3       15  1384 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4    44295 2346K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    40120 2370K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
6    16409  688K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
7    2515K  327M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain fail2ban-SSH (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       117.239.37.150       0.0.0.0/0           reject-with icmp-port-unreachable
2        4   412 REJECT     all  --  *      *       117.253.208.237      0.0.0.0/0           reject-with icmp-port-unreachable

In alternativa, l'output di iptables-savefornisce uno script in grado di rigenerare la configurazione del firewall sopra:

[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT

È una questione di preferenza ciò che troverai più facile da capire.

3. Interpretazione dell'uscita di iptables -L -v -n

La politica imposta l'azione di default gli usi della catena quando non ci sono esplicite regole di fiammiferi. Nella INPUTcatena impostata su ACCETTA tutto il traffico.

La prima regola nella catena INPUT è immediatamente interessante, invia tutto il traffico (sorgente 0.0.0.0/0 e destinazione 0.0.0.0/0) destinato alla porta TCP 22 ( tcp dpt:22) la porta predefinita per SSH a una destinazione personalizzata ( fail2ban-SSH) . Come indica il nome, questa regola è gestita da fail2ban (un prodotto di sicurezza che, tra le altre cose, esegue la scansione dei file di registro di sistema per possibili abusi e blocca l'indirizzo IP dell'utente malintenzionato).

Tale regola sarebbe stata creata da una riga di comando di iptables simile iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSHo si trova nell'output di iptables-save as -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH. Spesso troverai una di queste notazioni nella documentazione.

I contatori indicano che questa regola ha abbinato 784'000 pacchetti e 65 Megabyte di dati.

Il traffico corrispondente a questa prima regola viene quindi elaborato dalla fail2ban-SSHcatena che, come catena non standard, viene elencata sotto la catena OUTPUT.

Quella catena è composta da due regole, una per ciascun abusatore (indirizzo IP sorgente 117.253.221.166 o 58.218.211.166) che è bloccato (con a reject-with icm-port-unreachable).

 -A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
 -A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable

I pacchetti SSH che non provengono da quegli host bloccati non sono ancora né consentiti né non consentiti e ora il completamento della catena personalizzata verrà verificato rispetto alla seconda regola nella catena INPUT.

Tutti i pacchetti che non erano destinati alla porta 22 hanno superato la prima regola nella catena INPUT e saranno anche valutati nella regola INPUT n. 2.

La regola INPUT numero 2 rende questo inteso come un firewall statefull , che tiene traccia delle connessioni. Ciò presenta alcuni vantaggi, solo i pacchetti per le nuove connessioni devono essere verificati rispetto al set di regole completo, ma una volta consentiti i pacchetti aggiuntivi appartenenti a una connessione stabilita o correlata vengono accettati senza ulteriore controllo.

La regola di input n. 2 corrisponde a tutte le connessioni aperte e correlate e i pacchetti corrispondenti a tale regola non dovranno essere ulteriormente valutati.

Nota: le modifiche alle regole nella configurazione di un firewall con stato influiranno solo sulle nuove connessioni, non su quelle stabilite.

Al contrario, un semplice filtro di pacchetti verifica ogni pacchetto rispetto al set di regole completo, senza tenere traccia dello stato della connessione. In quali un firewall non statali parole chiave sarebbero stati utilizzati.

La regola INPUT n. 3 è abbastanza noiosa, loè consentito tutto il traffico connesso all'interfaccia loopback ( o 127.0.0.1).

Le regole INPUT 4, 5 e 6 vengono utilizzate per aprire le porte TCP 22, 80 e 443 (le porte predefinite per risp. SSH, HTTP e HTTPS) concedendo l'accesso a NUOVE connessioni (le connessioni esistenti sono già consentite dalla regola INPUT 2).

In un firewall senza stato tali regole apparirebbero senza gli attributi di stato:

4    44295 2346K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
5    40120 2370K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
6    16409  688K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0

o

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

La regola INPUT finale, # 7 è una regola che blocca tutto il traffico a cui NON è stato concesso l'accesso nelle regole INPUT 1-7. Una convenzione abbastanza comune: tutto ciò che non è permesso è negato. In teoria questa regola avrebbe potuto essere omessa impostando la POLICY di default su REJECT.

Indaga sempre su tutta la catena.

4. Conosci il tuo ambiente

4.1 Le impostazioni in un firewall software non influiranno sulle impostazioni di sicurezza mantenute altrove nella rete, vale a dire nonostante l'apertura di un servizio di rete con iptablesgli elenchi di controllo degli accessi non modificati su router o altri firewall nella tua rete possa ancora bloccare il traffico ...

4.2 Quando nessun servizio è in ascolto, non sarà possibile connettersi e ricevere un errore di connessione rifiutata , indipendentemente dalle impostazioni del firewall. Perciò:

  • Conferma che un servizio è in ascolto (sull'interfaccia / indirizzo IP di rete corretti) e utilizza i numeri di porta previsti [sudo] netstat -plnuto in alternativa utilizza ss -tnlp.
  • Se i tuoi servizi non devono ancora essere in esecuzione, emula un semplice listener con ad esempio netcat: [sudo] nc -l -p 123o openssl s_server -accept 1234 [options] se hai bisogno di un listener TLS / SSL (controlla le man s_serveropzioni).
  • Verificare che sia possibile connettersi dal server stesso, ovvero telnet <IP of Server> 123o echo "Hello" | nc <IP of Server> 123o durante il test del servizio protetto TLS / SSL openssl s_client -connect <IP of Server>:1234, prima di provare lo stesso da un host remoto.

4.3 Comprendi i protocolli utilizzati dai tuoi servizi. Non è possibile abilitare / disabilitare correttamente i servizi che non si comprendono a sufficienza. Per esempio:

  • viene utilizzato TCP o UDP o entrambi (come con DNS)?
  • il servizio utilizza una porta predefinita fissa (ad esempio qualcosa come la porta TCP 80 per un server web)?
  • in alternativa viene scelto un numero di porta dinamico che può variare (ad es. servizi RPC come NFS classico che si registra con Portmap)?
  • famigerato FTP utilizza anche due porte , sia un numero di porta fisso che uno dinamico quando configurato per utilizzare la modalità passiva ...
  • le descrizioni dei servizi, delle porte e dei protocolli in /etc/servicesnon corrispondono necessariamente al servizio effettivo che utilizza una porta.

4.4 Il filtro pacchetti del kernel non è l'unica cosa che può limitare la connettività di rete:

  • SELinux potrebbe anche limitare i servizi di rete. getenforceconfermerà se SELinux è in esecuzione.
  • Anche se diventano leggermente oscuri i wrapper TCP sono ancora uno strumento potente per rafforzare la sicurezza della rete. Verificare con ldd /path/to/service |grep libwrape i /hosts.[allow|deny]file di controllo.

5. INPUTo FORWARDCatene

Il concetto di catene è spiegato più a fondo qui, ma il corto è:

La INPUTcatena è il punto in cui si aprono e / o si chiudono le porte di rete per i servizi eseguiti localmente, sull'host in cui si emettono i comandi iptables.

La FORWARDcatena è dove si applicano le regole per filtrare il traffico che viene inoltrato dal kernel ad altri sistemi, sistemi reali ma anche container Docker e server Virtual guest Server quando la macchina Linux agisce come bridge, router, hypervisor e / o indirizzo di rete traduzione e port forwarding.

Un malinteso comune è che poiché un contenitore docker o un guest KVM viene eseguito localmente, le regole di filtro che si applicano dovrebbero essere nella catena INPUT, ma di solito non è così.

6. Moduli del kernel

Poiché il filtro pacchetti viene eseguito all'interno del kernel Linux, può anche essere compilato come modulo dinamico, in realtà più moduli. La maggior parte delle distribuzioni include netfilter come moduli e i moduli netfilter richiesti verranno caricati nel kernel secondo necessità, ma per alcuni moduli un amministratore del firewall dovrà assicurarsi che vengano caricati manualmente. Ciò riguarda principalmente i moduli di tracciamento delle connessioni, come quelli nf_conntrack_ftpche possono essere caricati insmod.

I moduli attualmente caricati nel kernel in esecuzione possono essere visualizzati con lsmod.

Il metodo per garantire che i moduli vengano caricati in modo persistente tra i riavvii dipende dalla distribuzione Linux.


1
Quando si cercano contatori di pacchetti / byte di incremento. Uno strumento utile è utilizzare l'orologio, in modalità diversa. Quindi, qualcosa di simile a questo: watch --difference -n 1 iptables -L FORWARD -v -n. Consentire allo strumento di eseguire periodicamente il comando ed evidenziare le modifiche rende molto più semplice.
Zoredache,

1
Ho appena visto il tuo commento lento. Questa è una buona risposta, non sono sicuro di poter aggiungere molto. Potresti voler includere una menzione dell'uso della funzione TRACE .
Zoredache,

Prenderò l' iptables-saveoutput (preferibilmente con -c) ogni volta su questo iptables -Loutput temuto (con vari argomenti).
0xC0000022L

7

Problemi comuni con protocolli diversi

DNS: DNS utilizza la porta 53 UDP per impostazione predefinita, ma i messaggi che non rientrano in un singolo datagramma UDP verranno trasmessi utilizzando TCP invece (in genere trasferimenti di zona e simili) che richiedono l'apertura della porta 53 TCP anche quando si esegue un server dei nomi .

E-mail: molti ISP di consumo bloccano il traffico SMTP (o almeno la porta predefinita TCP 25), rendendo impossibile ricevere o inviare direttamente e-mail e i loro clienti sono costretti a utilizzare l'inoltro SMTP dell'ISP per tutta la posta in uscita e talvolta anche per la posta in arrivo . Si riferisce al §1.1.

FTP: FTP è uno strano protocollo per quanto riguarda l' utilizzo di due connessioni. La prima è la connessione di controllo, per impostazione predefinita un server FTP ascolterà sulla porta TCP 21 per questo. La connessione di controllo viene utilizzata per l'autenticazione e l'emissione di comandi. I trasferimenti di file effettivi e cose come l'output di un elenco di directory passano attraverso una seconda connessione TCP, la connessione DATA. Nell'FTP attivo tale connessione DATA verrebbe avviata dal server FTP dalla porta 20 TCP e connettersi al client FTP. L'FTP attivo non funziona troppo bene con gli utenti dietro firewall e gateway NAT, quindi è in gran parte caduto in disuso. La maggior parte dei server FTP supporta invece FTP passivo. Con FTP passivo il server FTP apre un listener per la connessione DATA su una seconda porta, alla quale il client FTP può quindi connettersi. Il problema per un firewall è che la porta DATA può essere qualsiasi porta non privilegiata disponibile tra 1024-65536.

In un firewall senza stato che viene in genere risolto limitando il numero di porte passive che il server FTP può assegnare e quindi aprendo esplicitamente tali porte. vale a dire

iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT

In un firewall con stato non è necessario aprire esplicitamente la porta DATA, il modulo helper netfilter riconoscerà la porta dinamica che viene assegnata e aprirà dinamicamente quella porta per il client corretto contrassegnando la connessione DATA come RELATEDdopo che corrisponderà alla regola generica :

  iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT

Ciò richiede che venga caricato il modulo kernel corretto , nel caso FTP manualmente eseguendolo ad esempio insmod nf_conntrack_ftp, facendo in modo che il persistente dipenda dal riavvio dipende dalla distribuzione.

Nota: il modulo di tracciamento della connessione FTP non riuscirà quando si utilizza FTP con SSL, poiché la connessione di controllo verrà crittografata e nf_conntrack_ftp non sarà più in grado di leggere la risposta PASV.

NFS e servizi RPC simili : il problema con i servizi RPC è che in base alla progettazione non utilizzano una porta fissa specifica. Possono scegliere qualsiasi porta disponibile a caso, che sarà quindi registrata con il demone Portmap RPC. Un client che tenta di connettersi eseguirà una query sul demone Portmap e quindi si connetterà direttamente alla porta corretta. Ciò ha risolto il problema di rimanere senza porte riservate ...

Dal punto di vista del firewall, è necessario aprire la porta TCP / UDP 111 e l'attuale porta utilizzata dal servizio RPC. Il problema di aprire una porta così casuale in un firewall è in genere risolto limitando il servizio RPC, come il server NFS, per utilizzare una porta fissa predefinita.


7

Iptables / Firewall "introduzione"

Un firewall è fondamentalmente un filtro di rete basato su criteri. I firewall Linux sono costruiti attorno a Netfilter; il framework di elaborazione dei pacchetti di rete del kernel composto da diversi moduli del kernel che svolgono compiti specifici:

  1. Il modulo FILTER (sempre caricato di default) ci consente principalmente di ACCETTARE o DROP i pacchetti IP in base a determinati criteri di corrispondenza.
  2. Il set di moduli NAT ci consente di eseguire traduzioni di indirizzi di rete (SNAT, DNAT, MASQUERADE).
  3. Il modulo MANGLE ci consente di modificare determinati campi di pacchetti IP (TOS, TTL).

Gli utenti configurano il framework Netfilter per soddisfare le proprie esigenze di firewall utilizzando iptables dalla riga di comando. Con iptables definiamo regole che indicano al kernel cosa fare con i pacchetti IP quando arrivano, passano o escono dalla nostra scatola Linux. Ogni processo principale di Netfilter è rappresentato da una TABELLA (FILTRO, NAT, MANGLE) sul linguaggio iptables. Hanno diversi punti di aggancio specifici sulla mappa di flusso dei pacchetti di rete in cui vengono invocati dal kernel per svolgere i propri compiti. Alcune sequenze di TABELLA posizionate in modo specifico vengono generalmente chiamate CATENE incorporate che ricevono i nomi di PREROUTING, INPUT, FORWARD, OUTPUT e POSTROUTING. È facile ricordare se associamo una TABELLA a un "tipo di processo" e una CATENA con la "posizione" sulla mappa del flusso di pacchetti di rete in cui vengono invocate le istanze di tali processi.

inserisci qui la descrizione dell'immagine

Poiché un pacchetto IP viene ricevuto su un'interfaccia di rete o creato da un processo locale, fino a quando non viene infine consegnato o scartato, il motore Netfilter testerà in sequenza e applicherà le regole contenute lungo la mappa del flusso di pacchetti di rete. Ad ogni blocco identificato da una coppia TABLE @ CHAIN ​​l'utente può aggiungere una o più di queste regole consecutive contenenti un criterio di corrispondenza dei pacchetti IP e un corrispondente corso di azione. Esistono azioni (es. ACCETTA, DROP, ecc.) Che possono essere eseguite da più di una TABELLA e altre azioni (es. SNAT, DNAT, ecc.) Che sono specifiche della TABELLA.

cioè quando un pacchetto IP arriva da un'interfaccia di rete, viene prima elaborato dalla catena PREROUTING che richiama le regole definite dall'utente della tabella MANGLE. Se non ci sono regole che corrispondono al pacchetto corrente, si applica il corso d'azione predefinito "MANGLE @ PREROUTING" o "criterio". A questo punto, se il pacchetto non è stato eliminato, il processo continuerà ora invocando le regole della tabella NAT nella catena PREROUTING (vedere la mappa) e così via. Per facilitare il layout delle regole, gli utenti possono anche creare le proprie catene personalizzate e "saltare" in esse da diversi punti della mappa come desiderano.

inserisci qui la descrizione dell'immagine

Mentre le catene integrate possono avere politiche definite dall'utente di pacchetti ACCEPT o DROP, le catene definite dall'utente hanno sempre una politica predefinita invariabile di INVIO al chiamante per continuare il processo.

Comandi iptabili

I comandi principali di iptables popolano la mappa di flusso dei pacchetti di rete con le regole di elaborazione richieste.

La regola generica di iptables può essere scritta come:

# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>

Potrebbe essere letto come:

Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed

<table>
  -t filter       (the filter table is assumed when omitted)
  -t nat
  -t mangle 

<Add/Insert/Delete>
  -A              (append rule at the end of the chain list)
  -I              (insert rule at the begining of the chain list)
  -D              (Delete rule)

<CHAIN>
  PREROUTING
  INPUT
  FORWARD
  OUTPUT
  POSTROUTING
  USER_DEFINED_CHAIN

<PKT_MATCHING_CRITERIA>
ISO Level-2 matching:
  -i [!] <if_name>    or --in-interface [!] <if_name>
          (OUTPUT and POSTROUTING chains cannot match on input  interfaces)
  -o [!] <if_name>    or --out-interface [!] <if_name>
          (INPUT  and PREROUTING  chains cannot match on output interfaces) 
    -mac-source [!] <xx-xx-xx-xx-xx-xx>
            (OUTPUT and POSTROUTING chains cannot match on input  interfaces)

ISO Level-3 matching:
  -s [!] <src_ip>     or --src [!] <src_ip>   or --source [!] <src_ip>
  -d [!] <dst_ip>     or --src [!] <dst_ip>   or --destination [!] <dst_ip>

ISO Level-4 matching:
  -p [!] <prot_name>    or --protocol [!] <prot_name>  (udp|tcp|icmp)

  Also available when ICMP protocol is defined
  --icmp-type [!] <icmp_type>

  Also available when UDP protocol is defined
  --source-port [!] <udp_src_port>      or --sport [!] <udp_src_port>
  --destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port>

  Also available when TCP protocol is defined
  --source-port [!] <tcp_src_port>      or --sport [!] <tcp_src_port>
  --destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port>
  --tcp-flags [!] <tcp_flags>   (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE)
    --syn
  --tcp-option [!] <tcp_option#>

  --state [!] <state>
  -m <match> [options]

    note: [!] = negation operator

<ACTION>                (also called TARGET)
  -j ACCEPT             (process continues with rules of the next table in map)
  -j DROP               (discard current packet)
  -j REJECT             (discard current packet with ICMP notification)
      option:
      --reject-with <reject_type>
  -j USER_DEFINED_CHAIN   (start traversing USER_DEFINED_CHAIN rules)
  -j RETURN               (return from USER_DEFINED_CHAIN)
  -j LOG                  (log to syslog, then process next rule in table)
      options:
      --log-level <level>
      --log-prefix <prefix>
      --log-tcp-sequence
      --log-tcp-options
      --log-ip-options
      --log-uid

nat table specific
  -j SNAT             (rewrite the source IP address of the packet)
      option:
      --to <ip_address>
  -j SAME             (idem SNAT; used when more than one source address)
      options:
      --nodst 
      --to <a1-a2>
  -j MASQUERADE       (idem SNAT; used when the replace IP is dynamic)
  -j DNAT             (rewrite the destination IP address of the packet)
      option:
      --to <ip_address>
  -j REDIRECT         (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only)
      option:
      –-to-port <port#>

mangle table specific
  -j ROUTE            (explicitly route packets, valid at PREROUTING)
      options:
      --iface <iface_name>
      --ifindex <iface_idx>
  -j MARK             (set Netfilter mark values)
      options:
      --set-mark <value>
      --and-mark <value>
      --or-mark <value> 
  -j TOS              (set the IP header Type of Service field) 
      option:
      --set-tos <value>
  -j DSCP             (set the IP header Differentiated Services Field)
      options:
      --set-dscp <value>
      --set-dscp-class <class>
  -j TTL              (set the IP header Time To Live field)
      options:
      --ttl-set <value>
      --ttl-dec <value>
      --ttl-inc <value>

I comandi ausiliari di iptables completano lo scenario impostando condizioni predefinite, regole di elenco, regole di scarico, ecc.

#iptables -t <table> -L             
       (Lists the <table> rules in all chains)
#iptables -t <table> -L <CHAIN>     
       (Lists the <table> rules in <CHAIN>)

#iptables -t <table> -N <CHAIN>     
       (Creates a user-defined <CHAIN> for holding <table> rules)
#iptables -t <table> -E <CHAIN> <NEWCHAIN>  
       (Renames <CHAIN> that holds <table> rules to <NEWCHAIN>)

#iptables -t <table> -X   
       (Deletes all user-defined chains created for holding <table> rules)
#iptables -t <table> -X <CHAIN>
       (Deletes user-defined <CHAIN> created for holding <table> rules)

#iptables -t <table> -P <CHAIN> <ACTION>     where <ACTION> = ACCEPT|DROP
       (Sets the default policy of <table> rules at <CHAIN> to <ACTION>)

#iptables -t <table> -F             
       (Flushes (deletes) all <table> rules in all chains)
#iptables -t <table> -F <CHAIN>
       (Flushes (deletes) all <table> rules in <CHAIN>)

#iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE>
       (Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE>

Iptables carica i nostri comandi nel motore Netfilter in fase di esecuzione, Netfilter applica immediatamente le regole e le impostazioni caricate ma non sono persistenti. Dopo il riavvio, tutte le regole e le impostazioni di Netfilter precedentemente caricate andranno perse. Per questo motivo ci sono utility iptables che consentono di salvare il set di regole attualmente attivo in un file e ricaricarlo in un secondo momento.

#iptables-save > fileName
      (Save the currently active Netfilter ruleset to fileName)

#iptables-restore < fileName
      (Restore Netfilter ruleset to the one saved in fileName)

Sommario di Iptables

Netfilter è un framework estremamente flessibile e potente ma c'è un prezzo da pagare per questo; Iptables è complesso. Dal punto di vista dell'utente alcuni termini come TABELLA, CATENA, OBIETTIVO non corrispondono molto bene al concetto che rappresentano e all'inizio non hanno molto senso. L'argomento è lungo, i comandi sembrano avere un elenco infinito di parametri. A peggiorare le cose non c'è un solo libro che padroneggia davvero Iptables. Si dividono principalmente in due categorie: "ricettario" o "manuale". Penso che questa introduzione ti dia un'istantanea del panorama Netfilter / Iptables più la dose necessaria di materiale manpage pre-digerito. Se sei nuovo su iptables, dopo aver letto questi paragrafi un paio di volte sarai pronto a leggere esempi di iptables. Con un po 'di pratica ti troverai presto a scrivere le tue regole.

firewall

Un firewall è principalmente progettato per consentire o negare dinamicamente il traffico di rete in base a una serie di regole. A questo punto è facile capire perché il framework Linux Netfilter / Iptables è perfetto per la costruzione di firewall. Guardando la mappa del flusso di pacchetti di rete troviamo due punti particolarmente interessanti sulla tabella FILTER nelle catene INPUT e FORWARD; Possiamo decidere qui su indirizzo IP di origine, protocollo IP (UDP / TCP), porta di destinazione (80, 21, 443, ecc.), Ecc., Se ACCETTIAMO, REJECT o semplicemente GOCCIAMO un particolare pacchetto IP. Questo è ciò che fa un firewall l'80% delle volte quando, ad esempio, protegge un server Web da richieste di rete non autorizzate. L'altro 20% delle volte manipola i pacchetti di rete (NAT, MANGLE).

Scenari di firewall

Esistono centinaia di layout di firewall diversi che soddisfano esigenze diverse, ma 3 di questi potrebbero essere considerati gli scenari di firewall più tipici.

  1. Web server semplice con una o più interfacce connesse a Internet. La politica include regole di base per consentire l'accesso in entrata limitato, l'accesso in uscita senza restrizioni e le regole anti-spoofing. L'inoltro IP è disattivato.
  2. Questo firewall si connette a Internet e ad un'area interna protetta. La politica include regole di base per consentire l'accesso in entrata limitato, l'accesso in uscita senza restrizioni e le regole anti-spoofing. Poiché l'area protetta utilizza indirizzi IP privati, è necessario il NAT di origine. L'inoltro IP è attivo.
  3. Questo firewall si collega a Internet, area protetta interna e smilitarizzata. La politica include regole di base per consentire l'accesso in entrata limitato, l'accesso in uscita senza restrizioni e le regole anti-spoofing. Poiché le aree DMZ e protette utilizzano indirizzi IP privati, hanno bisogno del NAT di origine e di destinazione. L'inoltro IP è attivo. inserisci qui la descrizione dell'immagine

Ho scritto questo per: http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.