SSH con filtrado basado en MAC usando iptables: ¿recomendado?

SSH con filtrado basado en MAC usando iptables: ¿recomendado?

Tengo un servidor en una red interna (iniciar sesión allí a través de VPN) desde donde inicio sesión en el servidor a través de SSH con autenticación de clave pública/privada OpenSSH. Desde el punto de vista de la seguridad, quiero vincular las direcciones MAC de mis tres clientes usados iptables​​en el servidor para que solo estos clientes puedan iniciar sesión con él.

iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP

Sin embargo, ¿se recomienda hacerlo de esta manera? ¿Qué otros (mejores) métodos puedo utilizar para vincular el inicio de sesión SSH a los clientes utilizados?

(Si alguien quiere solicitar 2FA, lamentablemente la 2FA no es posible como posible solución).

Gracias.

Respuesta1

Supongo que desea evitar que su servidor SSH acepte conexiones de hosts que no son de confianza aunque proporcionen credenciales de usuario válidas. ¿Es correcto?

Una posible solución para vincular la autenticación de clave pública de los usuarios a los hosts de clientes seleccionados es mediante la autenticación basada en host. Configurando la autenticación basada en host y definiendo AuthenticationMethodsel parámetro en /etc/ssh/sshd_config:

AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password

O:

AuthenticationMethods hostbased,publickey

Eso le indicará al demonio SSH que solicite a los clientes que autentiquen los hosts desde los que se conectan antes de verificar las claves o contraseñas de los usuarios. La primera alternativa permite la autenticación basada en contraseña, mientras que la segunda la restringe únicamente a claves públicas. Dado que la autenticación basada en host se basa en pares de claves, el servidor SSH podrá autenticar clientes con direcciones IP dinámicas.


Aquí sigue las instrucciones completas. La documentación sobre cómo SSH realiza la autenticación basada en host está escrita enssh(1)página de manual. Tenga en cuenta cómo SSH identifica a los usuarios y verifique si es aplicable a su caso.

La autenticación basada en host funciona de la siguiente manera: si la máquina desde la que el usuario inicia sesión aparece en la máquina remota /etc/hosts.equivo /etc/ssh/shosts.equiven ella, ylos nombres de usuario son los mismos en ambos lados, o si los archivos ~/.rhostsexisten ~/.shostsen el directorio de inicio del usuario en la máquina remota ycontener una línea que contiene el nombre de la máquina cliente y el nombre del usuario en esa máquina, se considera que el usuario puede iniciar sesión. Además, el servidor debe poder verificar la clave de host del cliente para que se permita el inicio de sesión. Este método de autenticación cierra los agujeros de seguridad debidos a la suplantación de IP, la suplantación de DNS y la suplantación de enrutamiento. [Nota para el administrador: /etc/hosts.equiv, ~/.rhostsy el protocolo rlogin/rsh en general son intrínsecamente inseguros y deben desactivarse si se desea seguridad.]

Para habilitar la autenticación basada en host en OpenSSH:

# /etc/ssh/sshd_config

HostbasedAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes

# AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password
AuthenticationMethods hostbased,publickey
  • Para realizar la autenticación basada en host, puede confiar en la información del nombre de host proporcionada por los clientes configurando HostbasedUsesNameFromPacketOnly yesen/etc/ssh/sshd_config:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly yes
  • O, alternativamente, puede configurar el demonio SSH para identificar nombres de host mediante la resolución de las direcciones IP de los clientes utilizando información almacenada en /etc/hostsarchivos o registros PTR en el servidor DNS de la red:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly no
UseDNS yes
# /etc/ssh/shosts.equiv

ssh-client-alpha
ssh-client-bravo
ssh-client-charlie
  • Enumere las claves públicas de los hosts autorizados en /etc/ssh/ssh_known_hostsel archivo. Una manera conveniente de hacerlo es a través dessh-keyscan:
[root@ssh-server ~]# ssh-keyscan ssh-client-alpha >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-bravo >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-charlie >> /etc/ssh/ssh_known_hosts

Después de configurar el servidor OpenSSH para aceptar solicitudes de autenticación basada en host, los clientes también deben configurarse para solicitar autenticación basada en host:

# /etc/ssh/ssh_config

Host *
    HostbasedAuthentication yes
    EnableSSHKeySign yes
  • Asegúrese de que los bits SUID/SGID enssh-keysignEl ejecutable concede permiso de lectura a los archivos de clave privada del host:
[root@ssh-client-alpha ~]# find /usr -name ssh-keysign -ls
 16517300    616 -r-xr-sr-x   1  root     ssh_keys   630344 Feb  4 16:01 /usr/libexec/openssh/ssh-keysign

[root@ssh-client-alpha ~]# ls -l /etc/ssh/ssh_host_*key
-rw-r----- 1 root ssh_keys  480 Apr 13 06:51 /etc/ssh/ssh_host_ecdsa_key
-rw-r----- 1 root ssh_keys  387 Apr 13 06:51 /etc/ssh/ssh_host_ed25519_key
-rw-r----- 1 root ssh_keys 2578 Apr 13 06:51 /etc/ssh/ssh_host_rsa_key

información relacionada