我在我的linuxembedded式系统上构build并安装了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,我会得到follwing错误:
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.
如何解决它?
注意:我以超级用户的身份启动命令
您需要确定规则的哪一部分导致了该错误消息。 这可能是-m state部分,但不一定。 iptables和netfilter的各种扩展必须编译到iptables用户空间二进制文件和Linux内核的netfilter中。 你可以通过向iptables询问你正在testing的扩展的帮助信息来确定你错过了哪一部分。 以下是testing各种扩展的一些方法:
$ 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/netfilter , linux/net/ipv4/netfilter和linux/net/netfilter的make文件来查看为内核启用各种扩展的选项。 对于用户空间,我认为有问题的make文件在iptables/extensions但是我认为在更新的版本中文件夹结构已经改变了一些。