Может ли кто-нибудь объяснить взаимодействие между 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) имеет хорошую функциональность в отбрасывании и изменении пакетов, но хук-пойнт не так удобен.