¿Cómo get un volcado completo determinista de todas las reglas de iptables?

¿Cómo get un volcado completo determinista de todas las reglas de iptables?

Por completo, me refiero a todas las tablas de iptables.

Por determinista, me refiero a que cuando el command se ejecuta varias veces sin modificar ninguna tabla ip, siempre debe generar el mismo resultado.

Caso de uso: refactorización de un script de firewall Usando por ejemplo un bucle for en lugar de escribir commands similares varias veces y cosas así. Ejecutar el command iptables-dump antes y después para verificar la refactorización no ha cambiado ninguna regla de iptables real.

Según la Respuesta de Gilles , para get un resultado completo, se debe usar -v .

iptables controla cinco tablas diferentes: filter , nat , mangle , raw y security . En una llamada dada, iptables solo muestra o modifica una de estas tablas, especificada por el argumento a la opción -t (defaulting to filter ). Para ver el estado completo del firewall, debe llamar a iptables en cada una de las tablas de manera sucesiva.

Además, para get una representación precisa de las reglas, debe pasar la opción -v . De lo contrario, algunos criterios importantes se omiten en el resultado, como la interfaz en las reglas de filtrado (por ejemplo, una regla que dice "aceptar todo" y una regla que dice "aceptar todo en la interfaz de bucle invertido" solo se puede distinguir con -v ).

Por lo tanto, para get una presentación completa de las reglas de netfilter, necesita

 iptables -vL -t filter iptables -vL -t nat iptables -vL -t mangle iptables -vL -t raw iptables -vL -t security 

Alternativamente, puede llamar al progtwig iptables-save , que muestra todas las reglas en todas las tablas en un formatting que puede ser analizado por iptables-restre . Este formatting también es razonablemente legible para los humanos (es más o less como una serie de llamadas al command de iptables para build la tabla).

Pero al usar -v , se agregará el contador de packages y bytes. De este modo, la salida no es determinista.

¿Cómo get lo mejor de ambos mundos? ¿Cómo get un volcado completo determinista de todas las reglas de iptables?

El command iptables-save tiene un resultado muy directo. Las partes variables se encuentran entre corchetes después de una regla o en los comentarios:

 # Generated by iptables-save v1.4.21 on Sun Jan 10 16:02:30 2016 : INPUT ACCEPT [38:2132] 

Luego se convierte en un ejercicio para anular o incluso eliminar dichas entidades, lo que resulta en un resultado completamente determinista que aún se puede volver a leer con iptables-restre :

 iptables-save | sed -e 's/\[[0-9:]*\]/[0,0]/' -e '/^#/d' *filter :INPUT ACCEPT [0,0] ....