Вопрос

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

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

Я задал себе этот вопрос после прочтения этого статья

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top