Что означают числа в цепочках INPUT, FORWARD, OUTPUT в файле конфигурации iptables?

34

Я наткнулся на следующий файл конфигурации:

# 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 

Кто - нибудь знает что [368:102354], [0:0]и [92952:20764374]среднее?

Михаил Морфиков
источник
1
Вы можете изменить их на, 0если хотите сохранить свою конфигурацию в файл. Это не повредит, за исключением того, что он, конечно, сбросит значения при восстановлении.
Тотор
@Totor имеет ли значение, если вы полностью удалите числа из файла конфигурации? Похоже, это отчет, а не конфигурация, так почему они находятся в файле конфигурации?
Бароп

Ответы:

34

Эти два значения соответствуют количеству пакетов и количеству байтов , к которым до сих пор применялась политика цепочки по умолчанию (подробности см. В этом другом ответе ).

Согласно исходному коду в 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");
    }
}

И структура xt_countersопределяется следующим образом:include/linux/netfilter/x_tables.h :

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

Также обратите внимание, что цепочки, которые не являются встроенными, в [0:0]любом случае помечаются (это странность в коде).

PError
источник
1
Мне нравится ваш ответ с Insight из исходного кода проекта. Большое спасибо.
Бодо Хьюго Барвич
9

Два числа - это количество пакетов и байтов, соответственно, к которым была применена политика по умолчанию (а не общее количество пакетов / байтов, видимых цепочкой). Они указываются вместе с политикой по умолчанию для цепочки - это потому, что они логически принадлежат там, а не потому, что лучшего места не было.

Политика по умолчанию - это действие, которое выполняется над пакетом, если не найдено ни одного правила с конечной целью. Конечная цель - это цель, которая останавливает дальнейшую обработку правил в текущей цепочке верхнего уровня. Например, такие цели, как ACCEPT или DROP, заканчиваются, а LOG - нет.

В примере конфигурации в этом вопросе последним правилом в цепочке INPUT является УДАЛЕНИЕ всего, поэтому политика по умолчанию никогда не будет применяться, и счетчики обычно должны оставаться на 0. Можно объяснить ненулевые значения (368 пакетов, 102354 байта) по трафику, который имел место до того, как правило «drop-all» было добавлено в цепочку.

Нестандартные цепочки не могут иметь политику по умолчанию по определению, потому что действие по умолчанию всегда состоит в том, чтобы вернуться к той цепочке, из которой они были вызваны, поэтому они всегда имеют значения счетчика 0.

user56143
источник
Вы можете добавить это в документацию iptables-save (manpage) ... Вам не кажется? :-)
perror
Я сохранил правила в моем iptables используя iptables-saveи получил: :INPUT DROP [0:0]и :OUTPUT ACCEPT [249529:173953830]. Итак, я думаю, что человек, который создал файл конфигурации, не обратил внимания на эти цифры. Но сейчас все довольно ясно.
Михаил Морфиков