Frage Löschen Sie eine iptables-Kette mit allen Regeln


Ich habe eine Kette mit vielen Regeln angehängt 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

hab aber fehler wie (vorher iptables -F XXXXX ausprobiert):

iptables: Zu viele Links.

Gibt es eine einfache Möglichkeit, die Kette durch einmal Befehl zu löschen?


27
2018-04-02 17:15


Ursprung


Ich habe Iptables nicht schon früher beim Spülen gesehen. - Tom O'Connor
Nur neugierig... Wie viele Regeln sind "viele"? - Ladadadada
2 viele sind viele :) Wenn ich versuche, die Regeln zuerst zu löschen, wird es gerne viele Male tippen: iptables -D OUTPUT -d XXX / 32 -j i_XXXXX_i - timy
Versuche dies: iptables-save | grep -v i_XXXXX_i | iptables-restore - Steven Monday
@StevenMonday warum nicht als Antwort schreiben, dies ist die nützlichste (Alternative tun dies über Datei und Datei bearbeiten). Einzige Sache, die es nicht entfernt, ist komplette Tabellen ("roh" sowieso) - nhed


Antworten:


Sie können Ketten nicht löschen, wenn Regeln mit '-j CHAINTODELETE' auf sie verweisen. Finde heraus, was deine Kette (die Verbindung) referenziert, und entferne das. Auch, flush und dann töten.

-F, --flush [Kette]

Flush die ausgewählte Kette (alle Ketten in der Tabelle, wenn keine angegeben ist). Dies entspricht dem Löschen aller Regeln nacheinander.

-X, --Löschungskette [Kette]

Löschen Sie die angegebene optionale benutzerdefinierte Kette. Es darf keine Hinweise auf die Kette geben.  Wenn es dich gibt muss löschen oder ersetzen   verweisende Regeln  bevor die Kette gelöscht werden kann. Die Kette muss leer sein, d. H. Keine Regeln enthalten. Wenn kein Argument gegeben wird, wird es   Versuchen Sie, jede nicht eingebaute Kette in der Tabelle zu löschen.


33
2018-04-02 17:33



Ich möchte nur einen Weg finden, die Kette zu löschen (hat viele '-j CHAINTODELETE' ref Regeln) direkt, aber aus Ihrer Antwort scheint es unmöglich :( - timy
@timy StevenMonday's Kommentar entfernt alle Referenzen auf die Kette. Vielleicht nicht ideal, aber verdammt nah dran. - Jeff Ferland


Das ist möglicherweise außer Thema, aber es ist, was ich getan habe, nachdem ich diesen Beitrag gefunden habe! Für einige Anwendungsfälle könnte die Option iptables -D nützlich sein. Da es Ihnen ermöglicht, verweisende Regeln zu entfernen, die programmatisch 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 umgekehrt werden

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

10
2017-12-29 20:47





Du brauchst zwei Schritte, aber das macht es ein Befehl.

Erstellen Sie eine Datei und legen Sie diese in sie ein.

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

Speichern Sie die Datei als "Clear-All-Rules". Nun, tu diesen Befehl:

iptables-restore < clear-all-rules

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


6
2017-10-02 18:07



+1 Dies ist der schnellste Weg, um mit einer sauberen fw-Konfiguration zu beginnen. - dr01


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

Dump dein iptables Regelsatz in eine Datei:

iptables-save > /tmp/iptables.txt

Entfernen Sie ALLE Verwendungen von (und Verweisen auf) die beleidigende 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

4
2018-04-02 17:50





Etwas in dieser Richtung wird sie alle in einer einzigen Zeile enthalten, ohne iptables in irgendeiner Weise herunterzunehmen.

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

0
2017-10-02 17:56





In der iptables man-Datei gibt es eine Option -S

S, - Listenregeln [Kette]                 Drucken Sie alle Regeln in der ausgewählten Kette. Wenn keine Kette ausgewählt ist, werden alle Ketten wie iptables-save gedruckt. Wie alle anderen Iptables                 Befehl, gilt es für die angegebene Tabelle (Filter ist der Standardwert).

Durch die Nutzung iptables -S | grep <CHAINNAMEHERE>. Zum Beispiel:

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

-N VERKEHRSLOG

-A VORWÄRTS -i eth0 -j TRAFFICLOG

Sie können dann sehen, welche Regeln das Löschen der Kette aus der Tabelle blockieren. Gehe durch jede Regel (außer der iptables -N <CHAINNAMEHERE> und lösche die Regel mit dem -D Möglichkeit

-D, - lösche Kettenrulenum                 Löschen Sie eine oder mehrere Regeln aus der ausgewählten Kette. Es gibt zwei Versionen dieses Befehls: Die Regel kann als Zahl im Feld angegeben werden                 Kette (beginnend bei 1 für die erste Regel) oder eine Regel zu entsprechen.

Zum Beispiel iptables -D FORWARD -i eth0 -j TRAFFICLOG. Nachdem Sie jede Regel für Ihre Kette gelöscht haben, spülen Sie die Kette mit der -FMöglichkeit, iptables -F <CHAINNAMEHERE>.

-F, --flush [Kette]                 Flush die ausgewählte Kette (alle Ketten in der Tabelle, wenn keine angegeben ist). Dies entspricht dem Löschen aller Regeln nacheinander.

Löschen Sie dann Ihre Kette mit dem -XMöglichkeit, iptables -X <CHAINNAMEHERE>

-X, --Löschungskette [Kette]                 Löschen Sie die angegebene optionale benutzerdefinierte Kette. Es darf keine Hinweise auf die Kette geben. Wenn dies der Fall ist, müssen Sie löschen oder ersetzen                 die Verweisregeln vor der Kette können gelöscht werden. Die Kette muss leer sein, d. H. Keine Regeln enthalten. Wenn kein Argument gegeben wird, es                 wird versuchen, jede nicht eingebaute Kette in der Tabelle zu löschen.

Iptables ist ein kompliziertes Toolset, daher ist ein ideales Tutorial erforderlich. Sie können es bei sich ausprobieren www.iptables.info


0
2017-12-17 20:37





Dies spuckt Ketten aus und löscht sie

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

0
2017-09-07 08:13





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 iptables neu laden, sollten Sie die Kette beim Ausführen eines iptables -L nicht mehr sehen.


0
2018-05-04 13:02



Diese Datei existiert nur auf bestimmten Linux-Distributionen und dann nur auf bestimmten Versionen bestimmter Linux-Distributionen. - Michael Hampton♦