Soluzione 1:
Prima dai un -p opzione come -p tcp o -p udp .
Esempi:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
iptables -A INPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT
Puoi anche provare -p all ma non l'ho mai fatto e non trovo troppo supporto per questo negli esempi.
Soluzione 2:
Il protocollo (-p) è richiesto se usi --dport. Esempio:
-p tcp
Soluzione 3:
@dmourati e @diegows hanno già risposto alla tua prima domanda, quindi affronterò la tua seconda domanda. E domanda bonus. E aggiungerò anche un consiglio bonus;)
iptables -P solo accetta catene INCORPORATE. Nel filter tabella, sarebbe INPUT , OUTPUT e FORWARD catene.
Il port forwarding non viene gestito dal INPUT chain, quindi non devi aprire la porta nel INPUT catena. Sì essere gestito dal FORWARD catena, però. Fai attenzione.
Suggerimento bonus: Durante l'apprendimento e/o la risoluzione dei problemi iptables , l'output di iptables-save è testa e spalle migliore dell'output di iptables -L -v --line-numbers . Provalo, rimarrai piacevolmente sorpreso :)
Soluzione 4:
Un'altra possibile soluzione è che ti stai dimenticando di eseguire come root. Mi sono appena imbattuto in questo durante l'utilizzo del tutorial debian
$ 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
Soluzione 5:
Se iptables segnala che utilizza nftables , è necessario utilizzare iptables-legacy invece.
Per esempio:
Usa iptables-legacy -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
Invece di iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
È una domanda vecchia, ma è la prima nei risultati di ricerca.