Was bedeuten Zahlen in INPUT-, FORWARD- und OUTPUT-Ketten in der iptables-Konfigurationsdatei?

34

Ich bin auf folgende Konfigurationsdatei gestoßen:

# 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 

Wer weiß, was [368:102354], [0:0]und [92952:20764374]bedeuten?

Mikhail Morfikov
quelle
1
Sie können sie in ändern, 0wenn Sie Ihre Konfiguration in einer Datei speichern möchten. Das wird nicht schaden, außer dass die Werte natürlich zurückgesetzt werden, wenn Sie es wiederherstellen.
Totor
@Totor macht es einen Unterschied, ob Sie die Nummern komplett aus der Konfigurationsdatei entfernen? Es hört sich so an, als wären sie eher ein Bericht als eine Konfiguration. Warum befinden sie sich also in einer Konfigurationsdatei?
Barlop

Antworten:

34

Die beiden Werte entsprechen der Anzahl der Pakete und der Anzahl der Bytes , auf die die Standardrichtlinie der Kette bisher angewendet wurde ( Einzelheiten finden Sie in dieser anderen Antwort ).

Nach dem Quellcode an iptables-save.csich:

/* 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");
    }
}

Und die Struktur xt_countersist wie folgt definiert include/linux/netfilter/x_tables.h:

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

Beachten Sie auch, dass Ketten, die nicht eingebaut sind, [0:0]sowieso mit gekennzeichnet sind (es ist eine Eigenart im Code).

perror
quelle
1
Ich mag Ihre Antwort mit dem Einblick aus dem Projekt-Quellcode. Vielen Dank.
Bodo Hugo Barwich
9

Die beiden Zahlen geben die Anzahl der Pakete bzw. Bytes an, auf die die Standardrichtlinie angewendet wurde (nicht die Gesamtzahl der Pakete / Bytes, die von der Kette gesehen werden). Sie werden zusammen mit der Standardrichtlinie für die Kette angegeben. Dies liegt daran, dass sie logischerweise dorthin gehören und nicht daran, dass es keinen besseren Ort gibt.

Die Standardrichtlinie ist die Aktion, die für das Paket ausgeführt wird, wenn keine Regel mit einem Abschlussziel übereinstimmt. Ein Abschlussziel ist ein Ziel, das die weitere Verarbeitung der Regeln in der aktuellen Kette der obersten Ebene stoppt. Beispielsweise werden Ziele wie ACCEPT oder DROP beendet, LOG jedoch nicht.

In der Beispielkonfiguration in dieser Frage lautet die letzte Regel in der INPUT-Kette DROP everything, sodass die Standardrichtlinie niemals angewendet wird und die Zähler normalerweise bei 0 bleiben sollten. Es können Werte ungleich Null (368 Pakete, 102354 Bytes) erklärt werden durch den Verkehr, der stattgefunden hat, bevor die "Drop-All" -Regel der Kette hinzugefügt wurde.

Nicht eingebaute Ketten können per Definition keine Standardrichtlinie haben, da die Standardaktion immer darin besteht, zu der Kette zurückzukehren, von der aus sie aufgerufen wurden. Deshalb haben sie immer Zählerwerte von 0.

user56143
quelle
Sie können dies zur Dokumentation von iptables-save (manpage) hinzufügen. Denken Sie nicht? :-)
perror
Ich habe Regeln in meinen iptables mit gespeichert iptables-saveund bekam: :INPUT DROP [0:0]und :OUTPUT ACCEPT [249529:173953830]. Ich denke also, dass die Person, die die Konfigurationsdatei erstellt hat, diese Zahlen nicht beachtet hat. Aber jetzt ist alles ziemlich klar.
Mikhail Morfikov