Elimina una catena iptables con tutte le sue regole


31

Ho una catena aggiunta con molte regole come:

> :i_XXXXX_i - [0:0]
> -A INPUT -s 282.202.203.83/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.62.253/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.60.62/32 -j i_XXXXX_i 
> -A INPUT -s 224.93.27.235/32 -j i_XXXXX_i 
> -A OUTPUT -d 282.202.203.83/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.62.253/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.60.62/32 -j i_XXXXX_i 
> -A OUTPUT -d 224.93.27.235/32 -j i_XXXXX_i

quando provo ad eliminare questa catena con:

iptables -X XXXX

ma ho avuto un errore del tipo (provato iptables -F XXXXX prima):

iptables: troppi collegamenti.

C'è un modo semplice per eliminare la catena con il comando once?


2
Non ho mai visto iptables in quel modo prima di provare a scaricare.
Tom O'Connor,

Solo curioso ... quante regole sono "molte"?
Ladadadada,

1
2 many is many :) se provo a cancellare prima le regole, mi piacerebbe digitare più volte: iptables -D OUTPUT -d XXX / 32 -j i_XXXXX_i
tempestivo

3
Prova questo:iptables-save | grep -v i_XXXXX_i | iptables-restore
Steven lunedì

@StevenMonday perché non scrivere come risposta, questa è la più utile (in alternativa farlo tramite file e file di modifica). L'unica cosa che non rimuove sono le tabelle complete (comunque "raw")
nhed

Risposte:


38

Non è possibile eliminare le catene quando le regole con '-j CHAINTODELETE' fanno riferimento a esse. Scopri cosa fa riferimento alla tua catena (il link) e rimuovila. Inoltre, flush quindi uccidere.

-F, --flush [catena]

Svuota la catena selezionata (tutte le catene nella tabella se non ne viene fornita nessuna). Ciò equivale a eliminare tutte le regole una per una.

-X, --delete-chain [catena]

Elimina la catena opzionale definita dall'utente specificata. Non ci devono essere riferimenti alla catena. In tal caso, è necessario eliminare o sostituire le regole di riferimento prima di poter eliminare la catena. La catena deve essere vuota, ovvero non contenere alcuna regola. Se non viene fornito alcun argomento, tenterà di eliminare ogni catena non incorporata nella tabella.


Voglio solo trovare un modo per eliminare la catena (ha molte regole di riferimento '-j CHAINTODELETE') direttamente, ma dalla tua risposta sembra impossibile :(
tempestivo

1
Il commento di @timy StevenMonday rimuoverà i riferimenti alla catena in un solo passaggio. Forse non ideale, ma dannatamente vicino.
Jeff Ferland,

12

Questo è potenzialmente fuori tema, ma è quello che ho fatto dopo aver trovato questo post! Per alcuni casi d'uso l'opzione iptables -D potrebbe essere utile. Dal momento che ti permette di cancellare le regole di riferimento aggiunte a livello di codice con -A (se sai esattamente come le hai aggiunte).

Per esempio

    iptables -N MYCHAIN
    iptables -A INPUT -i interface -j MYCHAIN
    iptables -A MYCHAIN -j ACCEPT

può essere invertito con

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN

8

Hai bisogno di due passaggi, ma lo fa in un solo comando.

Crea un file e inseriscilo.

# Empty the entire filter table
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

Salvare il file come "cancella tutte le regole". Ora, esegui questo comando:

iptables-restore < clear-all-rules

Ora puoi cancellarlo in qualsiasi momento con un solo comando.


1
+1 Questo è in realtà il modo più veloce per iniziare con una configurazione di fw pulita.
dr01,

6

Ecco un piano alternativo. Implica tre comandi, non uno, ma per fortuna dovrebbe funzionare.

Scarica il tuo iptablesset di regole in un file:

iptables-save > /tmp/iptables.txt

Rimuovere TUTTI gli usi (e riferimenti a) della catena offensiva:

sed -i '/i_XXXXX_i/d' /tmp/iptables.txt

Quindi ricaricare il set di regole:

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt

0

Qualcosa del genere li metterà tutti in una sola riga senza smontare iptable in alcun modo.

for chain in `iptables -L |grep i_XXXXX_i|awk '{ print $2 }'`; do iptables -X $chain; done

0

Nel file man di iptables c'è un'opzione -S

S, --list-rules [catena] Stampa tutte le regole nella catena selezionata. Se non viene selezionata alcuna catena, tutte le catene vengono stampate come iptables-save. Come ogni altro comando iptables, si applica alla tabella specificata (il filtro è l'impostazione predefinita).

Usando iptables -S | grep <CHAINNAMEHERE>. Per esempio:

root @ root: ~ # iptables -S | grep TRAFFICLOG

-N TRAFFICLOG

-A AVANTI -i eth0 -j TRAFFICLOG

puoi quindi vedere quali regole stanno bloccando la cancellazione della catena dalla tabella. Passare attraverso ogni regola (tranne il iptables -N <CHAINNAMEHERE>ed eliminare la regola utilizzando l' -Dopzione

-D, --delete chain rulenum Elimina una o più regole dalla catena selezionata. Esistono due versioni di questo comando: la regola può essere specificata come numero nella catena (a partire da 1 per la prima regola) o come regola da abbinare.

Per esempio iptables -D FORWARD -i eth0 -j TRAFFICLOG. Dopo aver eliminato ogni regola per il colore della catena la catena con l' -Fopzione iptables -F <CHAINNAMEHERE>.

-F, --flush [catena] Svuota la catena selezionata (tutte le catene nella tabella se non ne viene fornita nessuna). Ciò equivale a eliminare tutte le regole una per una.

Quindi eliminare la catena con l' -Xopzione,iptables -X <CHAINNAMEHERE>

-X, --delete-chain [catena] Elimina la catena definita dall'utente opzionale specificata. Non ci devono essere riferimenti alla catena. In tal caso, è necessario eliminare o sostituire le regole di riferimento prima di poter eliminare la catena. La catena deve essere vuota, ovvero non contenere alcuna regola. Se non viene fornito alcun argomento, tenterà di eliminare ogni catena non incorporata nella tabella.

Iptables è un set di strumenti complicato, quindi è necessario un tutorial ideale. Puoi provarne uno su www.iptables.info


0

Questo sputerà le catene e le cancellerà

for i in $(iptables -S | awk '{print $2}' | uniq ); do iptables -F $i && iptables -Z $i && iptables -X $i  ; done

0

Ho scoperto che puoi rimuovere le regole e la catena modificando il file delle regole in /etc/iptables/rules.v4. Se elimini la catena indesiderata in questo file e poi ricarichi iptables, non dovresti più vedere la catena quando esegui un iptables -L.


Questo file esiste solo su determinate distribuzioni Linux e quindi solo su determinate versioni di determinate distribuzioni Linux.
Michael Hampton
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.