Возможная DOS-атака или компьютерный «нервный срыв»

Я веб-разработчик, занимающийся разработкой, у меня на сайте работают два сервера ec2.small за балансировщиком нагрузки на AWS.

Недавно мы наблюдали, как 3-4 запроса в секунду закрывали сайт наших клиентов.

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

После того, как я включил ведение журнала балансировщика нагрузки, я увидел что тысячи запросов к одной странице приходили с одного IP-адреса.

Мы перенаправили запрос от балансировщика нагрузки на сервер, обрабатывающий запрос, используя X-forwarded-for, и заблокировали IP-адрес с помощью правила .htaccess.

Во время общения с ИТ-отделом клиентов они были уведомлены о том, что IP-адрес Ответственный за поток запросов был фактически одной из машин их внутренней компании.

Ответственная машина была удаленно перезагружена, и все запросы остановлены. Сайт вернулся в онлайн.

Официальным объяснением этого было «компьютер сходил с ума».

Может ли веб-браузер или компьютер с Windows делать 3-4 запроса в секунду к веб-странице с балансировкой нагрузки и снести на 5+ часов?

Вот как выглядели запросы:

2017-01-14T01:00:46.170447Z west-ssl XX.XXX.XX.XXX:33370 - -1 -1 -1 503 0 0 0 "GET https://www.example.com:443/example/12 HTTP/1.1" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" ECDHE-RSA-AES128-SHA256 TLSv1.2
-1
задан 18 January 2017 в 20:04
1 ответ

Конечно, это возможно - хотя это зависит от ряда факторов:

1) Похоже, у приложения на стороне сервера есть проблемы с параллелизмом. Возможно, стоит взглянуть, были ли узкими местами серверы приложений, или они были вышестоящими, например, в БД и серверах приложений не хватало памяти из-за того, что конфигурация apache не сбрасывала потоки достаточно быстро. Если бы это были серверы приложений, возможно, стоило бы провести некоторую настройку - развернуть идентичную машину вне ELB и использовать JMeter, чтобы добавить на нее некоторую нагрузку, чтобы выяснить узкие места.

Если это была база данных, вы могли бы использовать memcache / elasticache (поскольку похоже, что вы извлекаете определенный объект) для кэширования фактических запросов. Таким образом, соединения с базой данных реагируют быстро, Apache может быстро реагировать и отключать потоки, а не заполнять пул памяти компьютера приложения.

Если вы действительно чувствуете себя уязвимым, вы можете поставить Varnish в восходящем потоке для кэширования запросов на уровне 1- TTL 5 с, чтобы предотвратить большое количество запросов. Но будьте осторожны, поскольку VCL неумолим и может привести к серьезным проблемам и боли (отравление / утечка кеша).

2) Что касается самой "предметной" машины. Очевидно, это могло быть скомпрометировано - это обязательно должно быть расследовано. Я позволю вам решить, честен ли ИТ-специалист или нет - это вне области serverfault.

Если предположить, что он не был скомпрометирован, это мог быть какой-то плохой код javascript - если вы обновите опрос и каким-то образом изменили параметр времени, он вполне мог начать отправлять много запросов в секунду. Точно так же JS мог вести себя хорошо, но у человека могло быть открыто 25 вкладок и он пошел домой на вечер - если каждая отправляет 1 запрос в 5 секунд, это 5 запросов в секунду.

2
ответ дан 5 December 2019 в 19:23

Теги

Похожие вопросы