我在
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.
怎么解决?
注意:我以超级用户身份启动命令
解决方法
您需要确定规则的哪个部分导致该错误消息.它可能是-m州的一部分,但不一定.必须将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
(小心这些规则,你要删除的最后一个,因为它可能会比你想要的更多!)当你再次收到错误消息时:没有链/目标/匹配这个名称你会知道特定的扩展不会编译到您的内核中.您需要重新编译内核.
查看linux / net / ipv6 / netfilter,linux / net / ipv4 / netfilter和linux / net / netfilter中的make文件,了解为内核启用各种扩展的选项.对于用户空间,我认为有问题的make文件是在iptables / extensions中,但我认为文件夹结构在更新的版本中有所改变.