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
ansible-ssh-hardening — Este rol de Ansible proporciona numerosas configuraciones de ssh relacionadas con la seguridad, ofreciendo una protección base integral. | Kitploit
Herramientas/GitHubGitHub/dev-sec/ansible-ssh-hardening
Seguridad de Infraestructura en la NubeAuditoría de ConfiguraciónSeguridad de RedesDevSecOpsAutenticaciónArchived
GitHubdev-sec/ansible-ssh-hardening

ansible-ssh-hardening

Este rol de Ansible proporciona numerosas configuraciones de ssh relacionadas con la seguridad, ofreciendo una protección base integral.

Ver Repositorio
7851909hace 5 añosRevisado por Kitploit
Sitio web

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 →
Compartir

ssh-hardening (Rol de Ansible)

Atención: Este rol ha sido migrado a nuestra hardening-collection:

  • https://github.com/dev-sec/ansible-os-hardening/
  • https://galaxy.ansible.com/devsec/hardening

¡Por favor, abre cualquier issue y pull request allí!

Requisitos

  • Ansible > 2.5

Variables del Rol

  • network_ipv6_enable
    • Valor por defecto: false
    • Descripción: true si se necesita IPv6. ssh_listen_to también debe configurarse para escuchar en direcciones IPv6 (por ejemplo [::]).
  • ssh_server_ports
    • Valor por defecto: ['22']
    • Descripción: puertos en los que el servidor ssh debe escuchar
  • ssh_client_port
  • Valor por defecto: '22'
  • Descripción: puerto al que el cliente ssh debe conectarse
  • ssh_listen_to
    • Valor por defecto: ['0.0.0.0']
    • Descripción: una o más direcciones IP, a las que el servidor ssh debe escuchar. El valor por defecto son todas las direcciones IPv4, pero por razones de seguridad debería configurarse con direcciones específicas.
  • ssh_host_key_files
    • Valor por defecto: []
    • Descripción: claves de host para sshd. Si está vacío, se usarán ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'] en la medida en que la versión de sshd instalada lo soporte
  • ssh_host_key_algorithms
    • Valor por defecto: []
    • Descripción: algoritmos de clave de host que ofrece el servidor. Si está vacío, se usará la lista por defecto; de lo contrario, sobrescribe la configuración con la lista de algoritmos especificada
  • ssh_client_alive_interval
    • Valor por defecto: 600
    • Descripción: especifica un intervalo para enviar mensajes de keepalive
  • ssh_client_alive_count
    • Valor por defecto: 3
    • Descripción: define cuántas veces se envían los mensajes de keep-alive
  • ssh_permit_tunnel
    • Valor por defecto: false
    • Descripción: true si se requiere túnel de puertos SSH
  • ssh_remote_hosts
    • Valor por defecto: []
    • Descripción: uno o más hosts y sus opciones personalizadas para el cliente ssh. El valor por defecto está vacío. Consulta los ejemplos en defaults/main.yml.
  • ssh_permit_root_login
    • Valor por defecto: no
    • Descripción: deshabilita el login de root. Configúralo en without-password o yes para habilitar el login de root
  • ssh_allow_tcp_forwarding
    • Valor por defecto: no
    • Descripción: 'no' para deshabilitar el reenvío TCP. Configúralo en 'yes' para permitir el reenvío TCP. Si usas OpenSSH >= 6.2, puedes especificar 'yes', 'no', 'all' o 'local'.
      Nota: los valores pasados a esta variable deben ser cadenas, por lo que los valores 'yes' y 'no' deben pasarse entre comillas.
  • ssh_gateway_ports
    • Valor por defecto: false
    • Descripción: false para deshabilitar el enlace de puertos reenviados a direcciones que no sean de loopback. Configúralo en true para forzar el enlace en la dirección wildcard. Configúralo en clientspecified para permitir que el cliente especifique a qué dirección enlazar.
  • ssh_allow_agent_forwarding
    • Valor por defecto: false
    • Descripción: false para deshabilitar el reenvío de agente. Configúralo en true para permitir el reenvío de agente.
  • ssh_x11_forwarding
    • Valor por defecto: false
    • Descripción: false para deshabilitar el reenvío X11. Configúralo en true para permitir el reenvío X11.
  • ssh_pam_support
    • Valor por defecto: true
    • Descripción: true si SSH tiene soporte PAM.
  • ssh_use_pam
    • Valor por defecto: true
    • Descripción: false para deshabilitar la autenticación pam.
  • ssh_gssapi_support
    • Valor por defecto: false
    • Descripción: true si SSH tiene soporte GSSAPI.
  • ssh_kerberos_support
    • Valor por defecto: true
    • Descripción: true si SSH tiene soporte Kerberos.
  • ssh_deny_users
    • Valor por defecto: ''
    • Descripción: si se especifica, se deshabilita el login para nombres de usuario que coincidan con uno de los patrones.
  • ssh_allow_users
    • Valor por defecto: ''
    • Descripción: si se especifica, el login solo se permite para nombres de usuario que coincidan con uno de los patrones.
  • ssh_deny_groups
    • Valor por defecto: ''
    • Descripción: si se especifica, se deshabilita el login para usuarios cuyo grupo principal o lista de grupos suplementarios coincida con uno de los patrones.
  • ssh_allow_groups
    • Valor por defecto: ''
    • Descripción: si se especifica, el login solo se permite para usuarios cuyo grupo principal o lista de grupos suplementarios coincida con uno de los patrones.
  • ssh_authorized_keys_file
    • Valor por defecto: ''
    • Descripción: cambia el archivo por defecto que contiene las claves públicas que se pueden usar para la autenticación de usuarios.
  • ssh_trusted_user_ca_keys_file
    • Valor por defecto: ''
    • Descripción: especifica el archivo que contiene las claves públicas de las autoridades certificadoras de confianza utilizadas para firmar certificados de usuario.
  • ssh_trusted_user_ca_keys
    • Valor por defecto: []
    • Descripción: establece las claves públicas de las autoridades certificadoras de confianza utilizadas para firmar certificados de usuario. Solo se usa si ssh_trusted_user_ca_keys_file está configurado.
  • ssh_authorized_principals_file
    • Valor por defecto: ''
    • Descripción: especifica el archivo que contiene los principals permitidos. Solo se usa si ssh_trusted_user_ca_keys_file está configurado.
  • ssh_authorized_principals
    • Valor por defecto: []
    • Descripción: lista de hashes que contienen rutas de archivo y principals autorizados; consulta default_custom.yml para todas las opciones. Solo se usa si ssh_authorized_principals_file está configurado.
  • ssh_print_motd
    • Valor por defecto: false
    • Descripción: false para deshabilitar la impresión del MOTD
  • ssh_print_pam_motd
    • Valor por defecto: false
    • Descripción: false para deshabilitar la impresión del MOTD mediante pam (Debian y Ubuntu)
  • ssh_print_last_log
    • Valor por defecto: false
    • Descripción: false para deshabilitar la visualización de la información del último login
  • sftp_enabled
    • Valor por defecto: false
    • Descripción: true para habilitar la configuración de sftp
  • sftp_umask
    • Valor por defecto: '0027'
    • Descripción: especifica el umask para sftp
  • sftp_chroot
    • Valor por defecto: true
    • Descripción: false para deshabilitar chroot para sftp
  • sftp_chroot_dir
    • Valor por defecto: /home/%u
    • Descripción: cambia la ubicación por defecto del chroot de sftp
  • ssh_client_roaming
    • Valor por defecto: false
    • Descripción: habilita el roaming experimental del cliente
  • sshd_moduli_file
    • Valor por defecto: '/etc/ssh/moduli'
    • Descripción: ruta al archivo de moduli SSH
  • sshd_moduli_minimum
    • Valor por defecto: 2048
    • Descripción: elimina los parámetros Diffie-Hellman más pequeños que el tamaño definido para mitigar logjam
  • ssh_challengeresponseauthentication
    • Valor por defecto: false
    • Descripción: especifica si se permite la autenticación challenge-response (por ejemplo, mediante PAM)
  • ssh_client_password_login
    • Valor por defecto: false
    • Descripción: true para permitir la autenticación basada en contraseña con el cliente ssh
  • ssh_server_password_login
    • Valor por defecto: false
    • Descripción: true para permitir la autenticación basada en contraseña con el servidor ssh
  • ssh_banner
    • Valor por defecto: false
    • Descripción: true para imprimir un banner en el login
  • ssh_banner_path
    • Valor por defecto: '/etc/sshd/banner.txt'
    • Descripción: ruta al archivo de banner SSH
  • ssh_client_hardening
    • Valor por defecto: true
    • Descripción: false para dejar de endurecer el cliente
  • ssh_client_port
    • Valor por defecto: '22'
    • Descripción: especifica el número de puerto para conectarse al host remoto.
  • ssh_client_compression
    • Valor por defecto: false
    • Descripción: especifica si el cliente solicita compresión.
  • ssh_compression
    • Valor por defecto: false
    • Descripción: especifica si la compresión del lado del servidor está habilitada después de que el usuario se haya autenticado correctamente.
  • ssh_login_grace_time
    • Valor por defecto: 30s
    • Descripción: especifica el tiempo permitido para la autenticación exitosa en el servidor SSH
  • ssh_max_auth_retries
    • Valor por defecto: 2
    • Descripción: especifica el número máximo de intentos de autenticación permitidos por conexión.
  • ssh_max_sessions
    • Valor por defecto: 10
    • Descripción: especifica el número máximo de sesiones abiertas permitidas desde una conexión determinada.
  • ssh_print_debian_banner
    • Valor por defecto: false
    • Descripción: true para imprimir el banner específico de Debian
  • ssh_server_enabled
    • Valor por defecto: true
    • Descripción: false para deshabilitar el servidor opensshd
  • ssh_server_hardening
    • Valor por defecto: true
    • Descripción: false para dejar de endurecer el servidor
  • ssh_server_match_address
    • Valor por defecto: ''
    • Descripción: introduce un bloque condicional. Si todos los criterios de la línea Match se cumplen, las palabras clave de las líneas siguientes sobrescriben las establecidas en la sección global del archivo de configuración, hasta otra línea Match o el final del archivo.
  • ssh_server_match_group
    • Valor por defecto: ''
    • Descripción: introduce un bloque condicional. Si todos los criterios de la línea Match se cumplen, las palabras clave de las líneas siguientes sobrescriben las establecidas en la sección global del archivo de configuración, hasta otra línea Match o el final del archivo.
  • ssh_server_match_user
    • Valor por defecto: ''
    • Descripción: introduce un bloque condicional. Si todos los criterios de la línea Match se cumplen, las palabras clave de las líneas siguientes sobrescriben las establecidas en la sección global del archivo de configuración, hasta otra línea Match o el final del archivo.
  • ssh_server_match_local_port
    • Valor por defecto: ''
    • Descripción: introduce un bloque condicional. Si todos los criterios de la línea Match se cumplen, las palabras clave de las líneas siguientes sobrescriben las establecidas en la sección global del archivo de configuración, hasta otra línea Match o el final del archivo.
  • ssh_server_permit_environment_vars
    • Valor por defecto: no
    • Descripción: yes para especificar que ~/.ssh/environment y las opciones environment= en ~/.ssh/authorized_keys son procesadas por sshd. Con la versión 7.8 de openssh es posible especificar una lista blanca de nombres de variables de entorno además de los ajustes globales "yes" o "no"
  • ssh_server_accept_env_vars
    • Valor por defecto: ''
    • Descripción: especifica qué variables de entorno enviadas por el cliente se copiarán en el entorno de la sesión; varias variables de entorno pueden estar separadas por espacios en blanco
  • ssh_use_dns
    • Valor por defecto: false
    • Descripción: especifica si sshd debe buscar el nombre del host remoto y comprobar que el nombre de host resuelto para la dirección IP remota se asigna de nuevo a la misma dirección IP.
  • ssh_server_revoked_keys
    • Valor por defecto: []
    • Descripción: una lista de claves públicas revocadas que el servidor ssh siempre rechazará; útil para revocar claves conocidas como débiles o comprometidas.
  • ssh_max_startups
    • Valor por defecto: '10:30:100'
    • Descripción: especifica el número máximo de conexiones no autenticadas concurrentes al daemon SSH.
  • ssh_macs
    • Valor por defecto: []
    • Descripción: cambia esta lista para sobrescribir los macs. Los valores por defecto se encuentran en defaults/main.yml
  • ssh_kex
    • Valor por defecto: []
    • Descripción: cambia esta lista para sobrescribir los kexs. Los valores por defecto se encuentran en defaults/main.yml
  • ssh_ciphers
    • Valor por defecto: []
    • Descripción: cambia esta lista para sobrescribir los ciphers. Los valores por defecto se encuentran en defaults/main.yml
  • ssh_custom_options
    • Valor por defecto: []
    • Descripción: líneas personalizadas para la configuración del cliente SSH
  • sshd_custom_options
    • Valor por defecto: []
    • Descripción: líneas personalizadas para la configuración del daemon SSH
  • sshd_syslog_facility
    • Valor por defecto: 'AUTH'
    • Descripción: el código de facility que se usa al registrar mensajes de sshd
  • sshd_log_level
    • Valor por defecto: 'VERBOSE'
    • Descripción: el nivel de verbosidad que se usa al registrar mensajes de sshd
  • sshd_strict_modes
    • Valor por defecto: true
    • Descripción: comprueba los modos de archivo y la propiedad de los archivos del usuario y del directorio home antes de aceptar el login
  • sshd_authenticationmethods
    • Valor por defecto: publickey
    • Descripción: especifica los métodos de autenticación que deben completarse correctamente para que un usuario reciba acceso. Asegúrate de configurar todas las variables necesarias para tu método de autenticación seleccionado. Los valores por defecto se encuentran en defaults/main.yml
  • Configurar ajustes no listados en las variables del rol

    Si quieres configurar opciones de ssh que no están listadas arriba, puedes usar ssh_custom_options (para /etc/ssh/ssh_config) o sshd_custom_options (para /etc/ssh/sshd_config) para configurarlas. Estas opciones se establecerán al principio del archivo, de modo que puedes sobrescribir opciones más abajo en el archivo.

    Ejemplo de playbook:

    root@kitploit:~
    - hosts: localhost
      roles:
        - dev-sec.ssh-hardening
      vars:
        ssh_custom_options:
          - "Include /etc/ssh/ssh_config.d/*"
        sshd_custom_options:
          - "AcceptEnv LANG"
    

    Cambiar el puerto por defecto y la idempotencia

    Este rol usa el puerto por defecto 22 o el puerto configurado en el inventario para conectarse al servidor. Si el puerto ssh por defecto se cambia mediante ssh_server_ports, una vez que el servidor ssh se reinicia, seguirá intentando conectarse usando el puerto anterior. Para poder ejecutar este rol de nuevo en el mismo servidor, el inventario deberá actualizarse para usar el nuevo puerto ssh.

    Si la idempotencia es importante, considera usar el rol ssh-hardening-fallback, que es un wrapper alrededor de este rol y que vuelve al puerto 22 si el puerto configurado no es alcanzable.

    Ejemplo de Playbook

    root@kitploit:~
    - hosts: localhost
      roles:
        - dev-sec.ssh-hardening
    

    Pruebas Locales

    La forma preferida de probar el rol localmente es usar Docker. Tendrás que instalar Docker en tu sistema. Consulta Get started para obtener un paquete de Docker adecuado para tu sistema.

    También puedes usar vagrant y Virtualbox o VMWare para ejecutar pruebas localmente. Tendrás que instalar Virtualbox y Vagrant en tu sistema. Consulta Vagrant Downloads para obtener un paquete de vagrant adecuado para tu sistema. Para todas nuestras pruebas usamos test-kitchen. Si no estás familiarizado con test-kitchen, consulta su guía.

    A continuación, instala test-kitchen:

    root@kitploit:~
    # Instalar dependencias
    gem install bundler
    bundle install
    

    Pruebas con Docker

    root@kitploit:~
    # prueba rápida en una máquina
    bundle exec kitchen test ssh-ubuntu1804-ansible-latest
    
    # prueba en todas las máquinas
    bundle exec kitchen test
    
    # para desarrollo
    bundle exec kitchen create ssh-ubuntu1804-ansible-latest
    bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
    bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
    
    # limpieza
    bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
    

    Pruebas con Virtualbox

    root@kitploit:~
    # prueba rápida en una máquina
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
    
    # prueba en todas las máquinas
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
    
    # para desarrollo
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
    

    Para más información, consulta test-kitchen

    FAQ / Errores comunes

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

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

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

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

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

    La forma correcta de resolverlo es desbloquear la cuenta (passwd -u myuser). Si el usuario no tiene contraseña, puedes desbloquearla mediante:

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

    Alternativamente, si tienes la intención de usar PAM, lo habilitaste mediante ssh_use_pam: true. PAM permitirá que los usuarios bloqueados entren con claves.

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

    Mira siempre primero los archivos de registro y, si es posible, 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 a su uso de un conjunto criptográfico obsoleto. Esto choca con este módulo de hardening, que ha reducido la lista de ciphers, códigos de autenticación de mensajes (MACs) y algoritmos de intercambio de claves (KEX) a una selección más segura.

    ¡Después de usar el rol, el módulo template/copy/file de Ansible ya no funciona!

    Este rol desactiva SFTP por defecto. Ansible usa SFTP por defecto para transferir archivos a los hosts remotos. Tienes que configurar scp_if_ssh = True en tu ansible.cfg. De esta manera, Ansible usa SCP para copiar archivos. Alternativamente, puedes habilitar SFTP de nuevo configurando sftp_enabled en true.

    No se puede reiniciar el servicio sshd por falta de privilegios

    Si obtienes el siguiente error al ejecutar el handler "restart sshd"

    root@kitploit:~
    Unable to restart service ssh: Failed to restart ssh.service: Access denied
    

    o

    root@kitploit:~
    failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
    

    ejecuta el playbook como root (sin become: yes a nivel de playbook), o añade become: yes al handler.

    Esto es un bug de Ansible: consulta aquí y aquí para más información.

    Contribuciones

    Consulta la guía para contribuidores.

    Licencia y Autor

    • Autor:: Sebastian Gumprich
    • Autor:: Christoph Hartmann [email protected]

    Licenciado bajo la Apache License, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en cumplimiento de la Licencia. Puedes 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. Consulta la Licencia para conocer los permisos y limitaciones específicos bajo la Licencia.

    Descargar herramienta