Löschen Sie eine iptables-Kette mit allen Regeln

31

Ich habe eine Kette mit vielen Regeln wie:

> :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

wenn ich versuche diese Kette zu löschen mit:

iptables -X XXXX

habe aber fehler wie (probiert iptables -F XXXXX vorher):

iptables: Zu viele Links.

Gibt es eine einfache Möglichkeit, die Kette mit einem Befehl zu löschen?

zeitgemäß
quelle
2
Ich habe iptables barf so noch nie gesehen, als ich versuchte zu spülen.
Tom O'Connor
Nur neugierig ... wie viele Regeln sind "viele"?
Ladadadada
1
2 many is many :) Wenn ich versuche, die Regeln zuerst zu löschen, tippe ich sie oft ein: iptables -D OUTPUT -d XXX / 32 -j i_XXXXX_i
timy
3
Versuchen Sie dies:iptables-save | grep -v i_XXXXX_i | iptables-restore
Steven Montag
@StevenMonday warum nicht als Antwort schreiben, dies ist die nützlichste (alternativ dazu über Datei und Datei bearbeiten). Das einzige, was nicht entfernt wird, sind vollständige Tabellen ("raw")
nhed

Antworten:

38

Sie können keine Ketten löschen, wenn Regeln mit '-j CHAINTODELETE' auf sie verweisen. Finden Sie heraus, was auf Ihre Kette (das Glied) verweist, und entfernen Sie das. Auch spülen und dann töten.

-F, --flush [kette]

Die ausgewählte Kette spülen (alle Ketten in der Tabelle, falls keine angegeben sind). Dies entspricht dem Löschen aller Regeln nacheinander.

-X, --Löschen-Kette [Kette]

Löschen Sie die angegebene optionale benutzerdefinierte Kette. Es dürfen keine Verweise auf die Kette vorhanden sein. In diesem Fall müssen Sie die verweisenden Regeln löschen oder ersetzen, bevor die Kette gelöscht werden kann. Die Kette muss leer sein, dh keine Regeln enthalten. Wenn kein Argument angegeben wird, wird versucht, jede nicht eingebaute Kette in der Tabelle zu löschen.

Jeff Ferland
quelle
Ich möchte nur einen Weg finden, um die Kette zu löschen (hat viele '-j CHAINTODELETE' Ref-Regeln), aber Ihrer Antwort nach scheint es unmöglich :(
pünktlich
1
Mit dem Kommentar von @timy StevenMonday werden in einem Durchgang alle Verweise auf die Kette entfernt. Vielleicht nicht ideal, aber verdammt nahe.
Jeff Ferland
12

Dies ist möglicherweise nicht thematisch, aber genau das habe ich getan, nachdem ich diesen Beitrag gefunden habe! In einigen Anwendungsfällen kann die Option iptables -D hilfreich sein. Da Sie damit Referenzregeln löschen können, die programmgesteuert mit -A hinzugefügt wurden (wenn Sie genau wissen, wie Sie sie hinzugefügt haben).

Z.B

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

kann mit rückgängig gemacht werden

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN
Att Righ
quelle
8

Sie benötigen zwei Schritte, dies geschieht jedoch in einem Befehl.

Erstellen Sie eine Datei und platzieren Sie diese darin.

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

Speichern Sie die Datei unter dem Namen "Alle Regeln löschen". Führen Sie nun diesen Befehl aus:

iptables-restore < clear-all-rules

Jetzt können Sie es jederzeit mit nur einem Befehl löschen.

Avery Payne
quelle
1
+1 Dies ist eigentlich der schnellste Weg, um mit einer sauberen fw-Konfiguration zu beginnen.
dr01
6

Hier ist ein alternativer Plan. Es beinhaltet drei Befehle, nicht einen, aber mit etwas Glück sollte es funktionieren.

iptablesSpeichern Sie Ihren Regelsatz in einer Datei:

iptables-save > /tmp/iptables.txt

Entfernen Sie ALLE Verwendungen (und Verweise auf) der beleidigenden Kette:

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

Laden Sie dann den Regelsatz neu:

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt
Steven Montag
quelle
0

Etwas in diese Richtung führt dazu, dass alle in einer einzigen Zeile angezeigt werden, ohne dass die Iptables in irgendeiner Weise heruntergefahren werden.

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

In der Man-Datei von iptables gibt es eine Option -S

S, --list-rules [chain] Druckt alle Regeln in der ausgewählten Kette. Wenn keine Kette ausgewählt ist, werden alle Ketten wie iptables-save gedruckt. Wie jeder andere iptables-Befehl gilt er für die angegebene Tabelle (standardmäßig ist filter eingestellt).

Mit iptables -S | grep <CHAINNAMEHERE>. Zum Beispiel:

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

-N TRAFFICLOG

-A FORWARD -i eth0 -j VERKEHRSLOG

Sie können dann sehen, welche Regeln das Löschen der Kette aus der Tabelle blockieren. Gehen Sie alle Regeln durch (mit Ausnahme von iptables -N <CHAINNAMEHERE>und löschen Sie die Regel mit der -DOption

-D, --delete chain rulenum Löscht eine oder mehrere Regeln aus der ausgewählten Kette. Es gibt zwei Versionen dieses Befehls: Die Regel kann als Zahl in der Kette (beginnend mit 1 für die erste Regel) oder als übereinstimmende Regel angegeben werden.

Zum Beispiel iptables -D FORWARD -i eth0 -j TRAFFICLOG. Nachdem Sie jede Regel für Ihre Kette bündig mit der die Kette gelöscht haben -FOption iptables -F <CHAINNAMEHERE>.

-F, --flush [chain] Spült die ausgewählte Kette (alle Ketten in der Tabelle, falls keine angegeben sind). Dies entspricht dem Löschen aller Regeln nacheinander.

Dann löschen Sie Ihre Kette mit der -XOption,iptables -X <CHAINNAMEHERE>

-X, --delete-chain [chain] Löscht die angegebene optionale benutzerdefinierte Kette. Es dürfen keine Verweise auf die Kette vorhanden sein. In diesem Fall müssen Sie die verweisenden Regeln löschen oder ersetzen, bevor die Kette gelöscht werden kann. Die Kette muss leer sein, dh keine Regeln enthalten. Wenn kein Argument angegeben wird, wird versucht, jede nicht eingebaute Kette in der Tabelle zu löschen.

Iptables ist ein komplizierter Werkzeugsatz, daher ist ein ideales Tutorial erforderlich. Sie können es unter www.iptables.info ausprobieren

Jacob Bryan
quelle
0

Dadurch werden Ketten ausgespuckt und gelöscht

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

Ich habe festgestellt, dass Sie die Regeln und die Kette entfernen können, indem Sie die Regeldatei in /etc/iptables/rules.v4 bearbeiten. Wenn Sie die unerwünschte Kette in dieser Datei löschen und dann iptables erneut laden, sollte die Kette bei der Ausführung von iptables -L nicht mehr angezeigt werden.

Jay Phillips
quelle
Diese Datei ist nur auf bestimmten Linux-Distributionen und dann nur auf bestimmten Versionen bestimmter Linux-Distributionen vorhanden.
Michael Hampton