Deshabilitar ciertas claves OpenSSH en OpenBSD: ¿por qué se ignoran las entradas 'sshd_config' correspondientes y por qué 'ssh-keygen -A' genera claves prohibidas?

Deshabilitar ciertas claves OpenSSH en OpenBSD: ¿por qué se ignoran las entradas 'sshd_config' correspondientes y por qué 'ssh-keygen -A' genera claves prohibidas?

Estoy intentando lograr lo siguiente en mis servidores OpenBSD 6.9:

  1. Prohibir el uso de todas las claves excepto la ssh-ed25519de ambas.SERVIDORyCLIENTElados.
  2. Limitándose ssh-keygen -Aa generar claves únicamente por el ssh-ed25519algoritmo autorizado y nada más.

Para lograr esto, he agregado las siguientes líneas a mi sshd_config:

HostKey /etc/ssh/ssh_host_ed25519_key
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

También agregué las siguientes líneas a mi ssh_config:

CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

He eliminado todas las claves menos la autorizada.

sshd reiniciado:

# rcctl restart sshd                                                                            
sshd(ok)
sshd(ok)

Después de verificar si mi configuración se utiliza ejecutando los siguientes comandos:

# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyAlgorithms
# ssh -Q PubkeyAcceptedAlgorithms

Para mi sorpresa, esto es con lo que todos regresan:

ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

En otras palabras, se ignoran las restricciones clave.

Para estar seguro, incluso reinicié el servidor, pero no hay diferencia.

Una posible solución es eliminar todos los archivos clave excepto el autorizado. Sin embargo, el script de inicio /etc/rctiene una línea, ssh-keygen -Aque regenera todas las claves ssh faltantes después de cada reinicio del sistema, antes de que se inicie el demonio sshd.incluidos los de algoritmos prohibidos!

Entonces quitar las claves no resuelve el problema.

Como solución adicional, podría eliminar la ssh-keygen -Alínea del script de inicio o reemplazarla con mi algoritmo de generación de claves personalizado, pero eso me llevará de regreso al punto donde comenzó todo: tener que lidiar con este problema una y otra vez, por ejemplo, después de cada actualización del sistema, cada vez que el equipo de OpenBSD lanza una nueva versión de /etc/rc. Automatizar la eliminación de esa línea y probar una solución tan descuidada en una gran cantidad de servidores es difícil y puede provocar una falla masiva de la red si algo sale mal.

Por lo tanto, continué mi investigación y profundicé en el código fuente de ssh-keygen. Descubrí que no es posible restringir el comportamiento del -Aconmutador desde fuera, por ejemplo, mediante archivos de configuración. Ni siquiera realiza una prueba preliminar de si las claves están autorizadas o no, simplemente genera las claves, de acuerdo con una lista de algoritmos de una matriz codificada. La única forma de evitar esto es editando, recompilando y usando una bifurcación personalizada de ssh-keygen, pero luego tendré que lidiar con eso después de cada actualización de OpenSSH...

He encontrado una solución parcial para otros sistemas operativos pero no para OpenBSD.

¿Alguien podría indicarme una solución adecuada? ¿Por qué se ignoran mis restricciones sshd_configy las de mis ssh_configclaves y cómo dejar ssh-keygen -Ade generar claves con algoritmos prohibidos?

Antes de que alguien pregunte: OpenSSH utiliza todas las demás configuraciones en ambos archivos de configuración, por lo que estos archivos de configuración son de hecho los que realmente se están cargando.

Muchas gracias por todas las respuestas útiles.

información relacionada