O que significam os números nas cadeias INPUT, FORWARD, OUTPUT no arquivo de configuração do iptables?

34

Me deparei com o seguinte arquivo de configuração:

# Generated by iptables-save v1.3.1 on Sun Apr 23 06:19:53 2006
*filter
:INPUT ACCEPT [368:102354]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [92952:20764374]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
COMMIT
# Completed on Sun Apr 23 06:19:53 2006 

Alguém sabe o que [368:102354], [0:0]e [92952:20764374]média?

Mikhail Morfikov
fonte
11
Você pode alterá-los para 0se quiser salvar sua configuração em um arquivo. Isso não vai doer, exceto que, é claro, redefinirá os valores quando você o restaurar.
Totor
@ Motor faz alguma diferença se você remover os números completamente do arquivo de configuração? parece que eles são um relatório e não uma configuração. Por que eles estão em um arquivo de configuração?
Barlop

Respostas:

34

Os dois valores correspondem ao número de pacotes e ao número de bytes aos quais a política padrão da cadeia foi aplicada até o momento (consulte esta outra resposta para obter detalhes).

De acordo com o código fonte em iptables-save.csi:

/* Dump out chain names first,
 * thereby preventing dependency conflicts */
for (chain = iptc_first_chain(h);
     chain;
     chain = iptc_next_chain(h)) {

    printf(":%s ", chain);
    if (iptc_builtin(chain, h)) {
        struct xt_counters count;
        printf("%s ", iptc_get_policy(chain, &count, h));
        printf("[%llu:%llu]\n", 
               (unsigned long long)count.pcnt, 
               (unsigned long long)count.bcnt);
    } else {
        printf("- [0:0]\n");
    }
}

E, a estrutura xt_countersé definida da seguinte forma include/linux/netfilter/x_tables.h:

struct xt_counters {
    __u64 pcnt, bcnt; /* Packet and byte counters */
};

Observe também que as cadeias que não são incorporadas são marcadas de [0:0]qualquer maneira (é uma peculiaridade no código).

perror
fonte
11
Gosto da sua resposta com o Insight do código-fonte do projeto. Muito obrigado.
Bodo Hugo Barwich
9

Os dois números são o número de pacotes e bytes, respectivamente, aos quais a política padrão foi aplicada (não o número total de pacotes / bytes vistos pela cadeia). Eles são especificados juntamente com a política padrão da cadeia - isso ocorre porque eles pertencem logicamente a ele, não porque não havia um lugar melhor.

A política padrão é a ação que é executada no pacote quando nenhuma regra com um destino final corresponde. Um destino final é aquele que interrompe o processamento adicional das regras na cadeia atual de nível superior. Por exemplo, destinos como ACCEPT ou DROP estão sendo finalizados, enquanto LOG não.

Na configuração de exemplo nesta pergunta, a última regra na cadeia INPUT é DROP, para que a política padrão nunca seja aplicada e os contadores normalmente permaneçam em 0. Valores diferentes de zero (368 pacotes, 102354 bytes) podem ser explicados pelo tráfego que ocorreu antes da regra "drop-all" ser adicionada à cadeia.

Cadeias não integradas não podem ter política padrão por definição, porque a ação padrão é sempre retornar à cadeia da qual foram chamadas, é por isso que elas sempre têm valores de contador 0.

user56143
fonte
Você pode considerar adicionar isso à documentação de iptables-save (página de manual) ... Você não acha? :-)
perror
Eu salvei regras no meu iptables usando iptables-savee obtive: :INPUT DROP [0:0]e :OUTPUT ACCEPT [249529:173953830]. Então, acho que a pessoa que criou o arquivo de configuração não prestou atenção nesses números. Mas agora, tudo está bem claro.
Mikhail Morfikov