Řešení 1:
Nejprve zadejte -p možnost jako -p tcp nebo -p udp .
Příklady:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
iptables -A INPUT -p udp --dport 53 --sport 1024:65535 -j PŘIJÍMAT
Můžete také zkusit -p all ale nikdy jsem to nedělal a v příkladech pro to nenacházím příliš velkou podporu.
Řešení 2:
Pokud používáte --dport, je vyžadován protokol (-p). Příklad:
-p tcp
Řešení 3:
@dmourati a @diegows již odpověděli na vaši první otázku, takže se budu zabývat vaší druhou otázkou. A bonusová otázka. A hodím i bonusový tip;)
iptables -P pouze akceptuje VESTAVNÉ řetězy. V filter tabulka, to by bylo INPUT , OUTPUT a FORWARD řetězy.
Přesměrování portů není řešeno INPUT řetězec, takže nemusíte otevírat port v INPUT řetěz. Má zpracuje FORWARD ale řetěz. Dejte si na to pozor.
Bonusový tip: Při učení a/nebo odstraňování problémů iptables , výstup iptables-save je hlavy a ramena lepší než výstup iptables -L -v --line-numbers . Zkuste to, budete mile překvapeni :)
Řešení 4:
Dalším možným řešením je, že zapomínáte spustit jako root. Právě jsem na to narazil při používání tutoriálu k debianu
$ iptables -t nat -p tcp -I PREROUTING --src 0/0 --dst 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
iptables v1.8.2 (nf_tables): unknown option "--dport"
$ sudo iptables -t nat -I PREROUTING --src 0/0 --dst 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080
# OK
Řešení 5:
Pokud iptables hlásí, že používá nftables , je třeba použít iptables-legacy místo toho.
Například:
Použijte iptables-legacy -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
Místo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
Je to trochu stará otázka, ale ve výsledcích vyhledávání je první.