Защита от DDoS: ограничение частоты запросов
В последние месяцы мы фиксируем рост числа DDoS-атак на сервисы наших пользователей. Чтобы было чем ответить, в CloudPub 3.1 мы добавили новое правило фильтрации - «Ограничение частоты».
Почему туннель не спасает от L7-атак
DDoS-атаки принято делить по уровням сетевой модели:
- L3/L4 (сетевой и транспортный уровень) - объёмные атаки: SYN-флуд, UDP-флуд, амплификация. Их цель - забить канал или таблицу соединений.
- L7 (прикладной уровень) - HTTP-флуд: шквал на вид «легитимных» запросов к страницам, формам и API.
Инфраструктура CloudPub защищена от объёмных L3/L4-атак на сетевом периметре. С L7 сложнее: CloudPub туннелирует трафик до вашего локального сервиса, поэтому HTTP-запросы проходят сквозь туннель и доходят до самого приложения.
Так что даже когда периметр держит удар на L3/L4, при L7-атаке страдает конечный пользователь: ваш ло кальный сервер получает поток запросов, захлёбывается и перестаёт отвечать обычным клиентам. Туннель здесь не помощник - он честно доставляет весь трафик по назначению.
Значит, аномальный поток нужно отсекать ещё на стороне CloudPub, до того как он попадёт в туннель. Ровно для этого мы и добавили ограничение частоты.
Новое правило «Ограничение частоты»
Ограничение частоты - это новый тип действия в правилах фильтрации. Оно объединяет два независимых ограничителя, и вы можете использовать любой из них или оба сразу:
- По частоте - сколько новых соединений источник может открыть за интервал времени.
- По числу одновременных соединений - сколько соединений от одного источника активны в каждый момент.
Когда лимит превышен, CloudPub отклоняет новые соединения, и нагрузка не доходит до вашего сервиса.
Параметры
Правило настраивается несколькими полями (названия совпадают с формой в личном кабинете):
- Ключ подсчёта - поля, по которым соединения группируются для подсчёта (например,
ip.src- отдельный счётчик на каждый IP-адрес). - Запросов - сколько новых соединений разрешено за один период.
- Период (сек.) - длительность скользящего окна подсчёта в секундах.
- Макс. одновременных - максимум одновременно активных соединений на один ключ подсчёта.
- Блокировка (сек.) - на сколько секунд нарушитель блокируется после превышения лимита частоты.
Ключ подсчёта можно собрать из нескольких полей. Помимо ip.src доступны и подсети - ip.src.subnet24 и ip.src.subnet16: они группируют клиентов по сети /24 или /16, что помогает против атак, когда злоумышленник перебирает адреса в пределах одной подсети.
Примеры
Защита от HTTP-флуда - не более 100 запросов в минуту с одного IP-адреса:
- Действие: Ограничить частоту
- Ключ подсчёта:
ip.src - Запросов:
100 - Период (сек.):
60
Защита от перебора паролей - не более 10 соединений за 5 минут с подсети /24, с блокировкой нарушителя на 15 минут:
- Действие: Ограничить частоту
- Ключ подсчёта:
ip.src.subnet24 - Запросов:
10 - Период (сек.):
300 - Блокировка (сек.):
900
Ограничение нагрузки - не более 200 одновременных соединений с одного IP-адреса:
- Действие: Ограничить частоту
- Ключ подсчёта:
ip.src - Макс. одновременных:
200
Сочетается с обычными правилами
В отличие от других действий, ограничение частоты не терминально: пока лимит не превышен, соединение продолжает проверяться следующими правилами. Это позволяет свободно комбинировать ограничение частоты с фильтрацией по IP, геолокации и HTTP-полям - например, сначала пропустить доверенные адреса, а уже потом включить лимит для всех остальных.
Подробное описание всех параметров и характеристик - в разделе документации Фильтрация трафика.
Что ещё нового в CloudPub 3.1
Помимо ограничения частоты, в релиз вошли и другие улучшения:
- Агент-коннектор - публикация локальных сервисов через обратный TCP-прокси (в On-Premise версии).
- Команды в группах - в группу теперь можно одним действием добавить всех пользователей своей команды.
- Инспектор запросов отключён по умолчанию - меньше лишней нагрузки и накладных расходов.
- Кеширование - улучшена инвалидация кеша и увеличено время его жизни.