Может ли кто-нибудь объяснить взаимодействие между iptables, nftables и bpf?
Я работаю в Ubuntu 20.10, пытаясь настроить маршрутизацию для своей виртуальной сети, и я не понимаю взаимодействия между тремя основными типами технологий брандмауэров, используемых в современных дистрибутивах Linux, а именно:
-
nft
сетевой фильтр - пакетный фильтр Беркли
Может кто ответит на следующее:
- Как проверить, какие из них установлены?
- Могут ли все 3 брандмауэра мирно сосуществовать на одном клиенте? Если нет, то как я могу безопасно удалить тот или иной?
- Какие уровни перевода включены? например, если у меня есть исполняемый файл на Ubuntu 20.10, это на самом деле
iptables
брандмауэр или интерфейс для апи? - Есть ли программа для
bpf
API, который предназначен для обычных задач брандмауэра? (Я видел много программ трассировки, но ни одной из них не предназначено для брандмауэра)
Кроме того, чтобы усложнить ситуацию, я составил свой собственный
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) имеет хорошую функциональность в отбрасывании и изменении пакетов, но хук-пойнт не так удобен.