Ř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í.