¿Cómo elegir un puerto para ejecutar una aplicación en localhost? [cerrado]

1

Estoy considerando desarrollar una aplicación web para mi propio uso en el escritorio, ejecutando en localhost, iniciada automáticamente en el inicio. Tendré que elegir un puerto para hacerlo. Lo que me inquieta es la capacidad de cualquier otro programa para obtener lo que está disponible en este puerto.

Sé que esto podría considerarse un virus, pero mi impresión es que escuchar un puerto es algo menos perturbador que un keylogger, por ejemplo. En realidad, una aplicación ya podría utilizar este puerto con fines legítimos.

¿Cuáles son las mejores prácticas para elegir un puerto en localhost (si eso ya no es una práctica tan mala) y, si es posible, asegurarlo?

    
pregunta Matthew Adams 11.09.2017 - 13:38
fuente

3 respuestas

1

En Linux, los puertos por debajo de 1024 se denominan puertos con privilegios. Las aplicaciones que escuchan en estos puertos deben tener privilegios. Es decir, la aplicación debe ejecutarse como root o tener la capacidad CAP_NET_BIND_SERVICE . Por lo tanto, podría usar un puerto mayor que 1024 .

Los puertos web comunes (y IANA asignados) son 80 para HTTP y 443 para HTTPS (HTTP sobre TLS). El puerto alternativo para HTTP es 8080 , que no es un puerto privilegiado. Podrías esto.

También puede asegurarse de que el interface que está escuchando su aplicación está vinculado a la interfaz de bucle invertido .

    
respondido por el eternaltyro 11.09.2017 - 20:16
fuente
1
  

Lo que me preocupa es la capacidad de cualquier otro programa para obtener lo que está disponible en este puerto.

Para empezar, si su servidor se enlaza con localhost (que es 127.0.0.1 para IPV4, y / o ::1 para IPV6) entonces solo los clientes que se ejecutan en localhost deberían poder acceder a él. Si desea restringir las conexiones a programas locales , asegúrese de que su servidor se vincule a una de esas direcciones de bucle invertido , y definitivamente no es 0.0.0.0 o :: ( que denota todas las interfaces) .

Si alguien tiene un software de ejecución de acceso no autorizado que se puede conectar al dispositivo local de bucle de retorno , es posible que tenga un problema mucho más grande . Asumiré que esto no es un problema, es decir, a menos que esté compartiendo su computadora con otras personas, es seguro que solo puede vincular a 127.0.0.1 y / o ::1 y terminar con esto .

Podría estar compartiendo su computadora con otras personas, es decir, ejecutando un servicio de shell , lo que significa que le está dando acceso a su sistema . En este caso, la capacidad de uno de sus usuarios (con suerte confiables) para conectarse a servicios vinculados al bucle invertido debería ser una de sus preocupaciones más pequeñas. Cuando dejas a otras personas detrás de tu firewall, y dentro de tu userland , ¡les das la posibilidad de explorar toda tu red! Su enrutador, su impresora y cualquier teléfono que tenga conectado a su red también pueden ejecutar software, y estos dispositivos pueden ser mucho más difíciles de proteger que su servidor.

Debería considerar el uso de espacios aislados en este tipo de usuarios mediante la virtualización como KVM, Xen, etc., dándoles su propio entorno virtual (incluida una interfaz de red virtual ) para jugar y por lo tanto, le ofrece la posibilidad de instalar un firewall en dicha interfaz de red virtual .

  

¿Cuáles son las mejores prácticas para elegir un puerto en localhost (si eso ya no es una práctica tan mala) y, si es posible, asegurarlo?

Nuevamente, las conexiones entrantes desde una interfaz sin loopback no deberían poder conectarse a sockets que escuchan en una interfaz de bucle invertido . Si su sistema operativo permite una conexión de este tipo, está muy mal configurado o es Windows XP, service pack 1a o inferior (que en sí mismo es un problema aparte).

Su principal preocupación debería ser evitar que los usuarios que no son de confianza ejecuten el código directamente en su país de usuario, por lo tanto, si está compartiendo su computadora con otras personas, como administrador, debería sandbox a esas otras personas y mantener un enfoque de grano fino en lo que pueden ver cosas externas. Suponiendo que están en un espacio aislado, solo pueden comunicarse con su host a través de una interfaz de red virtual, por lo que, de nuevo, no pueden conectarse a los servicios 127.0.0.1 o ::1 bound en el host, pero podrían ser capaces de para escanear su red, todavía ...

    
respondido por el autistic 11.09.2017 - 23:41
fuente
0

Compruebe esta lista de puertos no asignados enlace
Mejor elegir algo después de 49k
Si está utilizando socket para IPC, use la familia PF_INET

    
respondido por el Chits 11.09.2017 - 13:57
fuente

Lea otras preguntas en las etiquetas