我正在通过以下方式将规则从 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
。nftablesc_in
以优先级 10获取其输入链(任意称为),因此iptables挂在同一位置的 INPUT 链以其固定优先级 0 优先。将优先级保留为 0 会导致链 (iptables' 或者nftables') 首先运行。表之间删除/接受规则并不重要。真正重要的情况是像这里那样分割规则时(但对于这种特定情况,顺序没有什么特别的,所以没关系),以及更改规则或具有副作用的规则:在nftables 放或一个iptables伴侣IP集然后丢弃数据包与先丢弃数据包(然后什么也不丢弃)不同。
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' 过滤器/输入的优先级高于nftables't c_in 这里:
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