Процветание раскрывает наши пороки, а бедствия - наши добродетели.

Глядя, как мама примеряет новую шубу из натурального меха, ...

Google, Microsoft, Twitter и Facebook основали проект по обеспечению переносимости данных
Fri, 20 Jul 2018 20:44:55 +0300

Началось формирование ASan-сборок Firefox для выявления проблем при работе с памятью
Fri, 20 Jul 2018 09:23:16 +0300

В Google ведётся обсуждение возможной замены Android на ОС Fuchsia
Thu, 19 Jul 2018 23:45:05 +0300

В ночные сборки Firefox добавлен WebRender, использующий GPU для отрисовки web-страниц
Thu, 19 Jul 2018 20:50:32 +0300

Евросоюз оштрафовал Google на 4.3 млрд евро за навязывание своих сервисов в Android
Wed, 18 Jul 2018 20:47:49 +0300

В компилятор LDC языка D добавлена поддержка WebAssembly
Wed, 18 Jul 2018 10:36:25 +0300

Slackware Linux исполнилось 25 лет
Tue, 17 Jul 2018 08:16:55 +0300

Mozilla, Cloudflare, Fastly и Apple работают над применением шифрования для SNI
Mon, 16 Jul 2018 22:05:36 +0300

Оценка безопасности новой системы контейнерной изоляции Nabla
Mon, 16 Jul 2018 10:58:41 +0300

Гвидо ван Россум решил отстраниться от руководства проектом Python
Thu, 12 Jul 2018 20:23:38 +0300

Debian вошёл в консультативный cовет проекта KDE
Thu, 12 Jul 2018 12:43:41 +0300

Для Thunderbird и SeaMonkey введён в строй отдельный каталог дополнений
Tue, 10 Jul 2018 22:22:36 +0300

Airbus и IBM подготовили интеллектуальный помощник для МКС, работающий под управлением Ubuntu
Tue, 10 Jul 2018 11:33:35 +0300

Концепт камеры для печати фотографии в виде комиксов
Mon, 09 Jul 2018 09:58:50 +0300

DirectX Shader Compiler портирован для Linux и macOS
Tue, 03 Jul 2018 20:58:59 +0300

Новости OPENNET
Новости

Марек Майковски (Marek Majkowski), разработчик ядра Linux, работающий в компании CloudFlare, опубликовал результаты оценки производительности различных решений на базе ядра Linux для отбрасывания огромного числа пакетов, поступающих в ходе DDoS-атаки. Наиболее высокопроизводительный метод позволил отбрасывать потоки запросов, поступающие с интенсивностью 10 млн пакетов в секунду.

Наибольшей производительности удалось добиться при использовании подсистемы eBPF, представляющей встроенный в ядро Linux интерпретатор байткода, позволяющий создавать высокопроизводительные обработчики входящих/исходящих пакетов с принятием решений об их перенаправлении или отбрасывании. Благодаря применению JIT-компиляции, байткод eBPF на лету транслируется в машинные инструкции и выполняется с производительностью нативного кода. Для блокировки использовался вызов XDP_DROP, предоставляемый подсистемой XDP (eXpress Data Path), позволяющей запускать BPF-программы на уровне сетевого драйвера, с возможностью прямого доступа к DMA-буферу пакетов и на стадии до выделения буфера skbuff сетевым стеком.

Блокировка осуществлялась при помощи загруженного в ядро простого BPF-приложения (около 50 строк кода), написанного на подмножестве языка C и скомпилированного при помощи Clang. Для загрузки скомпилированного модуля eBPF применяется недавно появившаяся в iproute2 команда "xdp obj" ("ip link set dev ext0 xdp obj xdp-drop-ebpf.o "), позволяющая обойтись без написания специализированного BPF-загрузчика. Для просмотра статистики применялась команда "ethtool -S ". Логика блокировки была зашита непосредственно в BPF-приложение, например, блокируемые IP-подсеть, порт назначения и тип протокола были определены через условные операторы (системы типа bpfilter и Cilium умеют генерировать BPF-программы на основе высокоуровневых правил фильтрации):


   if (h_proto == htons(ETH_P_IP)) {
       if (iph->protocol == IPPROTO_UDP
           && (htonl(iph->daddr) & 0xFFFFFF00) == 0xC6120000 //    198.18.0.0/24
           && udph->dest == htons(1234)) {
           return XDP_DROP;
       }
   }

