Como obter um despejo completo determinístico de todas as regras do iptables?
Por completo, quero dizer todas as tabelas do iptables.
Por determinista, quero dizer, quando o comando é executado várias vezes sem modificar nenhum iptables, ele deve sempre mostrar o mesmo.
Caso de uso: refatorando um script de firewall. Usando, por exemplo, um loop for em vez de escrever um comando similar várias vezes e coisas assim. Executar o comando iptables-dump antes e depois para verificar a refatoração não alterou as regras reais do iptables.
Conforme Responda por Gilles , para obter uma saída completa, -v
deve ser usado.
iptables
controls five different tables: filter
, nat
, mangle
, raw
and security
. On a given call, iptables
only displays or modifies one of these tables, specified by the argument to the option -t
(defaulting to filter
). To see the complete state of the firewall, you need to call iptables
on each of the tables successively.
Additionally, to get an accurate representation of the rules, you need to pass the option -v
. Otherwise some important criteria are omitted in the output, such as the interface in filter rules (e.g. a rule that says “accept everything” and a rule that says “accept everything on the loopback interface” can only be distinguished with -v
).
Thus, to get a complete presentation of the netfilter rules, you need
iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security
Alternatively, you can call the iptables-save
program, which displays all the rules in all tables in a format that can be parsed by iptables-restore
. This format is also reasonably readable by humans (it's pretty much like a series of calls to the iptables
command to build the table).
Mas ao usar -v
, o contador de pacotes e bytes será adicionado. Assim, tornando a saída não determinística.
Como obter o melhor dos dois mundos? Como obter um despejo completo determinístico de todas as regras do iptables?