Como corrigir “iptables: sem cadeia / alvo / correspondência com esse nome”?

4

Eu construí e instalei o iptables no meu sistema embarcado linux. Se eu listar todas as regras, tudo funciona bem:

#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

Mas, se eu adicionar uma nova regra para bloquear o icmp ping, receberei o seguinte erro:

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.

Como consertar isso?

Nota: Estou lançando o comando como superusuário

    
por aldo85ita 16.07.2013 / 16:50

1 resposta

7

Você precisa descobrir qual parte da regra está causando essa mensagem de erro. É provavelmente a parte -m state , mas não necessariamente. As várias extensões para iptables e netfilter devem ser compiladas no binário userspace do iptables e no netfilter no kernel do Linux. Você pode determinar qual parte está faltando, pedindo ao iptables as informações de ajuda na extensão que está testando. Aqui estão algumas maneiras de testar as várias extensões:

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

Se você obter uma saída de ajuda que inclua informações sobre a extensão na parte inferior da saída, ela será compilada no binário userspace. Se não, então você precisa recompilar o iptables. Se isso funcionar, tente a regra mais simples possível para ver se a extensão está incluída no espaço do kernel:

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

(Cuidado com essas regras, a última que você vai querer remover porque provavelmente vai DROP mais do que você quer!) Quando você receber a mensagem de erro novamente: No chain/target/match by that name você saberá que a extensão específica não é compilado em seu kernel. Você precisará recompilar seu kernel.

Examine os arquivos de criação em linux/net/ipv6/netfilter , linux/net/ipv4/netfilter e linux/net/netfilter para opções de ativação de várias extensões para o kernel. Para o userspace, acho que os arquivos make em questão estão em iptables/extensions , mas acho que a estrutura da pasta mudou um pouco nas versões mais recentes.

    
por 18.07.2013 / 18:57