Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
chef-ssh-hardening — This chef cookbook proporciona configuraciones seguras de ssh-client y ssh-server. | Kitploit
Herramientas/GitHubGitHub/dev-sec/chef-ssh-hardening
Seguridad de Infraestructura en la NubeAuditoría de ConfiguraciónSeguridad de RedesDevSecOpsAutenticación
GitHubdev-sec/chef-ssh-hardening

chef-ssh-hardening

This chef cookbook proporciona configuraciones seguras de ssh-client y ssh-server.

Ver Repositorio
168669hace 7 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Sitio web
Compartir

ssh-hardening (libro de recetas de Chef)

Supermarket Build Status Code Coverage Gitter Chat

Descripción

Este libro de recetas proporciona configuraciones seguras de ssh-client y ssh-server. Este libro de recetas no proporciona capacidades para la gestión de usuarios y/o claves ssh; para eso, utilice otros libros de recetas.

Requisitos

  • Chef >= 14.13.11

Plataforma

  • Debian 8, 9, 10
  • Ubuntu 16.04, 18.04
  • RHEL 6, 7
  • CentOS 6, 7
  • Oracle Linux 6, 7
  • Fedora 29, 30
  • OpenSuse Leap 42
  • Amazon Linux 1, 2
  • Atributos

    A continuación puede encontrar la documentación de los atributos y sus valores predeterminados.

    Nota: algunos de los valores predeterminados de los atributos de este libro de recetas se establecen en las recetas. Debe utilizar un nivel de precedencia de atributos más alto para sobrescribir dichos atributos. Dichos atributos están marcados con #override attribute# en la lista siguiente. Ejemplo para sobrescribir un atributo de este tipo:

    root@kitploit:~
    override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
    
    • ['ssh-hardening']['network']['ipv6']['enable'] - false. Establecer en true si se necesita IPv6
    • ['ssh-hardening']['ssh']['ports'] - 22. Puertos a los que ssh-server debe escuchar y a los que ssh-client debe conectarse
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil para calcular el mejor intercambio de claves (KEX) según la versión del servidor; de lo contrario, especifique una cadena de valores Kex
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil para calcular los mejores Códigos de Autenticación de Mensajes (MAC) según la versión del servidor; de lo contrario, especifique una cadena de valores Mac
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil para calcular los mejores cifrados según la versión del servidor; de lo contrario, especifique una cadena de valores Cipher
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false. Establecer en true si se requiere CBC para los cifrados. Esto suele ser necesario únicamente si mecanismos M2M antiguos necesitan comunicarse con SSH y no tienen habilitado ninguno de los cifrados seguros configurados. CBC es una alternativa débil. Cualquier cosa más débil debe evitarse y, por lo tanto, no está disponible.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. Establecer en true si se requieren mecanismos HMAC más débiles. Esto suele ser necesario únicamente si mecanismos M2M antiguos necesitan comunicarse con SSH y no tienen habilitado ninguno de los HMAC seguros configurados.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. Establecer en true si se requieren mecanismos de Intercambio de Claves (KEX) más débiles. Esto suele ser necesario únicamente si mecanismos M2M antiguos necesitan comunicarse con SSH y no tienen habilitado ninguno de los KEX seguros configurados.
    • ['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - uno o más hosts a los que ssh-client puede conectarse.
    • ['ssh-hardening']['ssh']['client']['password_authentication'] - false. Establecer en true si se debe habilitar la autenticación por contraseña.
    • ['ssh-hardening']['ssh']['client']['roaming'] - false. Establecer en true si se debe habilitar el roaming experimental del cliente. Se sabe que esto puede causar problemas potenciales con la divulgación de secretos a servidores maliciosos y, por defecto, está deshabilitado.
    • ['ssh-hardening']['ssh']['client']['extras'] - {}. Agregue opciones de configuración adicionales; consulte a continuación para más detalles
    • ['ssh-hardening']['ssh']['server']['host_key_files'] - nil para calcular la mejor configuración de hostkey según la versión del servidor; de lo contrario, especifique una matriz con rutas de archivo (p. ej., /etc/ssh/ssh_host_rsa_key)
    • ['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - Longitud mínima aceptable del primo en bits en /etc/ssh/moduli. Los primos por debajo de este número se eliminarán. (Consulte esto para obtener más información y contexto)
    • ['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - Si se deben generar primos propios. Esta regeneración ocurre solo una vez y lleva mucho tiempo (~ 1.5 - 2 h en hardware moderno para una longitud de 4096).
    • ['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - Longitud del primo que se debe generar. Esta opción solo es válida si dh_build_primes está habilitado.
    • ['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - una o más direcciones IP a las que ssh-server debe escuchar. El valor predeterminado es escuchar en todas las interfaces. ¡Debe configurarse por razones de seguridad!
    • ['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false para deshabilitar el inicio de sesión de root por completo. Establecer en true para permitir que root inicie sesión mediante mecanismos basados en claves
    • ['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. Establecer en true para permitir el reenvío TCP
    • ['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. Establecer en true para permitir el reenvío de agente
    • ['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. Establecer en true para permitir el reenvío X11
    • ['ssh-hardening']['ssh']['server']['permit_tunnel'] - false para deshabilitar el reenvío de dispositivos tun. Establecer en true para permitir el reenvío de dispositivos tun. Otros valores aceptados: 'yes', 'no', 'point-to-point', 'ethernet'. Consulte man sshd_config para conocer los comportamientos exactos. Nota: también necesitará habilitar allow_tcp_forwarding.
    • ['ssh-hardening']['ssh']['server']['use_pam'] - true. Establecer en false para deshabilitar la autenticación pam de sshd
    • ['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. Establecer en true para habilitar la autenticación por desafío-respuesta.
    • ['ssh-hardening']['ssh']['server']['deny_users'] - [] para configurar DenyUsers; si se especifica, se deniega el inicio de sesión para los nombres de usuario que coincidan con uno de los patrones.
    • ['ssh-hardening']['ssh']['server']['allow_users'] - [] para configurar AllowUsers; si se especifica, el inicio de sesión solo se permite para los nombres de usuario que coincidan con uno de los patrones.
    • ['ssh-hardening']['ssh']['server']['deny_groups'] - [] para configurar DenyGroups; si se especifica, se deniega el inicio de sesión para los usuarios cuyo grupo principal o lista de grupos suplementarios coincida con uno de los patrones.
    • ['ssh-hardening']['ssh']['server']['allow_groups'] - [] para configurar AllowGroups; si se especifica, el inicio de sesión solo se permite para los usuarios cuyo grupo principal o lista de grupos suplementarios coincida con uno de los patrones.
    • ['ssh-hardening']['ssh']['server']['print_motd'] - false. Establecer en true para habilitar la impresión del MOTD
    • ['ssh-hardening']['ssh']['server']['print_last_log'] - false. Establecer en true para habilitar la impresión de la información del último inicio de sesión
    • ['ssh-hardening']['ssh']['server']['banner'] - nil. Establezca una ruta como '/etc/issue.net' para habilitar el banner
    • ['ssh-hardening']['ssh']['server']['os_banner'] - false para deshabilitar la información de versión durante el protocolo de negociación (solo familia Debian). Establecer en true para habilitarla
    • ['ssh-hardening']['ssh']['server']['use_dns'] - nil para usar el valor predeterminado de openssh. Establecer en true o false para habilitar/deshabilitar la búsqueda DNS y la verificación del host remoto
    • ['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil para calcular el mejor valor según la versión del servidor; de lo contrario, establezca true o false
    • ['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. Tiempo en el que el inicio de sesión debe completarse con éxito; de lo contrario, el usuario se desconecta.
    • ['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. El número de intentos de autenticación por conexión
    • ['ssh-hardening']['ssh']['server']['max_sessions'] - 10 El número de sesiones por conexión
    • ['ssh-hardening']['ssh']['server']['password_authentication'] - false. Establecer en true si se debe habilitar la autenticación por contraseña
    • ['ssh-hardening']['ssh']['server']['log_level'] - verbose. El nivel de registro de sshd. Consulte LogLevel en man 5 sshd_config para conocer los valores posibles.
    • ['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. Establecer en true para habilitar la función SFTP del demonio OpenSSH
    • ['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. Establece la opción Match Group de SFTP para permitir SFTP solo para usuarios dedicados
    • ['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. Establece el directorio donde el usuario SFTP debe estar enjaulado (chroot)
    • ['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. Si no es nil, ruta completa a uno o varios archivos de claves autorizadas separados por espacios que se establecerán dentro del Match Group para acceso solo SFTP
    • ['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. Establecer en true si se debe habilitar la autenticación por contraseña
    • ['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. Si no es nil, se espera la ruta completa a uno o varios archivos de claves autorizadas separados por espacios.
    • ['ssh-hardening']['ssh']['server']['extras'] - {}. Agregue opciones de configuración adicionales; consulte a continuación para más detalles
    • ['ssh-hardening']['ssh']['server']['match_blocks'] - {}. Bloque de configuración Match; consulte a continuación para más detalles

    Uso

    Agregue las recetas a la run_list:

    root@kitploit:~
    "recipe[ssh-hardening]"
    

    Esto instalará ssh-server y ssh-client. Alternativamente, puede elegir solo uno mediante:

    root@kitploit:~
    "recipe[ssh-hardening::server]"
    "recipe[ssh-hardening::client]"
    

    Configure los atributos:

    root@kitploit:~
    "ssh-hardening": {
      "ssh" : {
        "server" : {
          "listen_to" : "10.2.3.4"
        }
      }
    }
    

    El valor predeterminado para listen_to es 0.0.0.0. Se recomienda encarecidamente cambiar el valor.

    SFTP

    Para habilitar la configuración SFTP, agregue una de las siguientes recetas a la run_list:

    root@kitploit:~
    "recipe[ssh-hardening]"
    o
    "recipe[ssh-hardening::server]"
    

    Configure los atributos:

    root@kitploit:~
    "ssh-hardening": {
      "ssh" : {
        "server": {
          "sftp" : {
          "enable" : true,
          "chroot" : "/home/sftp/%u",
          "group"  : "sftusers"
        }
        }
      }
    }
    

    Esto habilitará el Servidor SFTP y enjaulará (chroot) a cada usuario del grupo sftpusers en el directorio /home/sftp/%u.

    Opciones de Configuración Adicionales

    Se pueden agregar opciones de configuración adicionales a los archivos de configuración del cliente o del servidor. Esto se puede utilizar para sobrescribir valores establecidos estáticamente o agregar opciones de configuración que no estén disponibles de otro modo mediante atributos.

    La sintaxis es la siguiente:

    root@kitploit:~
    # => Configuración adicional del servidor
    default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
      extra['#Some Comment'] = 'Heres the Comment'
      extra['AuthenticationMethods'] =  'publickey,keyboard-interactive'
    end
    
    # => Configuración adicional del cliente
    default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
      extra['PermitLocalCommand'] = 'no'
      extra['Tunnel'] =  'no'
    end
    

    Opciones de Configuración Match para sshd

    Los bloques Match deben colocarse al final de sshd_config. Esto se puede lograr utilizando el árbol de atributos match_blocks:

    root@kitploit:~
    default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
      match['User root'] = <<~ROOT
        AuthorizedKeysFile .ssh/authorized_keys
      ROOT
      match['User git'] = <<~GIT
        Banner none
        AuthorizedKeysCommand /bin/false
        AuthorizedKeysFile .ssh/authorized_keys
        GSSAPIAuthentication no
        PasswordAuthentication no
      GIT
    end
    

    Pruebas Locales

    Instale chef-dk, VirtualBox o VMware Workstation y Vagrant.

    El linting se verifica con rubocop y foodcritic:

    root@kitploit:~
    $ chef exec rake lint
    .....
    

    Las pruebas unitarias/de especificación se realizan con chefspec:

    root@kitploit:~
    $ chef exec rake spec
    .....
    

    Las pruebas de integración se realizan con test-kitchen e inspec:

    root@kitploit:~
    $ chef exec rake kitchen
    .....
    # o puede usar kitchen directamente
    $ kitchen test
    

    Preguntas Frecuentes / Errores Comunes

    No puedo iniciar sesión en mi cuenta. He registrado la clave del cliente, pero aún así no me deja entrar.

    Si ha agotado todos los problemas típicos (firewall, red, clave faltante, clave incorrecta, cuenta deshabilitada, etc.), puede que su cuenta esté bloqueada. La forma más rápida de averiguarlo es observar el hash de la contraseña de su usuario:

    root@kitploit:~
    sudo grep myuser /etc/shadow
    

    Si el hash incluye un !, su cuenta está bloqueada:

    root@kitploit:~
    myuser:!:16280:7:60:7:::
    

    La forma adecuada de resolver esto es desbloquear la cuenta (passwd -u myuser). Si el usuario no tiene contraseña, puede desbloquearla mediante:

    root@kitploit:~
    usermod -p "*" myuser
    

    Alternativamente, si tiene la intención de usar PAM, habilítelo mediante ['ssh-hardening']['ssh']['use_pam'] = true. PAM permitirá que los usuarios bloqueados accedan con claves.

    ¿Por qué mi aplicación ya no se conecta mediante SSH?

    Siempre revise primero los archivos de registro y, si es posible, observe la negociación entre cliente y servidor que se completa al conectarse.

    Hemos visto algunos problemas en aplicaciones (basadas en python y ruby) que se deben al uso de un conjunto de criptografía obsoleto. Esto choca con este módulo de endurecimiento, que ha reducido la lista de cifrados, códigos de autenticación de mensajes (MAC) y algoritmos de intercambio de claves (KEX) a una selección más segura.

    Si considera que esto no es suficiente, no dude en activar los atributos cbc_requires para cifrados, weak_hmac para MAC y weak_kex para KEX en los espacios de nombres ['ssh-hardening']['ssh']['client'] o ['ssh-hardening']['ssh']['server'], según dónde desee admitirlos.

    ¿Por qué no puedo iniciar sesión en el servidor SFTP después de agregar un usuario a mi grupo SFTP?

    Este es un problema de propiedad de ChrootDirectory. sshd rechazará las conexiones SFTP a cuentas que estén configuradas para enjaularse (chroot) en cualquier directorio cuya propiedad/permisos sshd considere inseguros. Los requisitos estrictos de propiedad/permisos de sshd dictan que cada directorio en la ruta de chroot debe ser propiedad de root y solo escribible por el propietario. Por lo tanto, por ejemplo, si el entorno de chroot es /home, debe ser propiedad de root.

    Consulte https://wiki.archlinux.org/index.php/SFTP_chroot

    Colaboradores + Reconocimientos

    • Dominik Richter arlimus
    • Christoph Hartmann chris-rock
    • Bernhard Weisshuhn (a.k.a. bernhorst) bkw
    • Patrick Munch atomic111
    • Edmund Haselwanter ehaselwanter
    • Dana Merrick dmerrick
    • Anton Rieder aried3r
    • Trent Petersen Rockstar04
    • Petri Sirkkala sirkkalap
    • Jan Klare jklare
    • Zac Hallett zhallett
    • Petri Sirkkala sirkkalap
    • stribika
    • Siddhant Rath sidxz

    Este libro de recetas se basa principalmente en guías de:

    • NSA: Guide to the Secure Configuration of Red Hat Enterprise Linux 5
    • Deutsche Telekom, Group IT Security, Security Requirements (German)

    ¡Gracias a todos ustedes!!

    Contribuciones

    Consulte la guía para colaboradores.

    Licencia y Autor

    • Autor:: Dominik Richter [email protected]
    • Autor:: Deutsche Telekom AG

    Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede usar este archivo excepto en cumplimiento con la Licencia. Puede obtener una copia de la Licencia en

    root@kitploit:~
    http://www.apache.org/licenses/LICENSE-2.0
    

    Salvo que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y las limitaciones bajo la Licencia.

    Descargar herramienta