Может ли кто-нибудь объяснить взаимодействие между iptables, nftables и bpf?

Я работаю в Ubuntu 20.10, пытаясь настроить маршрутизацию для своей виртуальной сети, и я не понимаю взаимодействия между тремя основными типами технологий брандмауэров, используемых в современных дистрибутивах Linux, а именно:

  • nftсетевой фильтр
  • пакетный фильтр Беркли

Может кто ответит на следующее:

  • Как проверить, какие из них установлены?
  • Могут ли все 3 брандмауэра мирно сосуществовать на одном клиенте? Если нет, то как я могу безопасно удалить тот или иной?
  • Какие уровни перевода включены? например, если у меня есть исполняемый файл на Ubuntu 20.10, это на самом деле iptablesбрандмауэр или интерфейс для апи?
  • Есть ли программа для bpfAPI, который предназначен для обычных задач брандмауэра? (Я видел много программ трассировки, но ни одной из них не предназначено для брандмауэра)

Кроме того, чтобы усложнить ситуацию, я составил свой собственный 5.10.11ядро на основе 5.8.0-40-genericфайл со всеми включенными правилами. Может ли это потенциально создать какие-либо препятствия для меня в будущем?

Поскольку большинство модулей скомпилированы в ядре, это не дает типичного вывода, но я все равно опубликую его. я могу опубликовать .configесли бы это помогло.

вот мой текущий lsmodкак это относится к netfilter:

      # lsmod | egrep 'net|filter|table|nft|ipt|bpf'

vmnet                  53248  13
ipt_REJECT             16384  0
nft_compat             20480  0
dell_wmi_descriptor    20480  2 dell_wmi,dell_smbios
ip_tables              28672  0
x_tables               45056  10 xt_conntrack,xt_cgroup,nft_compat,xt_multiport,xt_tcpudp,xt_owner,ipt_REJECT,ip_tables,xt_MASQUERADE,xt_mark

Вот мои текущие правила переадресации IP:

      # sysctl -a | grep forward | grep '= 1'

sysctl: reading key "kernel.spl.hostid"
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.eno1.forwarding = 1
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.ovs-netdev.forwarding = 1
net.ipv4.conf.ovsdpdkbr0.forwarding = 1
net.ipv4.conf.tunl0.forwarding = 1
net.ipv4.conf.virbr0.forwarding = 1
net.ipv4.conf.virbr0-nic.forwarding = 1
net.ipv4.conf.vmnet1.forwarding = 1
net.ipv4.conf.vmnet8.forwarding = 1
net.ipv4.conf.vnet0.forwarding = 1
net.ipv4.conf.vnet1.forwarding = 1
net.ipv4.conf.vnet2.forwarding = 1
net.ipv4.conf.vnet3.forwarding = 1
net.ipv4.conf.vnet4.forwarding = 1
net.ipv4.conf.wlp110s0.forwarding = 1
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1

Я заметил это сообщение в dmesgи подумал, что это может быть поучительно:

      nf_conntrack: default automatic helper assignment has been turned off for security reasons and CT-based  firewall rule not found. Use the iptables CT target to attach helpers instead.

1 ответ

  • Iptables — это интерфейс для сетевых фильтров ядра.

  • Все эти клиенты используют одни и те же хуки netfilter для вынесения вердиктов по пакетам, я не думаю, что они мешают друг другу.

BPF для обычных задач брандмауэра — это bpfilter, но он относительно новый и до сих пор не слился с основным ядром, насколько мне известно.

То, что у нас сейчас есть, это xt-bpf в iptables-extensions, я думаю, это то, что вам нужно.

Крючок Netfilter ядра не имеет хорошей поддержки BPF, какой позор... BPF управления трафиком (tc-ebpf) имеет хорошую функциональность в отбрасывании и изменении пакетов, но хук-пойнт не так удобен.

Другие вопросы по тегам