Recuerdo que cuando apenas estaba familiarizado con el firewall iptables tendía a crear reglas a tutiplén, en verso y creo que hasta con rima. Con la experiencia a base de darte tortazos vas corrigiendo errores y tiendes a optimizar recursos, especialmente tiempo.
Imaginemos que queremos definir una regla que permita acceso en los puertos 80,443 y 587 utilizando protocolo TCP. Forma poco productiva de hacerlo:
iptables -A INPUT -p tcp -dport 80 -j ACCEPT iptables -A INPUT -p tcp -dport 443 -j ACCEPT iptables -A INPUT -p tcp -dport 587 -j ACCEPT
Si quisiéramos crear una regla para los puertos del 1024 al 2048 tendríamos una auténtica pesadilla ante nosotros:
iptables -A INPUT -p tcp -dport 1024 -j ACCEPT iptables -A INPUT -p tcp -dport 1025 -j ACCEPT iptables -A INPUT -p tcp -dport 1026 -j ACCEPT iptables -A INPUT -p tcp -dport 1027 -j ACCEPT ...
El parámetro multiport en iptables simplifica la tarea de definir reglas que afecten a varios puertos. Por ejemplo, para permitir el acceso a nuestra máquina en un rango de puertos TCP de 1024 a 2048, haríamos:
iptables -A INPUT -p tcp --match multiport --dports 1024:2048 -j ACCEPT
Si por el contrario quisiéramos dar únicamente acceso a varios puertos individuales, podemos agruparlos:
iptables -A INPUT -p tcp --match multiport --dports 80,443,587 -j ACCEPT
Especial atención al protocolo que definimos en la regla, ya que en este caso es únicamente TCP. Para UDP tendremos que hacer otra regla aparte, por ejemplo:
iptables -A INPUT -p udp --match multiport --dports 80,443,587 -j ACCEPT
Esto se debe a que si especificamos dports (destination ports) no es compatible con definir varios protocolos en la misma regla. Lo mismo se aplica para sports (source ports).