Musíte zjistit, která část pravidla tuto chybovou zprávu způsobuje. Pravděpodobně je to -m state
část, ale ne nutně. Různá rozšíření iptables a netfilter musí být zkompilována do binárního uživatelského prostoru iptables a do netfilter v linuxovém jádře. Můžete určit, která část vám chybí, požádáním iptables o informace nápovědy k rozšíření, které testujete. Zde je několik způsobů, jak otestovat různá rozšíření:
$ iptables -m state -h
$ iptables -p icmp -h
$ iptables -j DROP -h
Pokud získáte výstup nápovědy, který obsahuje informace o rozšíření na samém konci výstupu, pak je zkompilován do binárního uživatelského prostoru. Pokud ne, musíte znovu zkompilovat iptables. Pokud to funguje, vyzkoušejte nejjednodušší možné pravidlo, abyste zjistili, zda je rozšíření zahrnuto v prostoru jádra:
$ iptables -A INPUT -m state --state NEW
$ iptables -A INPUT -p icmp
$ iptables -A INPUT -j DROP
(Opatrně s těmito pravidly, poslední, které budete chtít odstranit, protože pravděpodobně klesne více, než chcete!) Když se znovu zobrazí chybová zpráva:No chain/target/match by that name
budete vědět, že konkrétní rozšíření není zkompilováno do vašeho jádra. Budete muset znovu zkompilovat jádro.
Prohlédněte si soubory make v linux/net/ipv6/netfilter
, linux/net/ipv4/netfilter
a linux/net/netfilter
pro možnosti povolení různých rozšíření pro jádro. Pokud jde o uživatelský prostor, myslím, že příslušné soubory make jsou v iptables/extensions
ale myslím, že struktura složek se v novějších verzích trochu změnila.