Назад к блогу

Как быстро проверить, защищен ли ваш сайт от DoS-атак?

2022-02-195 минут чтения

Цель этого краткого руководства — объяснить, как провести стресс-тест вашего сайта и посмотреть, как он ведет себя при экстремальных нагрузках. Инструмент с открытым исходным кодом, который мы используем для этого теста, — это инструмент для тестирования производительности HTTP wrk.

Что такое атака типа «отказ в обслуживании» (DoS):

Отказ в обслуживании (DoS) — это тип атаки, при котором злоумышленник мешает авторизованным пользователям получить доступ к службе. Наиболее распространенный метод DoS заключается в перегрузке службы таким большим количеством трафика или запросов данных, что служба не может отвечать легитимным пользователям до тех пор, пока вредоносный поток не будет прекращен. Мы будем использовать инструмент для тестирования производительности HTTP wrk для эмуляции такого типа атаки.

Что такое бенчмарк в вычислениях:

Согласно Wikipedia, бенчмарк — это:

В вычислениях бенчмарк — это выполнение компьютерной программы, набора программ или других операций для оценки относительной производительности объекта, как правило, путем проведения ряда стандартных тестов и испытаний. Термин «бенчмарк» также часто используется для обозначения самих тщательно разработанных программ для тестирования производительности.

Две ключевые характеристики бенчмарка:

  1. Должен быть воспроизводимым.
  2. Должен быть измеримым.

Что такое wrk:

Для проведения нагрузочного тестирования нашего сайта мы используем wrk, согласно их официальной документации:

wrk — это современный инструмент для тестирования производительности HTTP, способный генерировать значительную нагрузку при работе на одном многоядерном процессоре. Он сочетает многопоточную архитектуру с масштабируемыми системами уведомлений о событиях, такими как epoll и kqueue.

wrk является открытым исходным кодом, но прежде чем использовать его, ознакомьтесь с уведомлением о криптографии по адресу https://github.com/wg/wrk#cryptography-notice

Как установить wrk

Итак, наконец, мы начнем тестирование. Убедитесь, что вам удобно выполнять команды в терминале, поскольку в настоящее время нет графического интерфейса для запуска wrk.

  • Как установить wrk на Mac

    • Установите homebrew, запустив следующую команду в терминале:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    • Чтобы установить wrk, выполните следующую команду в терминале:
brew install wrk

  • Как установить wrk в дистрибутиве Linux Ubuntu

sudo apt-get update
sudo apt-get install wrk

  • Как установить wrk в Windows

Пользователям Windows потребуется сначала установить Ubuntu по этой ссылке и затем выполнить две вышеуказанные команды.

Как провести стресс-тест вашего сайта

Базовое использование wrk выглядит так:

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

Допустимые параметры командной строки:

-c, --connections: общее количество HTTP-соединений, которые нужно поддерживать открытыми, при этом
                   каждый поток обрабатывает N = connections/threads

-d, --duration:    продолжительность теста, например 2s, 2m, 2h

-t, --threads:     общее количество используемых потоков

-s, --script:      скрипт LuaJIT, см. SCRIPTING

-H, --header:      HTTP-заголовок для добавления к запросу, например «User-Agent: wrk»

    --latency:     вывести подробную статистику задержек

    --timeout:     записать таймаут, если ответ не получен в течение
                   указанного времени.

Я проведу бенчмарк в течение 90 секунд, используя 10 потоков и поддерживая открытыми 100000 HTTP-соединений.

wrk -t10 -c100000 -d90s https://davidloor.com --timeout 3s --latency -H 'Client: wrk terminal'

Краткое пояснение того, что я делаю с переданными параметрами:

-t10: Использовать десять отдельных потоков
-c100000: Открыть 100000 соединений
-d90s: Провести тест в течение девяноста секунд
https://davidloor.com Целевой веб-сайт
--timeout 3s: Установить трехсекундный таймаут
--latency: вывести подробную статистику задержек
-H 'Client: wrk terminal': Передать заголовок Client

Таким образом, можно сказать, что стресс-тест пытается эмулировать 100000 пользователей, многократно открывающих главную страницу веб-сайта в течение 90 секунд.

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

Анализ вывода

После выполнения команды я получил следующее:

Running 2m test @ https://davidloor.com
  10 threads and 100000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   528.12ms  527.33ms   2.99s    87.92%
    Req/Sec    20.30     16.93   116.00     74.75%
  Latency Distribution
     50%  356.27ms
     75%  638.27ms
     90%    1.20s 
     99%    2.62s 
  11662 requests in 1.50m, 735.63MB read
  Socket errors: connect 97681, read 117, write 0, timeout 1581
Requests/sec:    129.43
Transfer/sec:      8.16MB

Он дает краткий обзор того, как долго длился тест, и веб-сайта (https://davidloor.com), который тестировался. Он также показывает нормальные параметры распределения для задержки и Req/Sec. Он показывает, что за 1,5 минуты wrk выполнил 11662 запроса и передал 735,63 МБ данных.

Являются ли средние значения Latency и Req/Sec хорошими? Это зависит от каждой конкретной ситуации. Мы всегда должны стараться поддерживать низкую задержку и высокое количество запросов в секунду, и вы должны помнить, что чем больше количество соединений, тем ниже будут эти 2 значения.

Заключения

  1. Вы можете быстро провести стресс-тест своего сайта с помощью wrk. https://github.com/wg/wrk
  2. Команда для запуска стресс-теста после установки wrk: `wrk -t10 -c100000 -d90s https://davidloor.com –timeout 3s –latency -H ‘Client: wrk terminal’`
  3. Запустите команду wrk и одновременно попробуйте загрузить сайт в своем браузере и посмотрите, не испытываете ли вы замедлений.
  4. Существуют бесплатные ресурсы для улучшения производительности вашего веб-сайта без добавления дополнительных ресурсов на сервер(ы), такие как использование бесплатной CDN, например cloudflare.
  5. Если у вас есть CDN, убедитесь, что вы полностью используете ее преимущества.

Отказ от ответственности: Информация, представленная в этой статье в блоге, предназначена только для образовательных целей. Я не несу ответственности за то, как вы используете представленную здесь информацию.

Категории: