O que os números nas cadeias INPUT, FORWARD, OUTPUT significam no arquivo de configuração 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] significa?

    
por Mikhail Morfikov 07.01.2014 / 09:37

2 respostas

33

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

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

/* 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 como segue em include/linux/netfilter/x_tables.h :

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

Note também que cadeias que não são internas são marcadas com [0:0] de qualquer maneira (é um capricho no código).

    
por 07.01.2014 / 09:50
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 junto com a política padrão da cadeia - isso é porque eles logicamente pertencem a eles, não porque não havia lugar melhor.

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

Na configuração de exemplo desta questão, a última regra na cadeia INPUT é DROP everything, portanto, a política padrão nunca será aplicada e os contadores devem normalmente permanecer em 0. Valores diferentes de zero (368 pacotes, 102354 bytes) pode ser explicado pelo tráfego que ocorreu antes que a regra "drop-all" fosse adicionada à cadeia.

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

    
por 07.01.2014 / 17:32

Tags