The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Использование xtables-модуля xt_bpf для фильтрации через BPF в Linux
В ядре Linux 3.9 добавили xt_bpf - аналог нетграф-ноды ng_bpf из  FreeBSD. Без
использования правил iptables на платформе x86_64 BPF-правило демонстрирует
производительность 40K (40 GBps) netperf TCP_STREAM, после вставки 100
BPF-правил производительность составляет 28K.

Используемое BPF-правило:

   iptables -A OUTPUT -m bpf --bytecode '6,40 0 0 14, 21 0 3 2048,48 0 0 25,21 0 1 20,6 0 0 96,6 0 0 0,' -j

При использовании 100 эквивалентных правил через u32  производительность составляет 21K:

   iptables -A OUTPUT -m u32 --u32 '6&0xFF=0x20' -j DROP

Т.е. для достаточно приличного числа ситуаций можно получить как упрощение
правил, так и их ускорение (тем более, что на некоторых платформах доступен
net.core.bpf_jit_enable и инструкции bpf преобразуются в нативный код).

Для желающих использовать в более старых ядрах, доступен патч для ядра
и патч для  iptables.

В оригинале, для формирования байткода BPF автор модуля использует компилятор
(который просто вызывает libpcap), хотя всё что нужно можно получить от
tcpdump, указав ему подходящий интерфейс с DLT_RAW (для чего прекрасно подходит
создаваемый после загрузки модуля ipip.ko интерфейс tunl0).

Пример использования:

   modprobe ipip
   tcpdump -i tunl0 -ddd 'udp' > udp.bpf
   tcpdump -i tunl0 -ddd 'icmp' > icmp.bpf
   iptables -A INPUT -m bpf --bytecode-file udp.bpf  -j LOG --log-prefix "udp: "
   iptables -A INPUT -m bpf --bytecode-file icmp.bpf  -j LOG --log-prefix "icmp: "

В dmesg мы увидим:

   [17453.963938] udp: IN=eth0 OUT= MAC=00:15:17:14:c8:c3:00:30:4f:64:71:92:08:00 SRC=192.168.100.1 DST=192.168.100.2 LEN=237 TOS=0x00 PREC=0x00 TTL=64 ID=63634 PROTO=UDP SPT=53 DPT=8516 LEN=217 
   [17460.203403] icmp: IN=eth0 OUT= MAC=00:15:17:14:c8:c3:00:30:4f:64:71:92:08:00 SRC=192.168.100.1 DST=192.168.100.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=18090 SEQ=1 
 
19.03.2013 , Автор: Roman Timofeev
Ключи: iptables, linux, kernel, bpf / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетные фильтры в Linux: iptables, ipchains

Обсуждение [ RSS ]
  • 1.1, Аноним (-), 12:40, 20/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >    iptables -A OUTPUT -m bpf --bytecode '6,40 0 0 14, 21 0 3 2048,48 0 0 25,21 0 1 20,6 0 0 96,6 0 0 0,' -j

    Весьма очевидное и человеко-читаемое правило, я бы сказал :)

     
     
  • 2.11, Нанобот (?), 00:24, 19/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    там в восьмом опкоде ошибка :)
     

  • 1.5, Ой (?), 12:50, 22/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Он же однопоточный вроде как, этот самый бпф
     
  • 1.6, Anonim (??), 10:09, 24/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Переведите кто-нить. Чего делают эти правила?
     
     
  • 2.7, Andrey Mitrofanov (?), 14:06, 24/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Переведите кто-нить. Чего делают эти правила?

    правИла рулЯт

     

  • 1.8, Клейстер (?), 18:16, 24/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    bpf однопоточный, а вот netfilter - нет.

    вот тут:
    tcpdump -i tunl0 -ddd 'udp' > udp.bpf

    мы компилируем bpf-правило в байткод и сохраняем в udp.bpf

    iptables -A INPUT -m bpf --bytecode-file udp.bpf  -j LOG --log-prefix "udp: "

    (добавили правило вместе с байткодом).

    Вообще, автор модуля планирует отдельную утилиту для компиляции байткода(трюк с tunl0 ему хоть и понравился, но он против).

     
     
  • 2.9, Аноним (-), 17:19, 10/04/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Вообще, автор модуля планирует отдельную утилиту для компиляции байткода

    Уже: http://git.netfilter.org/iptables/commit/?id=1ac30c97c339957b6e3c5cf571de7bc3

     

  • 1.10, Аноним (-), 05:51, 03/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я нечо не понял!!!!
     
     
  • 2.12, Нанобот (?), 00:27, 19/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Я нечо не понял!!!!

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

     
  • 2.13, Анонизмус (?), 21:09, 19/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Кто знает, тот поймет. Большое спасибо за новость. Очень ждал! А то u32 ну совсем уж дубовый...
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру