ver una todas reiniciar reglas puerto permitir las configurar comandos borrar abrir linux firewall iptables

linux - una - ¿Cómo puedo eliminar reglas específicas de iptables?



reiniciar iptables (6)

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

iptables -A ...

se convierte en

iptables -D ...

Estoy hospedando servicios especiales HTTP y HTTPS en los puertos 8006 y 8007 respectivamente. Yo uso 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 como un encanto. Sin embargo, me gustaría crear otro script que deshabilite mi servidor nuevamente; es decir, restaurar iptables al estado en que se encontraba antes de ejecutar las líneas anteriores. Sin embargo, me resulta difícil descubrir la sintaxis para eliminar estas reglas. Lo único que parece funcionar es una descarga completa:

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.


La mejor solución que funciona para mí sin ningún problema se ve así:
1. Agregue la 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 agregue la regla y desee eliminarla (o todo lo que tenga este comentario), haga:

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

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


Primero liste 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 reemplace -A con -D para eliminar eso:

iptables -D XYZ -p ...


Supongamos que, si desea eliminar las reglas de NAT,

Enumere las IPtables agregadas usando el siguiente comando,

# 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

Si desea eliminar la regla nat de IPtables, simplemente ejecute el comando,

# sudo iptables -F -t nat -v Flushing chain `PREROUTING'' Flushing chain `INPUT'' Flushing chain `OUTPUT'' Flushing chain `POSTROUTING''

Entonces, puedes verificar que,

# sudo iptables -L -t nat -v


También puede usar el número de la regla ( --línea-números ):

iptables -L INPUT --line-numbers

Ejemplo de salida:

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

Así que 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 para el comentario)

sudo iptables -t nat -D PREROUTING 1


Use el comando -D , así es como lo explica la página de 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.

Tenga en cuenta que este comando, como todos los demás comandos ( -A , -I ), funciona en cierta tabla. Si no está trabajando en la tabla predeterminada (tabla de filter ), use -t TABLENAME para 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 coincidentes (esto puede suceder en iptables), ejecute esto varias veces.

Eliminar una regla especificada como un número

iptables -D INPUT 2

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

iptables -t nat -nL --line-number