Túnel de SSH: ¿Cómo puedo evitar que los usuarios puedan acceder a los servicios vinculados al host local a través del reenvío de puertos?

7

Quiero poder ofrecer cuentas ssh en mi servidor linux para que las personas puedan usarlas para el túnel SSH. Todas las cuentas se bloquearán sin shell interactivo, solo para fines de tunelización / reenvío de puertos. Mi problema es que no quiero que puedan acceder a los servicios que están vinculados a localhost solo haciendo reenvíos de puertos como los siguientes:

ssh account@server -L 9999:127.0.0.1:3306 && telnet localhost 9999

Daría acceso al puerto predeterminado de la base de datos mysql ... ¿Cómo puedo detener esto?

Veo opciones en el archivo de configuración para OpenSSH para permitir puertos / hosts específicos, pero no para bloquearlos. Cualquier ayuda sería muy apreciada :)

    
pregunta Dave Davidson 17.12.2011 - 11:05
fuente

2 respuestas

4

El reenvío de puertos por el demonio SSH se realiza mediante un proceso secundario no privilegiado del demonio ssh.

ssh jeff@localhost -R 9999:localhost:22
sudo lsof -i
sshd      4856  jeff   10u  IPv4  21933      0t0  TCP localhost:9999 (LISTEN)

Por lo tanto, podemos ver que el proceso SSH responsable de los puertos de reenvío es propiedad del usuario. Existen formas sofisticadas de etiquetar paquetes para un manejo personalizado, pero creo que la más fácil es esta:

iptables -A OUTPUT -m owner --gid-owner 1000 -d 127.0.0.0/8 -j REJECT --reject-with icmp-admin-prohibited

Ponga a todos sus usuarios en el mismo grupo, ponga ese grupo en la regla y ponga esa regla en la parte superior de su lista antes de cualquier regla de permiso. Tenga en cuenta que utilicé 127.0.0.0/8 ; cualquier cosa en el netblock 127 lo llevará al host local, así que no solo bloquee 127.0.0.1.

También, considere agregar una regla similar para bloquear el acceso a su interfaz externa IP. Es una forma ingeniosa de evitar las reglas del firewall.

    
respondido por el Jeff Ferland 18.12.2011 - 06:26
fuente
2

Si solo se permiten reenvíos de puertos fijos, puede restringirlos con permitopen="host:port" . Google reclamó algún demonio ssh comercial que ofrece una opción de reenvío de puerto restringido, pero que parecía global, no solo un usuario.

    
respondido por el Jeff Burdges 18.12.2011 - 07:47
fuente

Lea otras preguntas en las etiquetas