Назад | Перейти на главную страницу

iptables: Rate too fast Ошибка

Я хочу установить жесткое ограничение для входящих UDP-пакетов на моем компьютере с Linux, который находится в 10-гигабитной локальной сети.

Следующая команда работает нормально

/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 / netfilter / xt_limit.h` в исходном коде ядра Linux.

Есть идеи, почему установлен этот предел?

Если вы посмотрите исходный файл 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 как вы сказали, 10 000. Значение mult начинается с 1 в секундах и достигает 24 * 60 * 60 дней. Наибольшее значение, конечно же, будет для дней. Если вы посчитаете, вы получите следующее выражение:

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

Число, которое нужно разделить, можно сохранить в виде 32-битного целого числа без знака (uint32_t). Однако это число будет усечено, если станет больше (как в случае XT_LIMIT_SCALE = 100,0000). Значение 10001 не вызовет этой проблемы, но я думаю, что это бесполезное значение.