¿Cómo puedo limitar el reenvío de puertos ssh * remote *?

22

Necesito limitar qué puertos pueden ser ssh -Rreenviados de forma remota por un usuario.

Sé acerca de la permitopenopción en claves_autorizadas, pero como dice en la página de manual solo limita el ssh -Lreenvío de puertos locales

Como se discutió aquí, un usuario obtendría lo mismo netcato similar, pero en este caso el usuario no tiene acceso de shell

También encontré este hilo que habla sobre el uso de selinux o LD_PRELOAD, pero nunca configuré selinux antes y no puedo encontrar información sobre cómo hacerlo LD_PRELOAD.

¿Tal vez alguien ha hecho un parche para openssh para implementar eso?

EDITAR: he encontrado este informe de error, así que supongo que aún no está implementado

Lluís
fuente
¿Has encontrado una solución para esto?
alex88
No lo hice, supongo que no se puede hacer hasta que se cierre el error anterior o alguien escriba un parche para implementar esto
Lluís

Respuestas:

3

Esto se implementó en OpenSSH 7.8p1, que se lanzó el 2018-08-24. Cita de las notas de la versión:

agregue una directiva PermitListen a sshd_config (5) y una opción permitlisten = Authorized_keys correspondiente que controle qué direcciones de escucha y números de puerto pueden ser utilizados por el reenvío remoto (ssh -R ...).

Franco
fuente
4

Hay una opción no-port-forwardingque puede usar, que impide todo el reenvío de puertos. Presente al menos a partir de OpenSSH 4.3p2 (CentOS 5.3 - máquina más antigua a la que tengo acceso). Póngalo en el mismo lugar que hubiera puesto permitopen.

utopía
fuente
13
Desactivar completamente el reenvío de puertos parece excesivo y no es adecuado para la pregunta. Supongo que OP quiere limitarlo , pero permite algunos reenvíos de puertos remotos específicos.
gertvdijk
2
Sí, necesito permitir el reenvío de algunos puertos
Lluís
0

No es posible limitar eso usando ssh. Tal vez selinux o iptables podrían usarse para ese fin. Sin embargo, existe una estrategia alternativa que puede o no satisfacer sus necesidades. Utilice el enlace a los sockets de UNIX. Esto debería estar disponible a partir de openssh versión 6.8.

Cuando use sockets, tiene el sistema de archivos ACL (aunque respete los sockets que pueden depender de * nix) a su disposición y puede usarlo para evitar que un usuario se vincule a otros sockets. Sin embargo, no evita el enlace a los puertos de ninguna manera, por lo que, dependiendo de su caso de uso, puede que no ayude, pero tal vez los puertos no importen si solo puede usar sockets de manera consistente.

Con el manejo de sockets UNIX, los archivos de sockets colgantes pueden ser problemáticos ya que los editores inversos intentan reconectarse. Tengo otra pregunta (y respuesta) a ese problema. En resumen, probablemente también quieras usar StreamLocalBindUnlink yes:

¿Cómo limpiar el zócalo del túnel inverso SSH después de cerrar la conexión?

Timo
fuente
-1

Duplicado: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

Parece que puedes usar lo siguiente?

En el archivo de configuración del servidor hay una opción PermitOpen . Esta opción se puede usar para especificar hosts y puertos para los que se pueden establecer reenvíos. Esta opción se puede usar dentro de un bloque Match, por lo que se puede restringir por usuario, grupo o nombre de host o patrón de dirección IP.

Editar: Entonces, en la configuración del servidor, agregue lo siguiente

PermitOpen host: puerto

PermitOpen IPv4_addr: puerto

PermitOpen [IPv6_addr]: puerto

PHoBwz
fuente
1
Solo en U&L se puede marcar como duplicado.
GAD3R
1
Como se indicó en la pregunta, eso es para -L y ya se conoce como una no solución
alex88
1
¿Alguna vez habrá una solución para esto (además de iptables)?
davesave