¿Cómo puedo eliminar reglas específicas de iptables? [cerrado]

Resuelto Jeroen Ooms asked hace 12 años • 8 respuestas

Estoy alojando servicios HTTP y HTTPS especiales en los puertos 8006 y 8007 respectivamente. Utilizo iptables para "activar" el servidor; es decir, para enrutar los puertos HTTP y HTTPS entrantes:

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 

Esto funciona de maravilla. Sin embargo, me gustaría crear otro script que deshabilite mi servidor nuevamente; es decir, restaurar iptables al estado en el que se encontraba antes de ejecutar las líneas anteriores. Sin embargo, me cuesta entender la sintaxis para eliminar estas reglas. Lo único que parece funcionar es un lavado completo:

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

Pero eso también eliminará otras reglas de iptables que no son deseadas.

Jeroen Ooms avatar Apr 18 '12 02:04 Jeroen Ooms
Aceptado

Ejecute los mismos comandos pero reemplace "-A" con "-D". Por ejemplo:

iptables -A ...

se convierte

iptables -D ...
Eli Rosencruft avatar Apr 17 '2012 19:04 Eli Rosencruft

También puedes usar el número de la regla ( --line-numbers ):

iptables -L INPUT --line-numbers

Salida de ejemplo:

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

Entonces, si desea eliminar la segunda regla:

iptables -D INPUT 2

Actualizar

Si usa (d) una tabla específica (por ejemplo, nat), debe agregarla al comando de eliminación (gracias a @ThorSummoner por el comentario)

sudo iptables -t nat -D PREROUTING 1
domi27 avatar Jan 25 '2013 11:01 domi27

La mejor solución que me funciona sin ningún problema es la siguiente:
1. Agregue una regla temporal con algún comentario:

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

2. Cuando se agregó la regla y desea eliminarla (o todo lo que tenga este comentario), haga lo siguiente:

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

Por lo tanto, eliminará al 100 % todas las reglas que coincidan con el comentario $ y dejará las demás líneas intactas. Esta solución funciona durante los últimos 2 meses con aproximadamente 100 cambios de reglas por día, sin problemas. Espero que ayude

ETech avatar Nov 01 '2013 20:11 ETech

Primero enumere todas las reglas de iptables con este comando:

iptables -S

enumera como:

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

Luego copie la línea deseada y simplemente reemplácela -Acon -Dpara eliminarla:

iptables -D XYZ -p ...
Wladdy Lopez avatar Aug 21 '2015 21:08 Wladdy Lopez

Utilice -Del comando, así manlo explica la página:

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

Tenga en cuenta que este comando, como todos los demás comandos ( -A, -I) funciona en determinada tabla. Si no está trabajando en la tabla predeterminada ( filtertabla), utilícela -t TABLENAMEpara especificar esa tabla de destino.

Eliminar una regla para que coincida

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

Nota: Esto solo elimina la primera regla coincidente. Si tiene muchas reglas que coinciden (esto puede suceder en iptables), ejecútelo varias veces.

Eliminar una regla especificada como un número

iptables -D INPUT 2

Además de contar el número, puede enumerar el número de línea con --line-numberel parámetro, por ejemplo:

iptables -t nat -nL --line-number
cizixs avatar Apr 07 '2017 09:04 cizixs