SlideShare a Scribd company logo
Механика DDoS
           Крижановский Александр
              ak@natsys-lab.com




10/23/12
«Механика»
●   Чем в среднем отличается DdoS от flash crowd (не исчерпывающее
    описание и без специальных случаев)
●   Процессы, происходящие с HTTP-акселератором под DdoS
●   Как не надо и как лучше отражать HTTP DDoS
●   Пример — Nginx, но говорим «в целом»
Нормальный HTTP трафик
●   Запросы достаточно большие за счет Cookie и URL (~1KB, часто
    больше)
●   Ответ — Web-страница (десятки килобайт), считанная из файла
●   Сотни или тысячи Keep-Alive соединений (к одному HTTP-
    акселератору), каждое из которых генерирует умеренное число
    запросов
HTTP DDoS трафик
●   Запросы часто сильно меньше (десятки или сотни байт)
●   Ответов сервера сильно меньше, чем получаемых запросов
●   Десятки или сотни тысяч соединений
    ●   много запросов в каждом соединении
    ●   или постоянная переустановка соединений с каждого хоста
Nginx, netstat, grep, fail2ban и др.
●   Посмотреть netstat'ом соединения и добавить правила в Iptables
●   Погрепать access.log и/или error.log и добавить правила в ipset
●   Fail2ban
●   Лимитирование на сервере (limit zone для Nginx)
●   Iptables connlimit и hashlimit


=> HTTP-акселератор + Firewall


Чтение логов – не самая быстрая операция, особенно в условиях
высокой нагрузки
Обработка лимита (Nginx)
epoll_wait(12, {{EPOLLIN, ....}}, 512, 500) = 1
recvfrom(3, "GET / HTTP/1.1rnHost: ....", 1024, 0, NULL, NULL) = 327
// parse HTTP
write(11, “...limiting requests, excess...", 176) = 176
writev(3, [{"HTTP/1.1 503 Service Temporarily Una....", 200}], 1) = 200
sendfile(3, 7, [0], 383)          = 383
recvfrom(3, 0xa1bac0, 1024, 0, 0, 0) = -1 EAGAIN
epoll_wait(12, {{EPOLLIN, ....}}, 512, 500) = 1
recvfrom(3, "", 1024, 0, NULL, NULL) = 0
close(3)                          = 0
Горячая точка (Nginx, без логов)
samples   %         image name           symbol name
496099     1.5719   nginx                ngx_vslprintf
325148     1.0303   nginx                ngx_http_parse_header_line
219699     0.6961   vmlinux              cfq_set_request
202023     0.6401   libc-2.12.so         memcpy
183268     0.5807   libpthread-2.12.so   recv
162710     0.5156   nginx                ngx_linux_sendfile_chain
157504     0.4990   nginx                ngx_http_limit_req_handler
Nginx и DDoS
●   Логировать запросы от ботов дорого
●   Парсить логи тоже дорого
●   Вместо логирования лимитов – простой модуль, добавляющий
    правило в netfilter
Обработка пакетов
●   Параллельность: MSI-X, irq round-
    robin
●   RPS (Receive Packet Steering)
    позволяет «разбрасывать» пакеты
    по softirq на разных ядрах если
    MSI-X недостаточно (или железо
    вообще не может параллелить
    прерывания)
●   RFS (Receive Flow Steering)
    позволяет отправлять пакеты на
    CPU прикладного процесса
●   Улучшают параллельность, но
    ухудшают кэширование
User space vs Kernel
●   Более 15 context switch
●   Kernel/userspace копирования запросов и ответов
●   Zero-copy network IO (splice(2)) не работает в общем случае на чтение
    из сокета
●   Проблема с очередями сокетов все равно остается (парсить HTTP
    нужно синхронно в skb)
Kernel HTTP-акселераторы
●   Первая половина 2000x: TUX (Linux), OpenKETA (FreeBSD), khttpd
    (Linux) и комерческие прокеты


=> Основное узкое место, которое может решить kernel-based HTTP-
сервер – копирование на отправке файла – решается в user space
через sendfile().
L7 DDoS-mitigation HTTP-акселератор:
               специальный случай
●   Нужно минимизировать накладные расходы на обработку запросов от
    ботов
●   Более тесная интеграция с Netfilter
●   Возможность держать до 1 млн. Cоединений:
    ●   Обработка TCP in-order данных сразу, не откладывая в очередь
        (лучше cache hit, меньше расход памяти)
    ●   Per-connection и per-host resource management/QoS
    ●   Желательно блокировать не по IP, а содержимому HTTP запроса
Спасибо!



ak@natsys-lab.com

More Related Content

PDF
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Максим Дунин, Nginx, Inc.
PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Максим Дунин, Nginx, Inc.
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)

What's hot (20)

PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
PDF
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PDF
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
ODP
Константин Осипов (Mail.Ru)
PDF
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
PPT
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
PPTX
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
PDF
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PDF
RootConf 2015
PPTX
Mysql vs postgresql
PDF
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Хранение данных на виниле / Константин Осипов (tarantool.org)
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Константин Осипов (Mail.Ru)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
RootConf 2015
Mysql vs postgresql
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ad

Similar to Механика DDoS (Александр Крижановский) (20)

PDF
DDOS mitigation software solutions
PDF
07 - Web-технологии. Web-сервера
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
специализированные http-демона (Сергей Боченков, Александр Панков)
ODP
Nginx Igor Sysoev
PDF
Web осень 2013 лекция 3
PPT
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
PDF
мои модули и патчи для Nginx. максим дунин. зал 1
PPT
Web весна 2013 лекция 3
PPT
Web осень 2012 лекция 3
PDF
08 - Web-технологии. Архитектура frontend-backend
PPTX
Nginx.pm
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PPT
Воюем за ресурсы (ZFConf2011)
PPTX
DDоS: Практическое руководство к выживанию. (Часть 2: Работа над ошибками)
 
