it-swarm.com.de

Wie kann ich bestimmte Regeln aus iptables entfernen?

Ich hoste spezielle HTTP- und HTTPS-Dienste auf den Ports 8006 bzw. 8007. Ich benutze iptables, um den Server zu "aktivieren". um die eingehenden HTTP- und HTTPS-Ports weiterzuleiten:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006 
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007  
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007 

Das wirkt wie ein Zauber. Ich möchte jedoch ein anderes Skript erstellen, das meinen Server wieder deaktiviert. d.h. iptables auf den Zustand zurücksetzen, in dem es sich befand, bevor die obigen Zeilen ausgeführt wurden. Es fällt mir jedoch schwer, die Syntax zum Entfernen dieser Regeln zu finden. Das einzige, was zu funktionieren scheint, ist eine vollständige Spülung:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Damit werden aber auch andere iptables-Regeln gelöscht, was unerwünscht ist.

299
Jeroen

Führen Sie dieselben Befehle aus, ersetzen Sie jedoch "-A" durch "-D". Zum Beispiel:

iptables -A ...

wird

iptables -D ...
427
Eli Rosencruft

Sie können auch die Nummer der Regel verwenden (- Zeilennummern):

iptables -L INPUT --line-numbers

Beispielausgabe:

Chain INPUT (policy ACCEPT) 
    num  target prot opt source destination
    1    ACCEPT     udp  --  anywhere  anywhere             udp dpt:domain 
    2    ACCEPT     tcp  --  anywhere  anywhere             tcp dpt:domain 
    3    ACCEPT     udp  --  anywhere  anywhere             udp dpt:bootps 
    4    ACCEPT     tcp  --  anywhere  anywhere             tcp dpt:bootps

Wenn Sie also die zweite Regel löschen möchten:

iptables -D INPUT 2

Aktualisieren

Wenn Sie (d) eine bestimmte Tabelle verwenden (zB nat), müssen Sie diese dem Löschbefehl hinzufügen (danke an @ThorSummoner für den Kommentar)

Sudo iptables -t nat -D PREROUTING 1
410
domi27

Die beste Lösung, die bei mir problemlos funktioniert, sieht so aus:
1. Fügen Sie eine temporäre Regel mit einem Kommentar hinzu:

comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION

2. Wenn die Regel hinzugefügt wurde und Sie sie entfernen möchten (oder alles mit diesem Kommentar), gehen Sie wie folgt vor:

iptables-save | grep -v "${comment}" | iptables-restore

Sie löschen also zu 100% alle Regeln, die mit dem $ -Kommentar übereinstimmen, und lassen andere Zeilen unberührt. Diese Lösung funktioniert seit 2 Monaten mit ca. 100 Änderungen der Regeln pro Tag - keine Probleme. Hoffentlich hilft es

29
ETech

Listen Sie zuerst alle iptables-Regeln mit diesem Befehl auf:

iptables -S

es listet auf wie:

-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Kopieren Sie dann die gewünschte Zeile und ersetzen Sie -A durch -D, um dies zu löschen:

iptables -D XYZ -p ...
4
Wladdy Lopez

Verwenden Sie den Befehl -D. So erklärt es die Seite man:

-D, --delete chain rule-specification
-D, --delete chain rulenum
    Delete  one  or more rules from the selected chain.  
    There are two versions of this command: 
    the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.

Verstehe Dieser Befehl funktioniert wie jeder andere Befehl (-A, -I) auf bestimmten Tabellen. Wenn Sie nicht an der Standardtabelle (filter Tabelle) arbeiten, geben Sie diese Zieltabelle mit -t TABLENAME an.

Löschen Sie eine übereinstimmende Regel

iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Hinweis: Dadurch wird nur die erste übereinstimmende Regel gelöscht. Wenn Sie viele übereinstimmende Regeln haben (dies kann in iptables vorkommen), führen Sie diese mehrmals aus.

Löschen Sie eine als Nummer angegebene Regel

iptables -D INPUT 2

Neben dem Zählen der Nummer können Sie die Zeilennummer mit dem Parameter --line-number auflisten, zum Beispiel:

iptables -t nat -nL --line-number
3
cizixs

Angenommen, Sie möchten NAT Regeln entfernen,

Listen Sie die angehängten IP-Tabellen mit dem folgenden Befehl auf:

# Sudo iptables -L -t nat -v

Chain PREROUTING (policy ACCEPT 18 packets, 1382 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    7   420 DNAT       tcp  --  any    any     anywhere             saltmaster           tcp dpt:http to:172.31.5.207:80
    0     0 DNAT       tcp  --  eth0   any     anywhere             anywhere             tcp dpt:http to:172.31.5.207:8080

Wenn Sie die nat-Regel aus den IP-Tabellen entfernen möchten, führen Sie einfach den folgenden Befehl aus:

# Sudo iptables -F -t nat -v

Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'

Dann können Sie überprüfen, dass

# Sudo iptables -L -t nat -v
1
lakshmikandan