如何修复“iptables:没有该名称的链/目标/匹配”?

如何修复“iptables:没有该名称的链/目标/匹配”?

我在我的 Linux 嵌入式系统上构建并安装了 iptables。如果我列出所有规则,则一切正常:

#iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

但是,如果我添加一条新规则来阻止 icmp ping,我将收到以下错误:

iptables -A INPUT -i eth0 -p icmp --icmp-type any -s 0/0 -d 10.20.3.179 -m state --state NEW,ESTABLISHED,RELATED -j DROP
iptables: No chain/target/match by that name.

如何修复?

注意:我以超级用户身份启动命令

答案1

您需要找出规则的哪个部分导致了该错误消息。可能是该-m state部分,但不一定。iptables 和 netfilter 的各种扩展必须编译到 iptables 用户空间二进制文件和 Linux 内核中的 netfilter 中。您可以通过向 iptables 询问您正在测试的扩展的帮助信息来确定您缺少哪个部分。以下是测试各种扩展的一些方法:

$ iptables -m state -h
$ iptables -p icmp -h
$ iptables -j DROP -h

如果您获得的帮助输出在输出的最底部包含有关扩展的信息,则表明它已编译到用户空间二进制文件中。如果没有,则需要重新编译 iptables。如果可行,请尝试最简单的规则来查看扩展是否包含在内核空间中:

$ iptables -A INPUT -m state --state NEW
$ iptables -A INPUT -p icmp
$ iptables -A INPUT -j DROP

(小心这些规则,最后一个规则你应该删除,因为它可能会比你希望的删除更多!)当你再次收到错误消息时:No chain/target/match by that name你会知道特定的扩展没有编译到你的内核中。你需要重新编译你的内核。

查看linux/net/ipv6/netfilterlinux/net/ipv4/netfilter和中的 make 文件linux/net/netfilter,查找启用内核各种扩展的选项。对于用户空间,我认为有问题的 make 文件在,iptables/extensions但我认为文件夹结构在较新的版本中有所改变。

答案2

我正在使用 buildroot 并且遇到了同样的问题。

我发现内核中有很多 iptables 选项没有被选中。找到 linux.config 文件并启用所需的选项。例如,要启用 TARGET_MASQUERADE:

改变这个:

# CONFIG_IP_NF_TARGET_MASQUERADE is not set

更改为:

CONFIG_IP_NF_TARGET_MASQUERADE=y

相关内容