PPTX
DDоS практическое руководство к выживанию (Александр Лямин)
PDF
Ddоs практическое руководство к выживанию А.Лямин
PPTX
DDoS: Практическое руководство к выживанию
 
PPT
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
PDF
Vladimir V Perepelitsa Ae Highload
DDOS mitigation software solutions
07 - Web-технологии. Web-сервера
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
специализированные http-демона (Сергей Боченков, Александр Панков)
Nginx Igor Sysoev
Web осень 2013 лекция 3
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
мои модули и патчи для Nginx. максим дунин. зал 1
Web весна 2013 лекция 3
Web осень 2012 лекция 3
08 - Web-технологии. Архитектура frontend-backend
Nginx.pm
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Воюем за ресурсы (ZFConf2011)
DDоS: Практическое руководство к выживанию. (Часть 2: Работа над ошибками)
 
DDоS практическое руководство к выживанию (Александр Лямин)
Ddоs практическое руководство к выживанию А.Лямин
DDoS: Практическое руководство к выживанию
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Vladimir V Perepelitsa Ae Highload
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Механика DDoS (Александр Крижановский)

  • 1. Механика DDoS Крижановский Александр ak@natsys-lab.com 10/23/12
  • 2. «Механика» ● Чем в среднем отличается DdoS от flash crowd (не исчерпывающее описание и без специальных случаев) ● Процессы, происходящие с HTTP-акселератором под DdoS ● Как не надо и как лучше отражать HTTP DDoS ● Пример — Nginx, но говорим «в целом»
  • 3. Нормальный HTTP трафик ● Запросы достаточно большие за счет Cookie и URL (~1KB, часто больше) ● Ответ — Web-страница (десятки килобайт), считанная из файла ● Сотни или тысячи Keep-Alive соединений (к одному HTTP- акселератору), каждое из которых генерирует умеренное число запросов
  • 4. HTTP DDoS трафик ● Запросы часто сильно меньше (десятки или сотни байт) ● Ответов сервера сильно меньше, чем получаемых запросов ● Десятки или сотни тысяч соединений ● много запросов в каждом соединении ● или постоянная переустановка соединений с каждого хоста
  • 5. Nginx, netstat, grep, fail2ban и др. ● Посмотреть netstat'ом соединения и добавить правила в Iptables ● Погрепать access.log и/или error.log и добавить правила в ipset ● Fail2ban ● Лимитирование на сервере (limit zone для Nginx) ● Iptables connlimit и hashlimit => HTTP-акселератор + Firewall Чтение логов – не самая быстрая операция, особенно в условиях высокой нагрузки
  • 6. Обработка лимита (Nginx) epoll_wait(12, {{EPOLLIN, ....}}, 512, 500) = 1 recvfrom(3, "GET / HTTP/1.1rnHost: ....", 1024, 0, NULL, NULL) = 327 // parse HTTP write(11, “...limiting requests, excess...", 176) = 176 writev(3, [{"HTTP/1.1 503 Service Temporarily Una....", 200}], 1) = 200 sendfile(3, 7, [0], 383) = 383 recvfrom(3, 0xa1bac0, 1024, 0, 0, 0) = -1 EAGAIN epoll_wait(12, {{EPOLLIN, ....}}, 512, 500) = 1 recvfrom(3, "", 1024, 0, NULL, NULL) = 0 close(3) = 0
  • 7. Горячая точка (Nginx, без логов) samples % image name symbol name 496099 1.5719 nginx ngx_vslprintf 325148 1.0303 nginx ngx_http_parse_header_line 219699 0.6961 vmlinux cfq_set_request 202023 0.6401 libc-2.12.so memcpy 183268 0.5807 libpthread-2.12.so recv 162710 0.5156 nginx ngx_linux_sendfile_chain 157504 0.4990 nginx ngx_http_limit_req_handler
  • 8. Nginx и DDoS ● Логировать запросы от ботов дорого ● Парсить логи тоже дорого ● Вместо логирования лимитов – простой модуль, добавляющий правило в netfilter
  • 9. Обработка пакетов ● Параллельность: MSI-X, irq round- robin ● RPS (Receive Packet Steering) позволяет «разбрасывать» пакеты по softirq на разных ядрах если MSI-X недостаточно (или железо вообще не может параллелить прерывания) ● RFS (Receive Flow Steering) позволяет отправлять пакеты на CPU прикладного процесса ● Улучшают параллельность, но ухудшают кэширование
  • 10. User space vs Kernel ● Более 15 context switch ● Kernel/userspace копирования запросов и ответов ● Zero-copy network IO (splice(2)) не работает в общем случае на чтение из сокета ● Проблема с очередями сокетов все равно остается (парсить HTTP нужно синхронно в skb)
  • 11. Kernel HTTP-акселераторы ● Первая половина 2000x: TUX (Linux), OpenKETA (FreeBSD), khttpd (Linux) и комерческие прокеты => Основное узкое место, которое может решить kernel-based HTTP- сервер – копирование на отправке файла – решается в user space через sendfile().
  • 12. L7 DDoS-mitigation HTTP-акселератор: специальный случай ● Нужно минимизировать накладные расходы на обработку запросов от ботов ● Более тесная интеграция с Netfilter ● Возможность держать до 1 млн. Cоединений: ● Обработка TCP in-order данных сразу, не откладывая в очередь (лучше cache hit, меньше расход памяти) ● Per-connection и per-host resource management/QoS ● Желательно блокировать не по IP, а содержимому HTTP запроса