¿Necesitamos cerrar un puerto en iptable cuando ningún proceso escucha en este puerto específico?

Mi experiencia dice: sí. Deja todo lo que no necesites.

Dos razones para eso:
1. Si su servidor es pirateado, por lo general el hack script / atacante necesita comunicarse de alguna manera con el servidor, por lo que necesitan un puerto. Muchos exploits se transmiten bajo el supuesto de que esto funcionará.

2. A veces, los procesos regulares se comportan mal o usted puede configurarlos incorrectamente o puede haber otros problemas. Si registra y elimina el tráfico no deseado, solo sabrá mejor sobre lo que está sucediendo en su sistema.

Aún así, la mejor manera de lograrlo con iptables es probablemente utilizar la política predeterminada DROP / REJECT y permitir justo lo que necesita.

PD: Tenía / todavía tengo algunos sistemas, donde no uso esta técnica y seguirá funcionando. Siempre depende de ti decidir, porque tienes que lidiar con las consecuencias que.

No.
Los firewalls basados ​​en reglas son una admisión de que ha perdido el control de su red. O, por el contrario, son un sistema redundante de correas y tirantes para detener los controles de acceso en caso de error. O un sistema de defensa puntual para proteger algún recurso crítico antiguo que no implementa el control de acceso o que aún es vulnerable al ping de la muerte. No son una defensa perimetral confiable, excepto para filtrar el ruido, porque hay muchas formas de evitarlos: abrir puertos de servidor web, correo electrónico, redes 3G …

Normalmente, un kernel de Linux responderá con RST a paquetes SYN en un puerto cerrado. Agregar iptables REJECT hará lo mismo. Agregar iptables DROP simplemente no responderá: ponga su dispositivo en modo oculto para que nadie pueda detectarlo. Excepto que debe responder a los paquetes ARP en la LAN; de lo contrario, la red no funcionará. Entonces, si realmente desea hacer un firewall al 100% de un dispositivo, desconecte el cable.

Si suelta todos los paquetes, excepto los que están en un puerto abierto, hace que las huellas digitales de nmap sean un poco más difíciles. Pero si tiene un servidor web o un servidor SSH en ejecución, los atacantes sabrán cuál es su sistema a partir de los banners.

Agregar una regla de iptable lo protegerá contra un proceso desfavorable sin privilegios que escucha en un puerto sin privilegios (superior a 1024). Un proceso privilegiado (especialmente si está instalado como un paquete) probablemente crearía una regla de iptables para permitir el acceso.
Pero como la mayoría de los usuarios domésticos están detrás de NAT en IPv4 y dependen del seguimiento de la conexión y el reenvío de puertos, la mayoría del malware actualmente depende de las conexiones salientes para establecer contacto en lugar de abrir un puerto aleatorio. La regla de seguimiento de conexión habitual en iptables permitiría la respuesta, incluso si el puerto entrante estaba bloqueado.

La práctica estándar es negar todo y luego permitir lo que se necesita. Esto no lo hará seguro, pero nada lo hará. El objetivo del firewall es hacer que sea más difícil infectar sus sistemas y que sea más difícil propagar una infección entre los sistemas. Como cualquier otra cosa que hagas, no es una panacea.

Mi objetivo de seguridad es cerrar todos los puertos y permitir los que solo son necesarios.

Nada puede usar el puerto ahora, pero no puede decir lo mismo mañana. Un comando simple como

python -m SimpleHTTPServer 9876

puede hacer un escenario troyano en su servidor