Co oznaczają liczby w łańcuchach INPUT, FORWARD, OUTPUT w pliku konfiguracyjnym iptables?

34

Natrafiłem na następujący plik konfiguracyjny:

# 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 

Czy ktoś wie co [368:102354], [0:0]a [92952:20764374]średnia?

Michaił Morfikow
źródło
1
Możesz je zmienić na, 0jeśli chcesz zapisać konfigurację w pliku. To nie zaszkodzi, ale oczywiście zresetuje wartości po przywróceniu.
Totor
@Totor, czy robi to jakąkolwiek różnicę, jeśli całkowicie usuniesz liczby z pliku konfiguracyjnego? wygląda na to, że są one raportem, a nie konfiguracją, więc dlaczego znajdują się w pliku konfiguracyjnym?
barlop

Odpowiedzi:

34

Te dwie wartości odpowiadają liczbie pakietów i liczbie bajtów , do których dotychczas stosowano domyślną politykę łańcucha (szczegółowe informacje można znaleźć w tej drugiej odpowiedzi ).

Według samego kodu źródłowego 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");
    }
}

Struktura xt_countersjest zdefiniowana następująco include/linux/netfilter/x_tables.h:

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

Zauważ też, że łańcuchy, które nie są wbudowane, są i [0:0]tak oznaczone (to dziwactwo w kodzie).

perror
źródło
1
Podoba mi się twoja odpowiedź z wglądem z kodu źródłowego projektu. Dziękuję Ci bardzo.
Bodo Hugo Barwich,
9

Te dwie liczby to odpowiednio liczba pakietów i bajtów, do których zastosowano zasadę domyślną (a nie całkowita liczba pakietów / bajtów widocznych w łańcuchu). Są one określone razem z domyślną polityką dla łańcucha - dzieje się tak dlatego, że logicznie do nich należą, a nie dlatego, że nie było lepszego miejsca.

Domyślną zasadą jest akcja wykonywana na pakiecie, gdy żadna reguła z celem końcowym nie jest dopasowana. Docelowy cel to taki, który zatrzymuje dalsze przetwarzanie reguł w bieżącym łańcuchu najwyższego poziomu. Na przykład cele takie jak ACCEPT lub DROP kończą się, a LOG nie.

W przykładowej konfiguracji w tym pytaniu ostatnią regułą w łańcuchu INPUT jest DROP wszystko, więc domyślna polityka nigdy nie zostanie zastosowana, a liczniki zwykle powinny pozostać na 0. Wartości niezerowe (368 pakietów, 102354 bajtów) można wyjaśnić przez ruch, który miał miejsce przed dodaniem reguły „drop-all” do łańcucha.

Wbudowane łańcuchy nie mogą mieć domyślnej polityki z definicji, ponieważ domyślną czynnością jest zawsze powrót do łańcucha, z którego zostały wywołane, dlatego zawsze mają wartości licznika 0.

użytkownik56143
źródło
Możesz rozważyć dodanie tego do dokumentacji iptables-save (manpage) ... Nie sądzisz? :-)
perror
Zapisałem reguły w moich iptables iptables-savei otrzymałem: :INPUT DROP [0:0]i :OUTPUT ACCEPT [249529:173953830]. Myślę więc, że osoba, która utworzyła plik konfiguracyjny, nie zwróciła uwagi na te liczby. Ale teraz wszystko jest całkiem jasne.
Michaił Morfikow