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
puppet-os-hardening — Este módulo de Puppet proporciona numerosas configuraciones relacionadas con la seguridad, ofreciendo una protección base integral. | Kitploit
Herramientas/GitHubGitHub/dev-sec/puppet-os-hardening
Seguridad de Infraestructura en la NubeEscáneres de VulnerabilidadesAuditoría de ConfiguraciónSeguridad de RedesDevSecOpsAutenticación
GitHubdev-sec/puppet-os-hardening

puppet-os-hardening

Este módulo de Puppet proporciona numerosas configuraciones relacionadas con la seguridad, ofreciendo una protección base integral.

Ver Repositorio
29110014hace 1 mesRevisado 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

Endurecimiento del SO con Puppet

Puppet Forge Version Puppet Forge Downloads Puppet Forge Endorsement Build Status

Tabla de contenidos

  1. Descripción del módulo: qué hace el módulo y por qué es útil
  2. Configuración: los conceptos básicos para empezar con os_hardening
    • Requisitos de configuración
    • Primeros pasos con os_hardening
  3. Uso: opciones de configuración y funcionalidad adicional
    • Importante para Puppet Enterprise
    • Parámetros
    • Uso de Hiera
  • Nota sobre paquetes deseados/no deseados y servicios deshabilitados
  • Limitaciones: compatibilidad con sistemas operativos, etc.
  • Desarrollo: guía para contribuir al módulo
  • Pruebas: controles de calidad para tus cambios en el código
    • Pruebas locales
    • Pruebas PDK
    • Pruebas de integración (Docker)
    • Pruebas de integración (DigitalOcean)
    • Pruebas CI de PR y forks
  • Ponte en contacto
  • Colaboradores + agradecimientos
  • Licencia y autor
  • Descripción del módulo

    Este módulo de Puppet proporciona una configuración segura de tu sistema operativo base con endurecimiento y forma parte del DevSec Hardening Framework.

    Configuración

    Requisitos de configuración

    • Puppet OpenSource o Enterprise
    • Módulo stdlib
    • Módulo sysctl

    Primeros pasos con os_hardening

    Después de añadir este módulo, puedes usar la clase:

    root@kitploit:~
    class { 'os_hardening': }
    

    Todos los parámetros están contenidos dentro de la clase principal os_hardening, por lo que solo tienes que pasarlos así:

    root@kitploit:~
    class { 'os_hardening':
      enable_ipv4_forwarding => true,
    }
    

    Uso

    IMPORTANTE para Puppet Enterprise

    Si estás usando este módulo en un entorno PE, tienes que establecer pe_environment = true De lo contrario, Puppet mostrará un error (¡recurso duplicado!).

    Parámetros

    • system_environment = 'default' define el contexto en el que se ejecuta el sistema. Algunas opciones no funcionan con docker/lxc
    • pe_environment = false establécelo en true si estás usando Puppet Enterprise IMPORTANTE: ver arriba
    • extra_user_paths = [] añade rutas adicionales a la variable PATH del usuario (por defecto está vacío).
    • umask = undef umask utilizado para la creación de nuevos directorios de inicio por useradd / newusers (p. ej. '027')
    • maildir = undef ruta para maildir (p. ej. '/var/mail')
    • usergroups = true true si quieres grupos separados para cada usuario, false en caso contrario
    • sys_uid_min = undef y sys_gid_min = undef anula la configuración predeterminada de login.defs
    • password_max_age = 60 edad máxima de la contraseña
    • password_min_age = 7 edad mínima de la contraseña (antes de permitir cualquier otro cambio de contraseña)
    • password_warn_age = 7 días de aviso antes de que venza el cambio de contraseña
    • login_retries = 5 el número máximo de reintentos de inicio de sesión si la contraseña es incorrecta (normalmente anulado por PAM / auth_retries)
    • login_timeout = 60 tiempo de espera de autenticación en segundos, por lo que el inicio de sesión saldrá si este tiempo pasa
    • chfn_restrict = '' qué campos pueden ser cambiados por usuarios normales usando chfn
    • allow_login_without_home = false true para permitir que los usuarios sin directorio de inicio inicien sesión
    • allow_change_user = false si un usuario puede usar su para cambiar su inicio de sesión
    • ignore_users = [] matriz de cuentas de usuario del sistema que no deben ser endurecidas (contraseña deshabilitada y shell establecida en /usr/sbin/nologin)
    • folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin'] carpetas para asegurarse de que el grupo y el resto del mundo no tengan acceso de escritura a ellas ni a ninguno de sus contenidos
    • ignore_max_files_warnings = false true si no quieres que Puppet registre advertencias de max_files y rendimiento en la recursión de carpetas con > 1000 archivos, p. ej. /bin /usr/bin
    • recurselimit = 5 profundidad del directorio para la comprobación recursiva de permisos
    • passwdqc_enabled = true true si quieres usar una comprobación de contraseñas seguras en PAM usando passwdqc
    • auth_retries = 5 el número máximo de intentos de autenticación, antes de que la cuenta se bloquee durante un tiempo
    • auth_lockout_time = 600 tiempo en segundos que debe pasar si la cuenta se bloqueó debido a demasiados intentos de autenticación fallidos
    • passwdqc_options = 'min=disabled,disabled,16,12,8' establécelo en cualquier línea de opciones (como cadena) que quieras pasar a passwdqc
    • manage_pam_unix = false true si quieres que pam_unix sea gestionado por este módulo
    • enable_pw_history = true true si quieres que pam_unix recuerde el historial de contraseñas para evitar la reutilización de contraseñas (requiere manage_pam_unix = true)
    • pw_remember_last = 5 el número de últimas contraseñas (p. ej. 5 evitará que el usuario reutilice cualquiera de sus últimas 5 contraseñas)
    • only_root_may_su = false true cuando solo root y los miembros del grupo wheel pueden usar su; debe ser true para el cumplimiento del CIS Benchmark
    • root_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6'] TTY registrados para root
    • whitelist = [] todos los archivos que deben conservar sus bits SUID/SGID si están establecidos (se combinarán con la lista blanca predefinida de archivos)
    • blacklist = [] todos los archivos a los que se les deben eliminar los bits SUID/SGID si están establecidos (se combinarán con la lista negra predefinida de archivos)
    • remove_from_unknown = false true si quieres eliminar los bits SUID/SGID de cualquier archivo que no esté configurado explícitamente en una blacklist. Esto hará que cada ejecución de Puppet busque en los sistemas de archivos montados bits SUID/SGID que no estén configurados en la lista negra predeterminada y de usuario. Si encuentra un bit SUID/SGID, se eliminará, a menos que este archivo esté en tu whitelist.
    • dry_run_on_unknown = false como remove_from_unknown anterior, solo que los bits SUID/SGID no se eliminan. Aún así buscará en los sistemas de archivos bits SUID/SGID, pero solo los imprimirá en tu registro. Esta opción solo se recomienda cuando configuras por primera vez remove_from_unknown para bits SUID/SGID, para que puedas ver los archivos que se están cambiando y hacer ajustes a tu whitelist y blacklist.
    • enable_module_loading = true true si quieres permitir cambiar los módulos del kernel una vez que el sistema está en ejecución (p. ej. modprobe, rmmod)
    • load_modules = [] carga estos módulos a través de initramfs si enable_module_loading es false
    • disable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf'] matriz de sistemas de archivos (módulos del kernel) que deben deshabilitarse
    • cpu_vendor = 'intel' solo se requiere si enable_module_loading = false: establece el proveedor de CPU para los módulos a cargar
    • icmp_ratelimit = '100' valor predeterminado '100', permite sobrescribir, necesita String
    • desktop_enabled = false true si este es un sistema de escritorio, es decir, Xorg, KDE/GNOME/Unity/etc
    • enable_ipv4_forwarding = false true si este sistema requiere reenvío de paquetes en IPv4 (p. ej. Router), false en caso contrario
    • manage_ipv6 = true true para endurecer la configuración de ipv6, false para ignorar ipv6 por completo
    • enable_ipv6 = false false para deshabilitar ipv6 en este sistema, true para habilitarlo
    • enable_ipv6_forwarding = false true si este sistema requiere reenvío de paquetes en IPv6 (p. ej. Router), false en caso contrario
    • arp_restricted = true true si quieres que el comportamiento de anunciar y responder a ARP esté restringido, false en caso contrario
    • arp_ignore_samenet = false true descartará los paquetes que no sean de la misma subred (arp_ignore = 2), false solo comprobará la IP de destino (arp_ignore = 1)
    • enable_sysrq = false true para habilitar la tecla mágica sysrq, false en caso contrario
    • enable_core_dump = false false para evitar la creación de volcados de núcleo, true en caso contrario
    • enable_stack_protection = true para la aleatorización del diseño del espacio de direcciones. ASLR puede ayudar a derrotar ciertos tipos de ataques de desbordamiento de búfer. ASLR puede ubicar la base, las bibliotecas, el montón y la pila en posiciones aleatorias en el espacio de direcciones de un proceso, lo que dificulta que un programa atacante prediga la dirección de memoria de la siguiente instrucción.
    • enable_rpfilter = true true para habilitar el filtrado de ruta inversa (descartar paquetes falsos), false en caso contrario
    • rpfilter_loose = false (solo si enable_rpfilter es true) modo flexible (rp_filter = 2) si es true, modo estricto en caso contrario
    • enable_log_martians = true true para habilitar el registro de paquetes de red sospechosos / no enrutables, false en caso contrario ADVERTENCIA: ¡esto podría generar archivos de registro enormes!
    • unwanted_packages = [] paquetes que deben eliminarse del sistema
    • wanted_packages = [] paquetes que deben añadirse al sistema
    • disabled_services = [] servicios que no deben estar habilitados
    • enable_grub_hardening = false establécelo en true para habilitar algunas reglas de endurecimiento de grub
    • grub_user = 'root' el nombre de usuario de grub que debe proporcionarse al cambiar la configuración en el prompt de grub
    • grub_password_hash = '' un hash de contraseña creado con grub-mkpasswd-pbkdf2 que está asociado con el grub_user
    • boot_without_password = true configura Grub para que solo requiera una contraseña al cambiar una entrada, no al arrancar una entrada existente
    • system_umask = undef si esta variable está establecida, configura el umask para todos los usuarios del sistema (p. ej. '027')
    • manage_home_permissions = false establécelo en true para gestionar los permisos de archivos y directorios de los usuarios locales (g-w,o-rwx)
    • ignore_home_users = [] matriz de usuarios que no deben ser restringidos por manage_home_permissions
    • manage_log_permissions = false establécelo en true para gestionar los permisos de archivos de registro (g-wx,o-rwx)
    • restrict_log_dir = ['/var/log/'] establece el directorio de registro principal
    • ignore_restrict_log_dir = [] matriz para excluir directorios de registro bajo el directorio de registro principal
    • ignore_files_in_folder_to_restrict = [] matriz para ignorar archivos a endurecer en directorios bajo la matriz folder_to_restrict
    • manage_cron_permissions = false establécelo en true para gestionar los permisos de archivos cron (og-rwx)
    • enable_sysctl_config = true establécelo en false para deshabilitar la configuración de sysctl
    • manage_system_users = true establécelo en false para deshabilitar la gestión de usuarios del sistema (contraseña vacía y establecimiento del shell nologin)
    • shadow_group = undef anula la propiedad del grupo de /etc/shadow
    • shadow_mode = undef anula los permisos de archivo de /etc/shadow

    Uso de Hiera

    También es posible establecer los parámetros en Hiera así:

    root@kitploit:~
    os_hardening::password_max_age:  90
    os_hardening::password_min_age:  0
    os_hardening::password_warn_age: 14
    os_hardening::unwanted_packages: ['telnet']
    os_hardening::ignore_users:      ['git','githook','ansible','apache','puppetboard']
    

    Nota sobre paquetes deseados/no deseados y servicios deshabilitados

    Como el CIS Distribution Independent Linux Benchmark es un buen punto de partida en cuanto al endurecimiento de sistemas, se consideró apropiado implementar una forma fácil de tratar con casos puntuales para los que no se quiere escribir un módulo completo.

    Por ejemplo, para aumentar el cumplimiento de CIS DIL en un sistema Debian, se debería establecer lo siguiente:

    root@kitploit:~
    wanted_packages   => ['ntp'],
    unwanted_packages => ['telnet'],
    disabled_services => ['rsync'],
    

    La configuración predeterminada de NTP es en realidad bastante buena para la mayoría de las situaciones, por lo que no es inmediatamente necesario implementar un módulo. Sin embargo, si usas un módulo para controlar estos servicios, eso es por supuesto preferible.

    Limitaciones

    Este módulo ha sido probado y debería ejecutarse en la mayoría de las distribuciones de Linux. Para una lista extensa de sistemas operativos compatibles, consulta metadata.json

    Desarrollo

    Si quieres contribuir, sigue nuestra guía de contribución.

    Pruebas

    Pruebas locales

    Deberías tener el intérprete de Ruby instalado en tu sistema. Podría ser una buena idea usar rvm para ese propósito. Además de eso, tienes que instalar el Puppet Development Kit PDK y Docker Community Edition, ya que las pruebas de integración se ejecutan en contenedores Docker.

    Para todas nuestras pruebas de integración usamos test-kitchen. Si no estás familiarizado con test-kitchen, consulta su guía.

    Pruebas PDK

    root@kitploit:~
    # Pruebas de sintaxis y lint
    pdk validate
    
    # Pruebas unitarias
    pdk test unit
    

    Pruebas de integración (Docker)

    De forma predeterminada, las pruebas de integración se ejecutarán en contenedores Docker; desafortunadamente, no todas las pruebas pueden ejecutarse en entornos de contenedores (p. ej. configuraciones de sysctl).

    root@kitploit:~
    # Instalar dependencias
    gem install bundler
    bundle install
    
    # listar todas las instancias de prueba
    bundle exec kitchen list
    
    # prueba rápida en una máquina
    bundle exec kitchen test ubuntu-16-04-puppet5
    
    # prueba en todas las máquinas
    bundle exec kitchen test
    

    Pruebas de integración (DigitalOcean)

    Para pruebas de integración completas con DigitalOcean, tienes que obtener una cuenta allí y configurar algunas variables de entorno:

    • KITCHEN_LOCAL_YAML=kitchen.do.yml
    • DIGITALOCEAN_ACCESS_TOKEN - token de acceso para DigitalOcean
    • DIGITALOCEAN_SSH_KEY_IDS - ID en DigitalOcean de tu clave ssh, consulta esto para más información

    La clave ssh tiene que llamarse ~/.ssh/do_ci y añadirse a tu perfil en DigitalOcean. Después de esto, estás listo para ejecutar las pruebas como se describe en Pruebas de integración (Docker).

    Si quieres ejecutar las pruebas de integración completas con Github Actions en tu fork, tendrás que añadir estas variables de entorno en la configuración de tu fork:

    • KITCHEN_LOCAL_YAML=kitchen.do.yml
    • DIGITALOCEAN_ACCESS_TOKEN - token de acceso para DigitalOcean
    • CI_SSH_KEY - parte privada de una clave ssh, disponible en DigitalOcean para tus instancias, en forma codificada en base64 (p. ej. cat id_rsa | base64 -w0 ; echo)
    • DIGITALOCEAN_SSH_KEY_IDS - ID en DigitalOcean de CI_SSH_KEY, consulta esto para más información

    Pruebas CI de PR y forks

    Tus parches se probarán automáticamente a través de Github Actions. El resumen de pruebas es visible en Github en tu PR; los detalles se pueden encontrar en las pruebas vinculadas.

    Ponte en contacto

    Puedes contactarnos de varias maneras:

    • @DevSecIO en Twitter
    • Lista de correo para preguntas y discusión general: [email protected] [suscribirse]
    • Lista de correo con anuncios de versiones (no se pueden publicar mensajes aquí): [email protected] [suscribirse]

    Colaboradores + agradecimientos

    • Dominik Richter arlimus
    • Edmund Haselwanter ehaselwanter
    • Christoph Hartmann chris-rock
    • Thomas Dütsch a-tom
    • Patrick Meier atomic111
    • Artem Sidorenko artem-sidorenko
    • Kurt Huwig kurthuwig
    • Matthew Haughton 3flex
    • Reik Keutterling spielkind
    • Daniel Dreier danieldreier
    • Timo Goebel timogoebel
    • Tristan Helmich fadenb
    • Michael Geiger mcgege
    • Timo Bergemann LooOOooM

    Por el port original de chef-os-hardening a puppet:

    • Artem Sidorenko artem-sidorenko
    • Frank Kloeker eumel8

    ¡¡Gracias a todos!!

    Licencia y autor

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

    Licenciado bajo la Apache License, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en cumplimiento con 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 el idioma específico que rige los permisos y las limitaciones bajo la Licencia.

    Descargar herramienta