clojure servidor ostentoso abre el puerto público?
Pregunta
(Esta pregunta se ha downvoted, que me parece extraño. ¿Cómo he ofendido?)
¿Tengo razón para pensar que la ejecución de un servidor ostentoso por lo general abre el puerto 4005 para el mundo, no está vinculada a las conexiones localhost sólo?
Así que cualquier persona pueda espiar en un café no sólo está permitiendo a los transeúntes para ejecutar código arbitrario en su ordenador, pero les está dando una interfaz agradable que hacerlo con.
Parece que cuando corro un servidor ostentoso, ya sea con 'mvn clojure: Swank', o 'Lein Swank', o (swank.swank / start-server "/ tmp / yo")
Entonces consigo algo así (gracias Mike!):
$lsof -i -P
java 11693 john 13r IPv6 6701891 0t0 TCP *:34983 (LISTEN)
y de hecho me puedo conectar desde un emacs que se ejecutan en otro equipo de la misma red.
(swank.swank/start-server "/tmp/yo")
Si comienzo el servidor con la mano, se produce la siguiente salida
Connection opened on local port 34983
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]>
Considerando lo siguiente:
(swank.swank/start-server "/tmp/yo" :host "localhost")
produce:
Connection opened on local port 40368
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]>
¿Qué se parece más a lo que esperaba.
¿Hay alguna buena razón para hacer esto?
¿Alguna idea sobre la forma en que las formas más convencionales de comenzar podría ser persuadido para aceptar solamente conexiones desde los procesos locales?
Solución
pregunta totalmente válida.
Después de abrir un servidor de limo, se dará cuenta:
eames:~:% lsof -i -P | grep 4005
java 41477 mjd 33u IPv6 0x0b8956d0 0t0 TCP [::127.0.0.1]:4005 (LISTEN)
La conexión está escuchando en la dirección local en el puerto 4005. Esta interfaz no está expuesto a la red, por lo que otros dispositivos de la red no pueden conectarse al servidor de limo.
editar
Esta fue mi resultado de comenzar Swank usando Leiningen, que ofrece "localhost" como argumento para swank.swank/start-server
. Es posible que desee volver a comprobar que el plugin Leiningen es la apertura de los puertos no locales.
Tienes razón que Swank se abre la conexión en todas las direcciones si no se proporciona explícitamente un huésped. El código en cuestión es swank.util.net.sockets/make-server-socket
, y este comportamiento se documenta. Estoy de acuerdo, parece que el defecto equivocado.
Otros consejos
sólo acepta una conexión por lo que incluso si se expone al mundo que deje de escuchar una vez que se conecte.
Si estás usando el clojure-maven-plugin, versión 1.3.4 fue lanzado recientemente, que ahora se inicia el servidor ostentoso contra localhost para evitar este problema.
Este comportamiento se puede configurar en el archivo pom.xml con:
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>
o desde la línea de comandos con:
mvn clojure:swank -Dclojure.swank.host=someotherhostname