Devi capire quale parte della regola sta causando quel messaggio di errore. Probabilmente è il -m state
parte, ma non necessariamente. Le varie estensioni di iptables e netfilter devono essere compilate nel binario dello spazio utente di iptables e in netfilter nel kernel di Linux. Puoi determinare quale parte ti manca chiedendo a iptables le informazioni di aiuto sull'estensione che stai testando. Ecco alcuni modi per testare le varie estensioni:
$ iptables -m state -h
$ iptables -p icmp -h
$ iptables -j DROP -h
Se ottieni un output di aiuto che include informazioni sull'estensione nella parte inferiore dell'output, viene compilato nel binario dello spazio utente. In caso contrario, è necessario ricompilare iptables. Se funziona, prova la regola più semplice possibile per vedere se l'estensione è inclusa nello spazio del kernel:
$ iptables -A INPUT -m state --state NEW
$ iptables -A INPUT -p icmp
$ iptables -A INPUT -j DROP
(Attenzione con queste regole, l'ultima che vorrai rimuovere perché probabilmente CADRÀ più di quanto vorresti!) Quando ricevi di nuovo il messaggio di errore:No chain/target/match by that name
saprai che quella particolare estensione non è compilata nel tuo kernel. Dovrai ricompilare il tuo kernel.
Guarda i file make in linux/net/ipv6/netfilter
, linux/net/ipv4/netfilter
e linux/net/netfilter
per le opzioni sull'abilitazione di varie estensioni per il kernel. Per lo spazio utente, penso che i file make in questione siano in iptables/extensions
ma penso che la struttura delle cartelle sia leggermente cambiata nelle versioni più recenti.