La mejor manera de borrar todas las reglas de iptables

83

Actualmente tengo este fragmento:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

¿Existe la posibilidad de que alguna regla impermeable permanezca viva después de ejecutar esto?

La idea es tener una configuración de iptables completamente limpia, que pueda reemplazarse fácilmente por un nuevo conjunto de reglas (no importa rutas / parámetros de ifconfig).

kagali-san
fuente

Respuestas:

107

Para responder su pregunta sucintamente, no: no habría ninguna regla de "sobrantes" después de vaciar cada tabla. Sin embargo, en aras de ser exhaustivo, es posible que desee establecer la política para las cadenas integradas INPUTy FORWARDpara ACCEPT:

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

Reglas claras de ip6tables:

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

... y eso debería hacerlo. iptables -nvLdebería producir esta salida (o muy similar):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Sam Halicke
fuente
99
te olvidaste de 'raw': iptables -t raw -F iptables -t raw -X
kK-Storm
there would not be any "leftover" rules after flushing every tableOP no descarga todas las mesas. Tampoco tu. Esto es lo que parece si quieres ser minucioso . Y es posible que desee agregar iptables -t "$table" -Z. Tenga en cuenta que de esta manera está codificando la lista de las tablas y sus cadenas. Por lo tanto, consideraría seriamente la solución guardar-restaurar . O simplemente puede descargar iptables .
x-yuri
23

Esto restablecerá totalmente correctamente su sistema iptables a un estado muy básico:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

Todas las políticas se restablecerán a ACEPTAR, así como eliminar todas las tablas en uso actual. Todas las cadenas que no sean las integradas ya no existirán.

Jerub
fuente
1
Hack aseado! Sin embargo, no dependería de ello, ya que siempre es posible que cambios sutiles en el formato guardar / restaurar lo rompan. Probablemente sea mejor atenerse a la API que la iptablesherramienta proporciona explícitamente, IMO.
Steven lunes
3
Cambié de opinión: es poco probable que el formato de datos cambie mucho, ya que se usa mucho. +1.
Steven lunes
2
+1, truco interesante
Sam Halicke
Esto logró deshacerse de las cadenas UFW sobrantes, algo que la respuesta aceptada no hizo.
l0b0
Eso es un detalle menor, pero es posible que desee reemplazar la primera print $1con print $0ser consistente :)
x-yuri
2

Cada vez que necesito el firewall desactivado es algo como esto:

  • iptables-save > iptables.bak
  • service iptables stop (Estoy en fedora)
Realn0whereman
fuente
1

Simplemente puede descargar iptables'módulos del núcleo:

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter

UPD Desafortunadamente, demasiado bueno para ser verdad. Siempre que haya una regla o una cadena definida por el usuario en una tabla, el recuento de referencia del módulo correspondiente es 1 y modprobe -rfalla. Puede eliminar reglas y cadenas definidas por el usuario de esta manera:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore

o:

iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore

Además, es posible que desee descargar módulos de esta manera (sin nombres de módulo de codificación fija):

lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r

En el lado positivo, después de esto iptables-saveproduce una buena salida vacía :)

x-yuri
fuente
Ese podría ser el martillo aquí. Gracias.
Konrad Gajewski
0

Uno puede hacer esto en 1 o 2 comandos:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

Resultado:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         
Mugoma J. Okomba
fuente
55
Si las políticas predeterminadas están configuradas actualmente en DROP, esta es una forma rápida de bloquear el servidor. Entonces, no, no es un proceso de comando 1 o 2. Primero debe configurar ACEPTAR si no está actualmente.
RyanH
0

Recientemente tuve que bloquear todas las conexiones, lo que terminé haciendo fue

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP

En cuanto al ahorro, recomendaría lo siguiente

Ubuntu:

/etc/init.d/iptables save
/sbin/service iptables save

RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save

Además de respaldar todas las reglas actuales de UFW, he usado esto en el pasado

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

Creo que esto puede ser útil para futuras referencias. Pensé que iba a compartir.

Boschko
fuente
0

Respalda la configuración a iptables_backup.conf y limpia todas las reglas.

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

Para restaurar la configuración anterior:

iptables-restore < iptables_backup.conf
Zibri
fuente