Защитите себя от Dos-атак

Это может быть что-то более подходящее для Serverfault, но многие веб-разработчики, которые приходят только сюда, вероятно, выиграют от возможных ответов на этот вопрос.

Вопрос в том, как эффективно защитить себя от атак типа "отказ в обслуживании" на ваш веб-сервер.

Я спросил себя об этом после прочтения этой статьи

Для тех, кто не знаком, вот что я помню об этом: DoS-атака попытается занять все ваши соединения, многократно отправляя поддельные заголовки на ваши серверы.

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

Википедия предоставляет дополнительную информацию: http://en.wikipedia.org/wiki/Denial_of_service

4 ответа

Решение

Нет панацеи, но вы можете усложнить DoS-атаки, выполнив одно из следующих действий:

  • Не (и не ограничивайте свою готовность) выполнять дорогостоящие операции от имени неаутентифицированных клиентов
  • Попытки проверки подлинности газа
  • Операции Throttle, выполняемые от имени каждого аутентифицированного клиента, и помещают его учетную запись во временную блокировку, если они делают слишком много вещей за слишком короткое время
  • Иметь аналогичные глобальные ограничения для всех клиентов, не прошедших проверку подлинности, и будьте готовы снизить этот параметр, если вы обнаружите атаку в процессе
  • Имейте флаг, который вы можете использовать во время атаки, чтобы отключить все неаутентифицированный доступ
  • Не храните вещи от имени неаутентифицированных клиентов и используйте квоту, чтобы ограничить хранилище для каждого аутентифицированного клиента
  • В общем, как можно быстрее отклоняйте все неправильно сформированные, неоправданно сложные или неоправданно большие запросы (и регистрируйте их, чтобы помочь в обнаружении атаки)
  • Не используйте чистый кэш LRU, если запросы от неаутентифицированных клиентов могут привести к удалению данных из этого кэша, потому что вы будете подвергаться атакам отравления кэшем (когда злонамеренный клиент запрашивает множество различных редко используемых вещей, заставляя вас исключить все полезных вещей из вашего кеша и нужно проделать гораздо больше работы для обслуживания ваших законных клиентов)

Помните, что важно прямо отклонять удушенные запросы (например, с помощью HTTP 503: ответ службы недоступен или аналогичный ответ, соответствующий любому используемому вами протоколу), а не ставить в очередь дросселированные запросы. Если вы поставите их в очередь, очередь просто поглотит всю вашу память, и атака DoS будет, по крайней мере, такой же эффективной, какой она была бы без регулирования.

Несколько более конкретных советов для HTTP-серверов:

  • Убедитесь, что ваш веб-сервер настроен на отклонение POST сообщения без сопровождающих Content-Length заголовок, а также отклонять запросы (и ограничивать нарушителя), которые превышают заявленные Content-Length и отклонить запросы с Content-Length что необоснованно долго для службы, которую POST (или же PUT) направлен на

Асинхронные серверы, например, более или менее защищены от этой конкретной формы атаки. Например, я обслуживаю свои приложения Django, используя обратный прокси-сервер Nginx, и атака, похоже, никак не влияет на его работу. Другой популярный асинхронный сервер - lighttpd.

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

Для этой конкретной атаки (до тех пор, пока запрос GET) будет работать балансировщик нагрузки или WAF, который только отправляет полные запросы к веб-серверу.

Проблемы начинаются, когда вместо GET POST используется (что легко), потому что вы не можете знать, является ли это вредоносным POST или просто какой-то очень медленной загрузкой от пользователя.

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

Короткий ответ:

Вы не можете защитить себя от DoS.

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

Другие вопросы по тегам