Solución 1:
Primero da un -p opción como -p tcp o -p udp .
Ejemplos:
iptables -A INPUT -p tcp --dport 22 -m estado --estado NUEVO -j DROP
iptables -A INPUT -p udp --dport 53 --sport 1024:65535 -j ACEPTAR
También puedes probar -p all pero nunca he hecho eso y no encuentro mucho apoyo en los ejemplos.
Solución 2:
Se requiere el protocolo (-p) si usa --dport. Ejemplo:
-p tcp
Solución 3:
@dmourati y @diegows ya respondieron su primera pregunta, así que abordaré su segunda pregunta. Y pregunta extra. Y también daré un consejo extra;)
iptables -P solo acepta cadenas INTEGRADAS. En el filter tabla, sería INPUT , OUTPUT y FORWARD cadenas.
El reenvío de puertos no es manejado por el INPUT cadena, por lo que no tiene que abrir el puerto en el INPUT cadena. Lo sí ser manejado por el FORWARD cadena, sin embargo. Ten cuidado con eso.
Consejo adicional: Al aprender y/o solucionar problemas iptables , la salida de iptables-save es cabeza y hombros mejor que la salida de iptables -L -v --line-numbers . Pruébalo, te sorprenderás gratamente :)
Solución 4:
Otra posible solución es que te olvides de ejecutar como root. Me encontré con esto cuando usaba el tutorial de 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
Solución 5:
Si iptables informa que usa nftables , uno necesita usar iptables-legacy en su lugar.
Por ejemplo:
Usa iptables-legacy -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
En lugar de iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
Es una pregunta un poco antigua, pero esa es la primera en los resultados de búsqueda.