Viji
@Viji
Associate DevOps Engineer

Как защитить Websocket based сайт от DDoS атак?

Есть вебсайт, который активно использует WebSockets для получения и отправки информации пользователям (wss). Есть ли вариант, как можно защитить WebSocket сервер от слишком большого количества сообщений идущих с

1) Одного IP
2) С Разных IP адресов

Например просто ограничивая трафик - Mb's/sec. Думаю по количеству сообщений ограничить невозможно, так как трафик идет через wss!?
  • Вопрос задан
  • 1655 просмотров
Решения вопроса 2
@MechanID
Админ хостинг провайдера
Если сильно обощать ддосы бывают двух видов -
1 атака на канал вам просто забивают трафиком под завязку сетевой интерфейс вашего сервера и он не может общатся с клиентами, это на стороне самого сервера никак не решается - только внешние решения типа клаудфлары.
2 атака на приложение и сопутствующий софт, заваливают медленными коннтектами вебсервер пока не заокнчится лимит, ищут тяжолые дейсвия с базой на вашем сайте(поиск например) чтобы потом кучей запросов нагрузить базу и сервис начнет тупить, и так далее. Основные приемы борьбы - знать паттерн обычного пользвателя, и настроить необходимые лимиты чуть выше чем надо обычному юзеру) в фаерволе или фронтенд проксе (например haproxy)
Ответ написан
Комментировать
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Чат? — Отлично. Значит, у нас задача: отделить ботов от людей и забанить ботов.

Я действую так:

1. Собираю в оперативке на бэкенде статистику действий клиентов в разрезе IP.

2. После (!) обработки запроса клиента на бэкенде проверяю по статистике, не бот ли это? Использую несколько метрик и три временных среза для контроля лимитов: последние 3 секунды (здесь отлавливаются самые глупые боты), последние 10 секунд (здесь уже боты поумнее), последние 3 минуты (здесь ловятся совсем хитрые боты).

3. Если хотя-бы по одному из сочетаний метрика/период клиент выходит за границы дозволенного, объявляю его ботом.

4. Автоматизированно добавляю для данного IP-шника запрещающее правило на ближайшем брандмауэре. В итоге трафик на бэкенд больше не приходит.

5. Через месяц также автоматизированно удаляю IP-шник из черного списка брандмауэра.

В итоге обычный бот живёт у меня на сервере примерно полсекунды, успевая сделать 3...4 запроса. Потом IP уходит в бан на месяц и общается только с брандмауэром. Бэкенд сидит спокойно и ковыряет в носу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
1. Блокировка IP это базовый функционал файрвола, но при DDOS руками это бесполезно ставить
2. DDOS огранизовывают обычно или с помощью amplify traffic либо же slowloris attack. Есть еще UDF flood. так что websocket или же что там у вас не важно. Если у вас нет возможности горизонтально масштабироваться чтобы отбить первую волну вредного трафика то вам ничто не поможет, хотя решения есть, не спорю. Если у вас один сервачок то просто забудьте об этой проблеме - у вас не хватит ресурсов с этим справиться
3. ограничение по числу сообщений называется тротлингом и реализуется очень просто, но он работает после инструментов анти-ддоса и не имеет к этому никакого отношения.
4. ограничивать пропускную способность у вас не получится для разных клиентов, а в целом если то вы просто ляжете от своих кривых рук
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы