Como obter um despejo completo determinístico de todas as regras do iptables?

1

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?

    
por adrelanos 10.01.2016 / 16:08

1 resposta

4

O comando iptables-save tem uma saída muito direta. As partes variadas estão entre colchetes depois de uma regra ou em comentários:

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

Em seguida, ele se torna um exercício para anular ou mesmo remover essas entidades, resultando em uma saída completamente determinística que ainda pode ser relida com iptables-restore :

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