Защитите себя от DoS-атак
-
06-07-2019 - |
Вопрос
Возможно, это больше подходит для 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 относится к категории проблем безопасности и определенно связано с программированием