Мне было интересно, считает ли брандмауэр csf соединения за последние CT_INTERVAL секунды, а затем сравнивает их со значением CT_LIMIT, или он просто считает текущие (на данный момент) соединения, а затем сравнивает их с CT_LIMIT?
Потому что, если последнее, злоумышленник может легко угадать CT_INTERVAL, а затем затопить ваш сервер на CT_INTERVAL-1 секунд, и не отправлять какие-либо соединения прямо тогда, когда брандмауэр проверяет соединения. На самом деле, я считаю, что это случилось с нами недавно, и нам пришлось вручную заблокировать нарушающий IP.
Заранее спасибо!
Поскольку никто не ответил, я скачал исходный код csf-сервера и проверил, как используется параметр CT_LIMIT. Очевидно, что информация о соединениях читается из /proc/net/tcp|udp|etc..., которая содержит только текущие соединения с сервером.
Похоже, что злоумышленник может легко обойти защиту DOS брандмауэра cfs, сделав паузу во время проверки брандмауэром текущих активных соединений.
В качестве временного обходного пути можно установить значение CT_INTERVAL на 10 секунд (это минимальное значение), что заставит брандмауэр проверять текущие соединения каждые 10 секунд. Это затруднит угадывание атакующим точного времени паузы в атаке.