Estoy alojando 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 vuelva a deshabilitar mi servidor; es decir, restaurar iptables al estado en que estaba antes de ejecutar las líneas anteriores. Sin embargo, estoy teniendo dificultades para 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.
-I
lugar de-A
paraACCEPT
líneas. Esto se debe a que, por lo general, la última línea (porINPUT
ejemplo, la cadena) es unaDROP
oREJECT
y desea que su regla aparezca antes.-A
coloca la nueva regla después de la última regla, mientras que la-I
coloca al comienzo.Respuestas:
Ejecute los mismos comandos pero reemplace "-A" con "-D". Por ejemplo:
se convierte
fuente
-I
o-R
, aún puede eliminarla con-D
.También puede usar el número de la regla ( --line-numbers ):
Salida de ejemplo:
Entonces, si desea eliminar la segunda regla:
Actualizar
Si usa (d) una tabla específica (por ejemplo, nat), debe agregarla al comando de eliminación (gracias a @ThorSummoner para el comentario)
fuente
iptables -L INPUT --line-numbers | grep -oP "([0-9]{1,3}).*tcp.*domain" | cut -d" " -f1
-t nat
, por ejemplo:sudo iptables -t nat --line-numbers -L
y eliminarlas-t nat
también, por ejemplo:sudo iptables -t nat -D PREROUTING 1
(¿Puede valer la pena agregar a la respuesta?)La mejor solución que funciona para mí sin ningún problema se ve de esta manera:
1. Agregue una regla temporal con algún comentario:
2. Cuando se agregue la regla y desee eliminarla (o todo lo que contenga este comentario), haga lo siguiente:
Por lo tanto, eliminará al 100% todas las reglas que coinciden con el comentario $ y dejará sin tocar otras líneas. Esta solución funciona durante los últimos 2 meses con aproximadamente 100 cambios de reglas por día, sin problemas. Espero que ayude
fuente
iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
spamhaus
prohibiciones de iptables, 2) tome spamhaus.org/drop , 3) grep para IP de CIDR yiptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
iptables -S | sed "/$comment/s/-A/iptables -D/e"
;) como estePrimero enumere todas las reglas de iptables con este comando:
enumera como:
Luego copie la línea deseada y simplemente reemplace
-A
con-D
para eliminar eso:fuente
iptables: Bad rule (does a matching rule exist in that chain?).
¿Qué pasa ahora?nat
consudo iptables -S -t nat
y desee eliminar una de las reglas devueltas, la copia no es suficiente. Tienes que agregar-t nat
, por ejemplosudo iptables -D ... -t nat
.Use el
-D
comando, así es como laman
página lo explica: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 (filter
tabla), use-t TABLENAME
para especificar esa tabla de destino.Eliminar una regla para que coincida
Nota: Esto solo elimina la primera regla coincidente. Si tiene muchas reglas coincidentes (esto puede suceder en iptables), ejecútelo varias veces.
Eliminar una regla especificada como un número
Además de contar el número, puede enumerar el número de línea con el
--line-number
parámetro, por ejemplo:fuente
iptables -F
Suponga que, si desea eliminar las reglas NAT,
Enumere las tablas de IP adjuntas utilizando el siguiente comando,
Si desea eliminar la regla nat de las tablas IP, simplemente ejecute el comando,
Entonces, puedes verificar que,
fuente