Fedora 24: los puertos se muestran como abiertos cuando se escanean desde el server, pero se cierran cuando se los mapea desde afuera

Tengo un server Fedora 24, que sirve un proyecto Angular2. Angular2 abre automáticamente los puertos 3000 y 3001 una vez que se inicia el service. Sin embargo, aunque ejecutar nmap localhost muestra que los puertos están abiertos, cuando ejecuto un nmap desde una computadora remota, estos puertos se muestran como cerrados.

¿Existe una configuration de iptables que pueda usar para abrir estos puertos públicamente, quizás? O algo similar?

Intenté correr:

 iptables -A OUTPUT -p tcp -m tcp --dport 3000 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 3001 -j ACCEPT 

Pero esto no ha ayudado y los puertos permanecen cerrados cuando se escanean desde afuera, y no puedo ver el contenido servido (las requestes internas funcionan bien).

Salida de netstat --an | egrep "3000|3001" netstat --an | egrep "3000|3001" :

 tcp6 0 0 :::3000 :::* LISTEN tcp6 0 0 :::3001 :::* LISTEN` 

Un curl a la dirección IP 'externa' del server funciona bien internamente pero no funciona cuando se ejecuta desde otras máquinas.

Al final, la solución fue ejecutar el siguiente command:

 firewall-cmd --zone=FedoraServer --add-port=3000/tcp 

Parece que en Fedora 24, o Fedora 24 tal como está configurado en linodes quizás, iptables no tiene una input TCP.

A juzgar por la descripción, el problema parece ser que el server de security del server bloquea las requestes entrantes a los puertos de desarrollo angular. Las configuraciones del cortafuegos pueden variar de bastante simples a increíblemente complejas, tenga cuidado y asegúrese de comprender lo que está haciendo.

Una vez dicho esto, la solución más probable es abrir los puertos en su firewall, como correctamente planteó la hipótesis. Tanto el tráfico entrante como el saliente deben permitirse para que un cliente pueda usarlo. El tráfico saliente a menudo no se filtra, por lo que puede dejarlo tal como está. Puede ser suficiente simplemente cambiar OUTPUT a INPUT en sus commands de iptables para que las cosas funcionen.

Si eso no lo hace (o mejor aún, antes de probar lo anterior), eche un vistazo a la salida de iptables -nvL --line-numbers y iptables -nvL --line-numbers reglas similares a las que está por agregar. Inserta tus reglas justo arriba o abajo para minimizar el riesgo de romper algo.

Aquí está el resultado en una de las máquinas con las que trabajo para dar un ejemplo de lo que quiero decir:

 Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 5608K 815M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 3010K 621M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 3 68754 3002K DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID 4 14095 1083K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 5 397K 21M TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW 6 45083 8704K UDP udp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW 7 128K 6265K REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 8 45085 8707K REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 9 1 52 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 4647K packets, 1421M bytes) num pkts bytes target prot opt in out source destination Chain TCP (1 references) num pkts bytes target prot opt in out source destination 1 56599 3172K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 54495 2814K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 158K 9164K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 Chain UDP (1 references) num pkts bytes target prot opt in out source destination 

Esto todavía es bastante simple, pero agregar nuevas reglas a la cadena INPUT no ayudaría. Las reglas similares a las que desea están en la cadena TCP , por lo que deberíamos agregar las reglas allí:

 iptables -A TCP -p tcp --dport 3000 -j ACCEPT 

Si todo lo que todavía no ayuda, verifique si la máquina externa está usando IPv6 para acceder al server y use ip6tables consecuencia.