iptables 配置文件中的 INPUT、FORWARD、OUTPUT 链中的数字是什么意思?

Mik*_*kov 35 iptables

我遇到了以下配置文件:

# 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 
Run Code Online (Sandbox Code Playgroud)

有谁知道什么[368:102354][0:0][92952:20764374]什么意思?

per*_*ror 35

这两个值对应于数据包数量和链的默认策略到目前为止已应用于的字节数(有关详细信息,请参阅此其他答案)。

根据源代码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");
    }
}
Run Code Online (Sandbox Code Playgroud)

并且,结构xt_counters定义如下include/linux/netfilter/x_tables.h

struct xt_counters {
    __u64 pcnt, bcnt; /* Packet and byte counters */
};
Run Code Online (Sandbox Code Playgroud)

另请注意,非内置链[0:0]无论如何都标有(这是代码中的一个怪癖)。


小智 9

这两个数字分别是应用了默认策略的数据包数和字节数(不是链看到的数据包/字节总数)。它们与链的默认策略一起指定 - 这是因为它们在逻辑上属于那里,而不是因为没有更好的地方。

默认策略是当没有具有终止目标的规则匹配时对数据包执行的操作。终止目标是停止进一步处理当前顶级链中的规则的目标。例如,像 ACCEPT 或 DROP 这样的目标正在终止,而 LOG 则不是。

在此问题的示例配置中,INPUT 链中的最后一条规则是丢弃所有内容,因此永远不会应用默认策略,计数器通常应保持为 0。可以解释非零值(368 个数据包,102354 字节)通过将“全部删除”规则添加到链之前发生的流量。

根据定义,非内置链不能有默认策略,因为默认操作总是返回调用它们的链,这就是为什么它们的计数器值始终为 0。