Другие опробованные методы блокировки:

  • Отбрасывание пакетов путём создания приложения-заглушки, принимающего запросы на целевом сетевом порту, но не выполняющего каких-либо действий ("s.bind(("0.0.0.0", 1234))" и бесконечный цикл с "s.recvmmsg()" - использование recvmmsg вместо recvmsg важно с точки зрения снижения числа системных вызовов, в свете накладных расходов при включении в ядре защиты от уязвимости Meltdown). Производительность такого решения составила всего 174 тысячи пакетов в секунду, при этом узким местом было не переключение контекста и само приложение (нагрузка была 27% sys и 2% userspace), а полная утилизация второго ядра CPU при обработке SOFTIRQ.
  • Большие накладные расходы также возникали из-за ведения ядром таблиц отслеживания соединений (conntrack), отключение которых при помощи правила "iptables -t raw -I PREROUTING -d 198.18.0.12 -p udp -m udp --dport 1234 -j NOTRACK " позволило поднять производительность почти в два раза, до 333 тысяч пакетов в секунду. Дополнительное применение режима SO_BUSY_POLL подняло скорость обработки до 470 тысяч пакетов в секунду.

  • Использование BPF с привязкой к сетевому сокету и запуском на уровне ядра (как с обычным BPF, так и с eBPF). Специально написанное BPF-приложение bpf-drop, подключающее обработчик для фильтрации пакетов к сокету через вызов "setsockopt(SO_ATTACH_FILTER)", продемонстрировало производительность всего 512 тысяч пакетов в секунду (в 20 раз меньше, чем BPF-обработчик на базе XDP). Причиной низкой производительности, как и в первом рассмотренном методе, стали большие накладные расходы при обработке SOFTIRQ.
  • Применение операции DROP в iptables в цепочке INPUT (после обработки маршрутизации). При использовании следующих правил
  • 
       iptables -t raw -I PREROUTING -d 198.18.0.12 -p udp -m udp --dport 1234 -j NOTRACK
       iptables -I INPUT -d 198.18.0.12 -p udp --dport 1234 -j DROP
    

    удалось добиться производительности 608 тысяч пакетов в секунду.

  • Использование iptables DROP на стадии до обработки маршрутизации (PREROUTING). Замена в правиле "-I INPUT" на "-I PREROUTING -t raw" подняло производительность почти в три раза до 1.688 млн пакетов в секунду.
  • Применение операции DROP в nftables на стадии до выполнения стадии отслеживания соединений (для обхода CONNTRACK применяется "hook ingress"):
  • 
       nft add table netdev filter
       nft -- add chain netdev filter input { type filter hook ingress device vlan100 priority -500 \; policy accept \; }
       nft add rule netdev filter input ip daddr 198.18.0.0/24 udp dport 1234 counter drop
       nft add rule netdev filter input ip6 daddr fd00::/64 udp dport 1234 counter drop
    

    Производительность предложенного решения составила 1.53 млн пакетов в секунду, что немного отстаёт от iptables DROP с PREROUTING.

  • Применение операции DROP в ingress-обработчике tc позволило добиться производительности в 1.8 млн пакетов в секунду.
  • 
       tc qdisc add dev vlan100 ingress
       tc filter add dev vlan100 parent ffff: prio 4 protocol ip u32 match ip protocol 17 0xff match ip dport 1234 0xffff match ip dst 198.18.0.0/24 flowid 1:1 action drop
       tc filter add dev vlan100 parent ffff: protocol ipv6 u32 match ip6 dport 1234 0xffff match ip6 dst fd00::/64 flowid 1:1 action drop
    

63.4888 73.9327 0.5645 9.3656

НОВОСТИ: Google, Microsoft, Twitter и Facebook основали проект по обеспеч ... Fri, 20 Jul 2018 20:44:55 +0300

Компании Google, Microsoft, Twitter и Facebook анонсировали совместную инициативу Data Transfer Project (DTP), в рамках которой развивается набор спецификаций, моделей данных, протоколов и открытых фреймворков для организации переноса данных между провайдерами разных online-сервисов. Развиваемые в рамках проекта клиентские и серверные библиотеки, API, адаптеры переноса данных и аутентификации распространяются под лицензией Apache 2.0.

???????@Mail.ru Opera Firefox INFOBOX - хостинг Google Chrome