Фильтрация пакетов с помощью Netfilter NFQUEUE и Berkeley Packet Filter (BPF)

Я только что прочитал в этих ответах про два варианта разработки пакетных фильтров в linux.

Первый использует iptables и netfilter, вероятно, с NFQUEUE и библиотека libnetfilter_queue.

Во-вторых, с помощью BPF (Berkeley Packet Filter), который кажется, что в быстром чтении есть аналогичные возможности для целей фильтрации.

Итак, какой из этих вариантов является лучшим способом создания фильтра пакетов? Каковы различия? Мое программное обеспечение будет работать как прокси-шлюз или «человек посередине», который должен получать пакет с одного компьютера (с адресом назначения на другой, а не с локальным адресом фильтра) и отправлять его через некоторое время. фильтрация.

Большое спасибо!


person Reflection    schedule 11.11.2014    source источник
comment
Я, вероятно, выберу netfilter/iptables, так как с архитектурной точки зрения я думаю, что это лучше, чем B/PF. Просто укажу пример: мне нравится порядок переводов в netfilter с цепочками {PRE|POST}ROUTING, поскольку они не конфликтуют с цепочками/правилами брандмауэра, в отличие от BFP, порядок которых странный.   -  person Diosney    schedule 12.11.2014
comment
Спасибо. Кстати, если я хочу выпустить готовое программное обеспечение (которое не требует настройки ОС, такой как настройка правил брандмауэра, а только простую установку), не лучше ли использовать bpf? однако мне нужно больше информации о различиях, так как это не главное соображение   -  person Reflection    schedule 12.11.2014
comment
Может быть, это и правда проще, но это не всегда хорошо.   -  person Diosney    schedule 12.11.2014
comment
Кстати, разработка в BPF тоже простая или только архитектура?   -  person Reflection    schedule 12.11.2014


Ответы (1)


Хотя мое понимание ограничено теоретическим, я кое-что прочитал во время отладки сетевой реализации Kubernetes и, таким образом, могу попытаться ответить на этот вопрос.

В целом, и netfilter, и eBPF (преемник BPF) реализуют виртуальную машину, которая выполняет некоторую логику при обработке пакетов. Реализация netfilter, по-видимому, стремится к совместимости с предыдущей реализацией iptables, являясь, по сути, более производительным преемником iptables.

Однако при использовании iptables по-прежнему возникают проблемы с производительностью, особенно при наличии больших наборов правил iptables. Структура eBPF может облегчить некоторые из этих проблем с производительностью; конкретно:

  • eBPF можно разгрузить на «умный сетевой адаптер»
  • eBPF может быть структурирован для более эффективного поиска правил

Хотя изначально он использовался для сетевой обработки, eBPF также используется для инструментовки ядра (sysdig, iovisor). Он имеет гораздо больший набор вариантов использования, но из-за этого, вероятно, гораздо более сложная кривая обучения.

Итак, резюмируя:

  • Используйте то, с чем вы знакомы, если вы не столкнулись с проблемами производительности
  • Посмотрите на eBPF

Актуальны:

Примечания:

  • eBPF является преемником cBPF и заменил его в ядре.
  • Я ссылаюсь на eBPF явно здесь по привычке
person Andrew Howden    schedule 18.03.2019