Перевод правил строк iptables в nftables

Перевод правил строк iptables в nftables

Я переношу правила из iptable в nftable следующим образом:Переход с iptable на nftable

Теперь у меня есть несколько правил блокировки IP-адресов и портов вместе с правилами iptable на основе строк, но с помощью встроенного правила трансляции iptable я могу преобразовать правила из iptable в nftable, но правила на основе строк, которые были на месте в iptable, комментируются в nftables после трансляции. Ниже приведено правило nftable после трансляции

    add rule ip filter INPUT tcp dport 1024-65535 counter accept
    add rule ip filter INPUT udp dport 1024-65535 counter accept
   65535 -j DROP
    # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
    # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
    # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP
    add rule ip filter INPUT icmp type echo-reply ct state new,related,established  counter accept
    add rule ip filter INPUT icmp type echo-request ct state new,related,established  counter accept
    add rule ip filter INPUT icmp type destination-unreachable ct state new,related,established  counter accept
    add rule ip filter INPUT icmp type time-exceeded ct state new,related,established  counter accept

Нужна помощь в том, как преобразовать строковые правила iptable в правила nftable, и если это не удастся, как указано выше, к какому журналу мне обратиться.

решение1

ЕстьВ настоящее время нет эквивалент в nftables,нитьmatch в настоящее время находится в списке неподдерживаемых расширений. Все эти неподдерживаемые расширения (и, вероятно, некоторые поддерживаемые) не будут переведены наnftablesпоскольку они используют особую функцию, которую нельзя выразить только с помощьюnftablesбайт-код (попробуйте nft -a --debug=netlink list rulesetувидеть байт-код) и не реализован в ядре как собственныйnftablesмодуль, поэтому инструмент перевода даже не будет пытаться.

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

В противном случае вы можете просто смешатьnftablesиiptables(включаяiptables-nft) правил, если вы используете разные имена таблиц вnftablesне конфликтовать сiptables-nft(который, вероятно, используется). Пока нет плана по поэтапному отказуiptables(По крайней мереiptables-nftреализация, прекрасно умеющая использовать различные модули xtables, такие какнить).

Здесь таблица tвыбрана так, чтобы она не конфликтовала со таблицей filter.nftablesполучает свою входную цепочку (произвольно называемую c_in) с приоритетом 10, поэтомуiptablesЦепочка INPUT , которая подключается в том же месте, имеет приоритет при фиксированном приоритете 0. Если оставить приоритет равным 0, то получится неопределенный порядок между цепочками (iptables' илиnftables') запускается первым. Это не имеет значения для удаления/принятия правил между таблицами. Случаи, когда это имеет значение, — это когда правила разделяются, как это сделано здесь (но для этого конкретного случая нет ничего особенного в порядке, так что это нормально), и для изменения правил или правил с побочными эффектами: добавление элемента вnftables наборилиiptablesкомпаньонipsetи последующее отбрасывание пакета — это не то же самое, что сначала отбросить пакет (а потом ничего).

nft add table ip t
nft add chain ip t c_in '{ type filter hook input priority 10; policy accept; }'

nft add rule ip t c_in tcp dport 1024-65535 counter accept
nft add rule ip t c_in udp dport 1024-65535 counter accept
nft add rule ip t c_in icmp type echo-reply ct state new,related,established  counter accept
nft add rule ip t c_in icmp type echo-request ct state new,related,established  counter accept
nft add rule ip t c_in icmp type destination-unreachable ct state new,related,established  counter accept
nft add rule ip t c_in icmp type time-exceeded ct state new,related,established  counter accept

iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP

Извините, я не знаю, что делать с:

   65535 -j DROP

что похоже на опечатку или ошибку перевода инструмента.

Когда необходимо взаимодействие между обоими мирами, «сообщения» можно передавать с помощьюМетки. Это тот случай, когда приоритет имеет значение. Например, если действие сброса должно быть выполнено только вnftablesдля целей управления правилами это можно использовать вместо этого, учитывая, чтоiptables' фильтр/INPUT получает приоритет надnftablesздесь не место:

iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j MARK --set-mark 0xdead

И вставьте этоnftablesправило перед правилами короткого замыкания ...established...в местенитьПервоначально правила были такими:

nft add ip t c_in meta mark 0xdead drop

Связанный контент