Túnel SSH para evitar exponer una consola de administración

Túnel SSH para evitar exponer una consola de administración

Estoy ejecutando Lucee Server, un motor de servidor de fusión en frío que en mi caso se ejecuta en Tomcat, en Apache.

Estoy pensando en reforzarlo de varias maneras y me surge una pregunta sobre el enfoque de túnel SSH que se describe aquí:https://docs.lucee.org/guides/deploying-lucee-server-apps/lockdown-guide.html#restricted-access-plus-ssh-tunnelling

La cuestión es que no creo que la descripción de cómo hacer este túnel ssh sea precisa o completa. Pasé mucho tiempo mirando la documentación de SSH y también algunas otras preguntas de Stack Exchange (https://superuser.com/q/588591/504387,https://superuser.com/q/237977/504387) pero todavía no puedo hacer que el túnel SSH funcione como se describe en esa guía o de cualquier otra manera.


Configuración actual, tengo lucee ejecutándose en server.example.com escuchando en el puerto 8888. Apache ejecutándose en el mismo servidor está escuchando en el puerto 443 y está configurado para enviar todas las solicitudes a 127.0.0.1 en el puerto 8888 (es decir, reenviarlas a lucee) . Pero está configurado para denegar solicitudes a /lucee como se describe en la documentación anterior.

Esto significa que solo se puede acceder a la consola de administración de Lucee directamente en el puerto 8888, no a través del puerto 443. Las reglas de firewall (iptables) están configuradas para permitir el tráfico entrante en el puerto 8888 solo desde la red interna de la empresa, de modo que podamos acceder a la consola de lucee pero el mundo exterior no puede.

EstepuedeEstaría bien, pero estaba tratando de ver si podía hacer que el enfoque de túnel funcionara como se describe. Si el túnel pudiera funcionar, podríamos deshacernos de la regla de permiso de iptables y simplemente bloquear el puerto 8888 por completo (excepto en loopback), o simplemente reconfigurar lucee para que SÓLO se vincule a 127.0.0.1.


SSH está en un puerto no estándar en server.example.com, supongamos que es 3300.

Lo que quiero hacer es ejecutar un comando SSH en mi computadora portátil que:

  1. Utilice mi configuración y clave ssh existentes para conectarme a server.example.com (donde sshd escucha en el puerto 3300),
  2. Enlace a cualquier puerto en localhost en mi computadora portátil, digamos 60001,
  3. DESDE el extremo remoto en server.example.com, conéctese a su vez a 127.0.0.1:8888 para que el tráfico pueda pasar a lucee.

El resultado final debería ser que pueda accederhttp://127.0.0.1:60001/lucee/admin/server.cfmen mi computadora portátil y lo recibirá lucee ejecutándose en server.example.com y escuchando el puerto 8888 vinculado a 127.0.0.1 en ese servidor.

¿Cómo puedo hacer esto?

Respuesta1

Debe vincular el servidor Lucee únicamente localhostporque no proporciona TLS en el puerto 8888. Entonces tiene dos opciones para acceder a las rutas administrativas de forma segura.

túnel SSH

Dessh(1):

-L [ bind_address:]port:host:hostport

Especifica que lo proporcionado porten el host local (cliente) se reenviará al hostpuerto proporcionado en el lado remoto.

Lleno con los parámetros de su pregunta:

ssh -L 60001:127.0.0.1:8888 [email protected] -p 3300

Proxy Apache con control de acceso adecuado

Como el proxy en el puerto 443está cifrado con TLS, no necesariamente necesita ningún proxy SSH, pero podría permitir conexiones a las rutas administrativas desde las redes de la empresa en la configuración de Apache.

La documentación está un poco desactualizada, ya que el ejemplo usa la sintaxis de Apache 2.2:

<Location /lucee>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Location>

Pero la documentación sobre Apache 2.4control de accesodice:

Las Allowdirectivas , Denyy Orderproporcionadas por mod_access_compat, están en desuso y desaparecerán en una versión futura. Debes evitar su uso y evitar tutoriales obsoletos que recomienden su uso.

Supongamos que desea limitar el acceso para /luceepermitir solo LAN 192.168.22.0/24e IP pública 198.51.100.22:

<Location /lucee>
    <RequireAny>
        Require ip 192.168.22.0/24
        Require ip 198.51.100.22
    </RequireAny>
</Location>

información relacionada