411 Stimmen

Wie kann ich bestimmte Regeln aus iptables entfernen?

Ich hoste spezielle HTTP- und HTTPS-Dienste auf den Ports 8006 bzw. 8007. Ich verwende iptables, um den Server zu "aktivieren", d.h. 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 funktioniert wie ein Zauber. Ich möchte jedoch ein weiteres Skript erstellen, das meinen Server wieder deaktiviert, d. h. iptables in den Zustand zurückversetzt, in dem es sich vor dem Ausführen der obigen Zeilen befand. Es fällt mir jedoch schwer, die Syntax zum Entfernen dieser Regeln herauszufinden. Das einzige, was zu funktionieren scheint, ist ein kompletter Flush:

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

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

7voto

Lakshmikandan Punkte 3865

Wenn Sie NAT-Regeln entfernen möchten, gehen Sie davon aus, dass,

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 Befehl aus,

# sudo iptables -F -t nat -v

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

Dann können Sie das nachprüfen,

# sudo iptables -L -t nat -v

4voto

Sie können auch die folgende Syntax verwenden

 iptables -D <chain name> <rule number>

Zum Beispiel

Chain HTTPS 
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    ACCEPT     all  --  10.0.0.0/8           anywhere
    ACCEPT     all  --  182.162.0.0/16       anywhere

So löschen Sie die Regel

ACCEPT all -- 10.0.0.0/8 überall

iptables -D HTTPS 2

1voto

Stephen Ostermiller Punkte 20753

Hier ist ein Einzeiler, der die iptables Regeln, die einer Suche entsprechen. In diesem Beispiel wird nach allen Regeln gesucht, die mit der IP-Adresse 192.168.1.27 und entfernt sie alle. Sie würden Ihre eigenen Suchkriterien anstelle dieser IP-Adresse eingeben.

eval `iptables --list-rules | grep '192.168.1.27' | sed 's/^-A /iptables -D /g;s/$/;/g'`

Wie es funktioniert:

Sie verwendet die akzeptierte Antwort auf diese Frage und führt Regeln mit -D statt -A .

  • iptables --list-rules listet alle vorhandenen Regeln auf. Auch wenn Sie sie mit -I o -R Diese Liste zeigt sie alle mit -A
  • | grep '192.168.1.27' filtert die Liste auf die Regeln, die Sie entfernen möchten (in diesem Fall die Regeln für eine bestimmte IP-Adresse).
  • | sed führt eine Suche und Ersetzung durch
    • s/^-A /iptables -D /g ersetzt die -A am Anfang einer jeden Regel mit iptables -D so dass er zu einem ausführbaren Befehl wird, um die Regel zu entfernen.
    • s/$/;/g ersetzt das Ende jeder Regel durch ein Semikolon, um mehrere Befehle zu trennen, wenn sie ausgeführt werden
  • eval ... nimmt die gesamte Ausgabe und führt sie als Skript aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X