
Я переношу правила из 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