¿Puedo deshabilitar el acceso de shell interactivo mientras hago un túnel del tráfico web a través de SSH?

12

Estoy buscando implementar el túnel SSH como una solución VPN barata para que usuarios externos accedan a aplicaciones web orientadas solo a Intranet.

Actualmente estoy usando Ubuntu Server 10.04.1 64 bit con OpenSSH instalado.

Estoy usando Putty en cajas de Windows para crear un túnel en un puerto local a mi servidor ssh.

start putty -D 9999 mysshserver.com -N

Luego uso tell Firefox para usar un proxy SOCKS en localhost: 9999.

El indicador -N deshabilitará el shell interactivo desde el lado del cliente. ¿Hay alguna manera de hacer esto en el lado del servidor?

Además de deshabilitar el acceso raíz, usar la autenticación de clave rsa y cambiar el puerto predeterminado; ¿Hay alguna otra práctica de seguridad obvia que deba seguir para este propósito? Mi objetivo es simplemente poder hacer un túnel del tráfico web.

CONNECTICUT.
fuente

Respuestas:

15

Después de cuatro años, esta respuesta merecía una actualización. Si bien originalmente lo usé authorized_keysyo mismo y probablemente aún lo usaría en algunos casos seleccionados, también puede usar el sshd_configarchivo de configuración del servidor central .

sshd_config

Puede designar (por su caso de uso particular) un grupo, como por ejemplo proxy-onlyo Matchusuarios individuales. En sshd_config. Esto se realiza después de la configuración global y revoca, repite o refina algunas de las configuraciones proporcionadas en la configuración global.

Nota: algunas de las sintaxis / directivas utilizadas sshd_config(5)están documentadas en la manpágina para ssh_config(5). En particular, asegúrese de leer la sección PATRONES de ssh_config(5).

Para un grupo, esto significa que su Matchbloqueo comenzaría así:

Match group proxy-only

Puede Matchlos siguientes criterios: User, Group, Host, LocalAddress, LocalPorty Address. Para hacer coincidir varios criterios, simplemente separe por coma los pares de criterios-patrones ( group proxy-onlyarriba).

Dentro de dicho bloque, que tradicionalmente se sangra en consecuencia por brevedad (pero no es necesario), puede declarar la configuración que desea aplicar para el grupo de usuarios sin tener que editar cada authorized_keysarchivo para los miembros de ese grupo.

La no-ptyconfiguración de authorized_keyssería reflejada por una PermitTTY noconfiguración y command="/sbin/nologin"se convertiría en ForceCommand /sbin/nologin.

Además, también puede establecer más configuraciones para satisfacer la paranoia de un administrador, como chroot-introducir al usuario en su carpeta de inicio y terminaría con algo como esto:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

(compruebe usted mismo si necesita o quiere las líneas comentadas y descomente según sea necesario)

El %hes un token que se sustituye por el directorio de inicio del usuario ( %udaría el nombre de usuario y %%un signo de porcentaje). He encontrado ChrootDirectoryparticularmente útil para limitar a mis sftp-onlyusuarios:

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

Tenga en cuenta que solo ciertas directivas pueden usarse en un Matchbloque. Consulte la manpágina sshd_config(5)para más detalles (buscar Match).

claves_autorizadas

NB: la parte debajo de este comentario fue mi respuesta original. Mientras tanto, pero también depende de las características de su sshdversión exacta , elegiría el método descrito anteriormente en la mayoría de los casos.

Sí, puede, tan fino como puede asignar claves públicas. Además de nologin según lo recomendado por ajdecon, sugeriría configurar lo siguiente frente a la entrada clave en authorized_keys:

no-pty ssh-rsa ...

El no pty le dice al lado del servidor que no se debe asignar un pseudo terminal para esa clave.

También puede forzar la ejecución de algo como nologin para una clave particular al anteponer esto:

command="/sbin/nologin",no-pty ssh-rsa ...
0xC0000022L
fuente
Tenga en cuenta que no-ptysolo no evitará que el usuario de la clave ejecute comandos. Consulte superuser.com/q/1230979/195460 .
Tad Lispy
3

Para cualquier usuario de solo túnel, cambie su shell de inicio de sesión a / sbin / nologin. De esa forma, su usuario no podrá acceder a un shell en el servidor, pero aún podrá ejecutar la configuración de túneles ssh desde su cliente.

ajdecon
fuente
0

Sé que esta puede no ser la respuesta que estás buscando, pero ¿has considerado usar OpenVPN como alternativa?

Matt Beckman
fuente
0

En caso de que esté listo para renunciar a la autenticación de usuario / contraseña y usar claves para iniciar sesión, puede especificar parámetros para cada clave pública.

Los parámetros notables son:

comando = "comando"

Especifica que el comando se ejecuta cada vez que esta clave se utiliza para la autenticación. El comando proporcionado por el usuario (si lo hay) se ignora.

y

restringir

Habilite todas las restricciones, es decir, deshabilite el reenvío de puerto, agente y X11, así como deshabilite la asignación de PTY y la ejecución de ~ / .ssh / rc.

y finalmente

reenvío de puertos Habilite el reenvío de puertos previamente deshabilitado por la opción restringir.

Con esto, puede restringir al usuario de ese par de claves en particular lo que puede hacer con la sesión SSH.

Se vería así:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>
asdmin
fuente
Veo que mi respuesta es algo redundante en serverfault.com/a/242411/13364 , pero lo dejé en el lugar debido a los parámetros 'restringir' y 'reenvío de puertos', que en mi opinión son mejores que 'no-pty'.
asdmin
-1

Recomiendo probar Tunnelier . Es muchísimo más fácil de configurar / administrar.

Bael
fuente