DDoS-атака — это организация избыточной нагрузки на инфраструктуру и приложения с помощью абсолютно штатных средств работы с сетью и программами. Именно то, что используются штатные средства, делает защиту от DDoS такой непростой — сложно отличить вредоносный трафик, который нацелен на обрушение бизнеса, от обычного трафика ваших клиентов.

Однако существуют приемы, которые позволяют, если не полностью отразить DDoS, то хотя бы минимизировать негативное влияние хакерской атаки на приложения.

Итак, смотрим, как защититься от ДДОС.

Если вы хотите подробнее узнать о DDoS-атаках и том, какие приемы хакеры используют, чтобы нарушить работу сайтов и приложений, читайте статью «Что такое DDoS-атаки и почему они опасны для любого IT-сервиса».

Убираем очевидные узкие места в приложениях

Основа всех основ — делаем приложение настолько быстрым, надежным и стабильным, насколько это возможно. Этот шаг точно должен быть включен в ваш план разработки. Если не для защиты сайта от DDoS, то, как минимум, для того чтобы гладко и стабильно обслуживать клиентов.

Например, несколько тысяч посетителей внезапно решит использовать возможности поиска на вашем сайте, а программисты допустили ошибку в поисковых алгоритмах в коде. В итоге поиск выполняется медленно, трафик от сотен пользователей еще больше его замедляет. Страницы с результатами поиска тормозят, зависают, а то и нарушают работоспособность вашего сервиса.

Внимательные хакеры также могут обнаружить эти слабости и тормоза в вашем софте и использовать медленные функции кода для обрушения инфраструктуры.

Перед каждым релизом кода нужно обязательно устранить все возможные типичные ошибки разработки:

  • Неоптимальные выполнения кода — лишние циклы, лишние объекты, переменные и вызовы.
  • Запросы в СУБД — строго по индексированным полям, чтобы избежать тяжелых запросов, нагружающих сервер базы данных.
  • Где можно — убрать повторные запросы в СУБД, поставить кэширование.
  • Пересмотреть и попытаться оптимизировать тяжелые алгоритмы и функции — часто это можно сделать малой кровью.
  • Тяжелые задачи, вроде обработки картинок и видео, сделать асинхронными и вынести в более глубокие уровни бэкенда.

Желательно — используем нагрузочное тестирование

Понимание того, сколько десятков/сотен/тысяч запросов может выдержать ваш софт — ценная информация, которая:

  • подскажет, сколько клиентов вы можете обслуживать и когда нужно будет масштабировать архитектуру;
  • покажет узкие места, которые нужно оптимизировать в дальнейших релизах;
  • позволит понять, в какие места кода могут попытаться ударить хакеры, старающиеся уронить сервер.

Чтобы знать, как защитить сервер от DDoS, нужно уметь мыслить как взломщик.

Готовим бэкенд к масштабированию и высоким нагрузкам

Поскольку DDoS-атака — это создание нагрузки, то сдержать ее можно теми же средствами, что и большой наплыв посетителей:

  1. Горизонтальное масштабирование. По возможности сделайте свои системы масштабируемыми по горизонтали. Это означает, что если ваших клиентов обслуживает обычно два сервера, то под нагрузкой вы можете за пару минут поставить 10 серверов. Или 100! Для этого обычно достаточно не хранить данные на серверах приложений и обеспечить балансировку нагрузки между любым числом машин. А при использовании облачных сервисов вы получаете нужные дополнительные ресурсы мгновенно, не нужно заботиться о покупке и настройке дополнительного оборудования.
  2. Резервные ресурсы. Вместе с масштабированием можно внедрить и резервы серверов — несколько машин, которые всегда готовы к работе и могут быть в любой момент включены в список серверов, куда попадает трафик с балансировщика. Обычно резервирование применяют для противодействия поломкам, но в случае наплыва трафика (как целевого, так и вредоносного), всегда можно пустить резервы в бой.
  3. Асинхронные задачи. Применяйте асинхронные задачи везде, где только можно. Не каждое действие в системе должно мгновенно возвращать результат. Пусть самые ресурсоемкие операции выполняются фоном — пользователя всегда можно уведомить об обновлениях с помощью пуша или веб-сокетов. Асинхронный код тоже должен быть горизонтально масштабируемым, чтобы вы легко могли прыгнуть с 10 копий программы до 1 000 активных копий.
  4. Оптимизация СУБД. Самое узкое место — СУБД. Чтение и запись в базы данных ведут практически все компоненты системы, поэтом отказ программы на уровне БД — гарантированный крах системы. Горизонтальное масштабирование при работе с базами не работает — нельзя вместо 10 серверов быстро поставить 1000. Поэтому нужно как следует спланировать репликацию, шардинг и кластеризацию ваших СУБД или использовать облачные базы данных, с уже настроенным масштабированием и другими фишками. Еще очень выручит наличие кэширующей прослойки между приложением и самой базой, чтобы клиенты по 100 раз не запрашивали с сервера одни и те же данные.

Фильтруем лишний трафик

Возможность надежно отличать вредоносный трафик от целевого — один из самых дешевых способов защитить сайт от DDoS-атак:

  • Отключите все лишние сервисы на серверах, закройте все лишние порты фаерволом. Не стесняйтесь даже ping-запросы отрубать — иногда DDoS можно организовать в том числе и через ICMP. Жестко задайте правила — где и какие пакеты вы ожидаете и по какому протоколу. Отсеките лишние приемники UDP и TCP.
  • Заведите себе возможность мониторить и блокировать подозрительные сетевые активности средствами фаерволов и ОС.
  • На уровне приложения тоже нужно позаботиться о защите от вредоносных запросов. Блокируйте тех, кто шлет слишком много обращений к серверу — обычный пользователь явно не станет слать по 1 000 запросов в секунду.
  • Усложняйте жизнь взломщикам: хитрые кукисы, криптоподписи для серверных запросов, шифрование — всё это не дает атаковать вас в лоб. Станьте для хакеров крепким орешком — некоторые низкоквалифицированные взломщики могут вообще отказаться от идеи организовать DDoS на вас.
  • Постоянно мониторьте подозрительные активности. 10 000 клиентов зарегистрировалось за час с одного IP? Подозрительная постоянная активность в 4 часа утра? Пользователи постоянно запрашивают одну и ту же информацию? Взять ситуацию на карандаш, расследовать, принять меры.

При размещении сайта и приложений в облаке VK Cloud (бывш. MCS) вы получаете доступ к готовому решению провайдера для защиты от DDoS-атак всех типов.

Защита от DDoS-атак — всегда непросто

Как видите, малой кровью при планировании защиты серверов от DDoS не отделаться. Серебряной пули и короткого списка рекомендаций и лекарств на все случаи жизни тут просто нет. Есть лишь большой список принципов для планирования действий.

Хорошая новость в том, что выполняя все эти рекомендации и постоянно улучшая и дорабатывая систему, вы, в конце концов, построите гибкий надежный сервис и обеспечите безопасность сайта.