iptables:速率太快错误

iptables:速率太快错误

我想对位于 10 千兆 LAN 内的 Linux 机器上的传入 UDP 数据包设置硬限制。

以下命令有效

/sbin/iptables -A UDP-LIMIT -m limit --limit 10000/s --limit-burst 500 -j RETURN

但当我尝试增加限制时

/sbin/iptables -A UDP-LIMIT -m limit --limit 10001/s --limit-burst 500 -j RETURN

它给了我错误Rate too fast

知道为什么吗?

我还在#define XT_LIMIT_SCALE 10000 inlinux内核源代码中看到了一个宏linux/netfilter/xt_limit.h`。

知道为什么设置这个限制吗?

答案1

如果你看一下源文件libxt_limit.c,你就能找到答案。具体来说,看看parse_rate函数中的这些行:

    *val = XT_LIMIT_SCALE * mult / r;
    if (*val == 0)
            /*
             * The rate maps to infinity. (1/day is the minimum they can
             * specify, so we are ok at that end).
             */
            xtables_error(PARAMETER_PROBLEM, "Rate too fast \"%s\"\n", rate);
    return 1;

XT_LIMIT_SCALE是 10000,正如你所说。 的值mult从 1 秒开始,达到 24*60*60 天。 当然,最大值将是天数。 如果你进行计算,你将得到以下表达式:

10000 * 24 * 60 * 60 / 10000 = 864,000,000 / 10000 = ..

被除数可以存储在 32 位无符号整数 (uint32_t) 中。但是,如果该数字变大(例如 XT_LIMIT_SCALE = 100,0000 的情况),该数字将被截断。该值10001不会导致此问题,但我认为该值没有用。

相关内容