Permitir que solo usuarios específicos inicien sesión a través de ssh en un puerto y que otros inicien sesión a través de otro puerto

13

Tengo el siguiente caso de uso:

  • Necesita permitir que los usuarios inicien sesión desde una red segura y confiable
  • y luego permitir que un par (solo dos) usuarios móviles inicien sesión de forma remota en una máquina Linux Centos.

Puedo hacer que el sshd se ejecute en diferentes puertos, por ejemplo:

  • desde adentro está bien hacer que se ejecute en 22 ya que no quiero que se conecten a otros puertos (desordena el script).
  • Para usuarios móviles externos, ejecutaré el sshd en un puerto diferente, digamos el puerto X (mayor seguridad, este es un tipo de configuración de oficina pequeña).

Para mayor seguridad, esperaba configurar sshd para permitir el acceso solo a usuarios particulares en el puerto X (y luego configurar algunas alertas para que podamos saber cuándo los usuarios inician sesión a través del puerto X).

Sin embargo, no puedo encontrar ninguna configuración como esta en la documentación de sshd. Si no hay una solución como esta, ¿es posible al menos activar la ejecución de un script de shell cada vez que alguien completa el inicio de sesión sshd en el puerto X? Estaba mirando la documentación de iptables para ver si podía activar una alerta cuando sshd login está allí pero no se me ocurrió nada.

Entradas apreciadas

doon
fuente

Respuestas:

12

Ejecutar SSHen un puerto alternativo ya no cuenta como seguridad. Solo agrega un poco de oscuridad y un paso adicional de complejidad para sus usuarios. Agrega cero obstáculos para las personas que buscan romper su red, que usan escáneres de puertos automáticos y no les importa en qué puerto se está ejecutando.

Si desea reforzar la seguridad en un sistema que permite SSH entrante remoto basado en Internet, controle a sus usuarios en el sshd_configmodo indicado por @Anthon, y luego también implemente la seguridad directamente en PAM.

Crea dos grupos, lusersy rusers. Agregue los usuarios móviles remotos al rusersgrupo. Use el módulo PAM pam_succeed_if.so para permitir el acceso a esos usuarios. Agregue líneas a su configuración de pam para ssh:

account     sufficient  pam_succeed_if.so user ingroup lusers
account     sufficient  pam_succeed_if.so user ingroup rusers

Algunos módulos de pam_succeed_if.so pueden requerir que use una sintaxis ligeramente diferente, como group = lusers.

Entonces, no solo está sshdlimitando los usuarios que pueden conectarse, sino que, en caso de un error sshd, aún tiene la protección que ofrecen las restricciones basadas en PAM.

Un paso adicional para los usuarios remotos es forzar el uso de ssh_keys con frases de contraseña. Por lo tanto, los usuarios locales pueden iniciar sesión con claves o contraseñas, pero los usuarios remotos deben tener una clave, y si crea las claves para ellos, puede asegurarse de que la clave tenga asociados una frase de contraseña. Limitando así el acceso a ubicaciones que realmente poseen la clave SSH y la frase de contraseña. Y limitar los posibles vectores de ataque si la contraseña de un usuario está comprometida.

En sshd_config:

cambiar 2 configuraciones:

ChallengeResponseAuthentication yes

y

PasswordAuthentication yes

a:

ChallengeResponseAuthentication no

y

PasswordAuthentication no

Entonces, el valor predeterminado es permitir ahora solo la autenticación de clave. Luego, para los usuarios locales, puede usar la matchconfiguración para cambiar la configuración predeterminada para los usuarios locales. Suponiendo que su red privada local es 192.168.1.0/24, agregue a sshd_config:

Match Address 192.168.1.0/24
PasswordAuthentication yes

Ahora, los usuarios locales pueden conectarse con contraseñas o claves, y los usuarios remotos se verán obligados a usar claves. Depende de usted crear las claves con frases de paso.

Como beneficio adicional, solo tiene que administrar un solo sshd_config, y solo tiene que ejecutar ssh en un solo puerto, lo que facilita su propia administración.


edit 2017-01-21 - Limitando el uso de authorized_keysarchivos.

Si desea asegurarse de que los usuarios no puedan autogenerar una clave ssh y usarla con un authorized_keysarchivo para iniciar sesión, puede controlar eso configurando una ubicación específica para que sshd buscará claves autorizadas.

En /etc/ssh/sshd_config, cambio:

AuthorizedKeysFile  %h/ssh/authorized_keys

a algo como:

AuthorizedKeysFile  /etc/.ssh/authorized_keys/%u

Señalar un directorio controlado en el que los usuarios no tienen permisos para escribir significa que no pueden generar su propia clave y usarla para evitar las reglas que ha establecido.

Tim Kennedy
fuente
2
No veo cómo su respuesta distingue a los usuarios remotos de los usuarios locales. Si alguien en el lusersgrupo pero no en el rusersgrupo genera un par de claves y actualiza el suyo ~/.ssh/authorized_keys, podrá iniciar sesión desde el control remoto.
Richard Hansen
8

Puede agregar algo como esto a su /etc/ssh/sshd_config:

AllowUsers mobileuser1 mobileuser2 *@10.0.0.0/8

Lo anterior supone que el permitido a los usuarios remotos se nombran mobileuser1y mobileuser2, y que su red de confianza es 10.0.0.0 con la máscara de subred 255.0.0.0.

Esto permite que los dos usuarios móviles inicien sesión desde cualquier lugar y que todos puedan iniciar sesión desde la red confiable. Se foodenegará el acceso a cualquier usuario que no coincida con ninguno de esos patrones (como el inicio de sesión del usuario desde el control remoto).

Richard Hansen
fuente
Esa es la pieza que me faltaba en mi respuesta. Creo que si combinamos su respuesta con la mía, es una solución bastante sólida.
Tim Kennedy
2

Puede hacerlo iniciando dos demonios ssh y dos sshd_configarchivos. Copie su existente (por ejemplo, desde /etc/ssh/sshd_config /etc/ssh/sshd_alt_configy en la configuración de configuración alternativa (desde la manpágina para sshd_config:

Puerto

Specifies the port number that sshd(8) listens on.  The default
is 22.  Multiple options of this type are permitted.  See also
ListenAddress

Permitir usuarios

This keyword can be followed by a list of user name patterns,
separated by spaces.  If specified, login is allowed only for
user names that match one of the patterns.  Only user names are
valid; a numerical user ID is not recognized.  By default, login
is allowed for all users.  If the pattern takes the form
USER@HOST then USER and HOST are separately checked, restricting
logins to particular users from particular hosts.  The
allow/deny directives are processed in the following order:
DenyUsers, AllowUsers, DenyGroups, and finally AllowGroups.

Probablemente desee tener el registro ssh alternativo en un archivo diferente y, por ejemplo, siga lo que está escrito en ese archivo para notar intentos de inicio de sesión aberrantes.

Anthon
fuente