Защитите себя от Dos-атак - PullRequest
18 голосов
/ 23 июня 2009

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

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

Я спросил себя, прочитав эту статью

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

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

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

Ответы [ 4 ]

46 голосов
/ 23 июня 2009

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

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

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

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

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

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

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

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

1 голос
/ 23 июня 2009

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

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

0 голосов
/ 23 июня 2009

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

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

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

...