Compartir a través de


¿Qué es el control de posición ssh para Windows?

El control de posición ssh permite auditar y configurar la posición de seguridad del servidor SSH en Windows Server 2025. Ssh Posture Control se integra sin problemas con los servicios de gobernanza de Azure (directiva, configuración de máquina) para que pueda:

  • Garantizar el cumplimiento de los estándares sshd en el sector o la organización
  • Reducción de la superficie expuesta a ataques de la administración remota basada en sshd
  • Garantizar una configuración coherente de SSH en toda la flota para garantizar la seguridad y la productividad

Captura de pantalla que muestra la lista de comprobaciones SSH compatibles

Para ayudarle a demostrar el cumplimiento de los auditores (y para ayudarle a tomar medidas cuando sea necesario), cada comprobación de cumplimiento incluye evidencia a través del campo Razones que indica cómo se determinó el cumplimiento o el incumplimiento.

Puede personalizar los parámetros sshd (número de puerto, grupos permitidos, etc.) o usar los valores predeterminados de la directiva.

Documentación para empezar

Selección del comportamiento de solo auditoría frente a auditoría y configuración

Al asignar una directiva de control de posición SSH, puede elegir el comportamiento de solo auditoría (también conocido como "Auditoría") o el comportamiento de auditoría y configuración (también conocido como "Configurar").

Definición de directiva Efecto de Azure Policy Notas sobre lo que se espera
Comportamiento de solo auditoría **Audit** SSH Posture Control on Windows machines auditIfNotExists La directiva incluye una configuración más restrictiva en comparación con muchas imágenes populares del sistema. Por ejemplo, denegación de acceso ssh raíz. En consecuencia, espere ver los estados no compatibles notificados.
Comportamiento de auditoría y configuración **Configure** SSH Posture Control on Windows machines deployIfNotExists Como se indicó anteriormente, puede ver que los estados no compatibles se notifican inicialmente. Posteriormente, las máquinas se volverán a configurar para que coincidan con la directiva, lo que da lugar a los estados finales compatibles .

En el caso de las máquinas existentes, los administradores suelen empezar con el comportamiento de solo auditoría para determinar el estado existente y detectar dependencias como las cuentas permitidas para la automatización de sistemas. Después de comparar la flota existente con los valores predeterminados del control de posición SSH, decidiría qué parámetros de control de posición SSH se van a personalizar. Después de este análisis y planeamiento, pasaría al comportamiento de auditoría y configuración (con prácticas de implementación seguras, como anillos).

Para escenarios de campo verde o máquinas de prueba descartables, puede optar por omitir ese análisis y pasar directamente al comportamiento de auditoría y configuración, empezando por los valores predeterminados de control de posición SSH seguros.

Precaución

Antes de configurar las máquinas, tenga mucho cuidado para validar la nueva configuración. Podría perder accidentalmente el acceso a las máquinas.

Algunos ejemplos de bloqueo accidental son:

  • La configuración de autorización neta aplicada (combinación de ,denyGroups etc.) no permite los inicios de allowUserssesión que necesita.
  • El port usuario configurado para sshd está bloqueado por otros controles del entorno (reglas de firewall de host, reglas de firewall de red, etc.)
    • Para evitar el uso excesivo de límites del equipo empresarial, ssh Posture Control solo ha configurado sshd. Actualmente no intenta modificar las reglas de firewall en la máquina, etc. para dar cabida al puerto sshd configurado. Si desea discutir estos escenarios con nosotros, póngase en contacto con nosotros (consulte Recursos adicionales a continuación).

Ámbito de control de posición SSH: reglas, valores predeterminados y personalización

En la tabla siguiente se enumeran los elementos que se pueden auditar o configurar con ssh Posture Control. Cada uno de estos se conoce como regla.

La mayoría de las reglas se pueden asignar valores personalizados a través de parámetros de asignación de directivas para auditar o configurar y auditar. Por ejemplo, si el estándar de la organización es usar el puerto 1111 (en lugar de 22) para sshd, establecería el parámetro correspondiente en la asignación de directiva. Estos parámetros tienen identificadores que se incluyen en la tabla siguiente. Normalmente, el nombre del parámetro corto se usa mediante programación (por ejemplo, con az policy assignment create --params ...), mientras que el nombre para mostrar del parámetro más largo se usa en los flujos de trabajo de Azure Portal.

Al personalizar valores, tenga cuidado de proporcionar valores compatibles con sshd. Por ejemplo, allowGroups toma una lista delimitada por espacios de patrones de nombre de grupo. Para obtener referencia, consulte la página sshd_config man. La referencia de sshd_config también es útil para comprender otros comportamientos sshd, como cómo se intersecan las listas de permitidos y denegados .

Nota:

Para conservar el diseño de la tabla, algunos valores de celda se han movido a notas al pie de la tabla.

Nombre de la regla Valor predeterminado Nombre del parámetro Nombre para mostrar del parámetro
Asegúrese de que los grupos permitidos para SSH están configurados <nota al pie 1> AllowGroups Grupos permitidos
Asegúrese de que los usuarios permitidos para el acceso SSH están configurados "" AllowUsers Usuarios permitidos
Asegúrese de que el método de autenticación para SSH está configurado cualquier AuthenticationMethods Métodos de autenticación
Asegúrese de que los grupos denegados para SSH están configurados "" DenyGroups Grupos denegados
Asegúrese de que los usuarios denegados para SSH están configurados "" DenyUsers Usuarios denegados
Asegúrese de que el código de instalación usado al registrar mensajes para SSH está configurado LOCAL0 SyslogFacility Instalación de registro del sistema
Asegúrese de que ssh MaxAuthTries está configurado 6 MaxAuthTries Intentos máximos de autenticación
Asegúrese de que ssh HostKey está configurado <nota al pie 2> HostKey Clave de host
Asegúrese de que el archivo de clave autorizado para SSH está configurado <nota al pie 3> AuthorizedKeysFile Archivo de clave autorizado
Asegúrese de que GSSApiAuthentication para SSH está configurado falso GSSAPIAuthentication Autenticación de GSSAPI
Asegúrese de que el banner de advertencia ssh está configurado <nota al pie 4> Banner Estandarte
Asegúrese de que se usan cifrados adecuados para SSH aes128-ctr,aes192-ctr,aes256-ctr Ciphers Cifrados permitidos
Asegúrese de que solo se usan algoritmos MAC aprobados. hmac-sha2-256 MACs Algoritmos MAC
Asegúrese de que ssh ClientAliveCountMax está configurado 0 ClientAliveCountMax Número de mensajes activos del cliente
Asegúrese de que el puerto SSH está configurado 22 Port Puerto
Asegúrese de que ssh LoginGraceTime está configurado 60 LoginGraceTime Tiempo de gracia de inicio de sesión
Asegúrese de que el cliente SSH ClientAliveInterval está configurado tres mil seiscientos ClientAliveInterval Intervalo de vida del cliente
Asegúrese de que ssh PermitEmptyPasswords está configurado falso PermitEmptyPasswords Permiso de contraseña vacía

Notas al pie de tabla:

  1. administrators "openssh users"

  2. __PROGRAMDATA__/ssh/ssh_host_ecdsa_key

  3. %programdata%/ssh/administrators_authorized_keys

  4. #######################################################################/r/n/r/nAuthorized access only!/r/n/r/nIf you are not authorized to access or use this system, disconnect now!/r/n/r/n#######################################################################/r/n

    1. Nota: esto se muestra a los usuarios finales como:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    

Parámetros de directiva adicionales (no sshd)

Estos parámetros de directiva adicionales están disponibles durante la asignación de directivas. Estos influyen en el comportamiento de asignación de Azure Policy, en lugar de la configuración sshd en las máquinas.

Nombre Descripción Predeterminado
Incluir servidores conectados a Arc Al seleccionar esta opción, acepta que se le cobre mensualmente por máquina conectada a Arc. FALSO
Efecto Habilitar o deshabilitar la ejecución de esta directiva <Depende de seleccionar el comportamiento de solo auditoría frente a auditoría y configuración.>

¿Definiciones de directiva? ¿Asignaciones de directivas? ¿Asignaciones de invitados? ¿Configuración de la máquina? ¿Cómo encaja todo esto?

Para empezar a trabajar con el control de posición ssh, la acción principal es crear una asignación de directiva. La asignación de directiva vincula una definición de directiva (por ejemplo, "Auditar el control de posición SSH para máquinas Windows") a un ámbito (por ejemplo, "my_factory_3_resource_group").

A medida que use el sistema, encontrará tipos de recursos y terminología adicionales, como se resume en lo siguiente.

diagrama en el que se muestra cómo una asignación de directivas vincula máquinas al servicio De configuración de máquinas a través de asignaciones de invitado

Descripción
Definición de directiva Dentro del servicio Policy, los datos abstractos que describen un clúster de comportamientos de configuración o auditoría disponibles. Por ejemplo, "Auditar el control de posición ssh en máquinas Windows".
Asignación de directivas Vincula una definición de directiva abstracta a un ámbito concreto, como un grupo de recursos. La asignación de directiva puede incluir parámetros y otras propiedades específicas de esa asignación.
Configuración de la máquina El servicio de Azure y los agentes que controlan la auditoría y configuración de la configuración en el nivel del sistema operativo.
Asignación de invitados Recurso que actúa como un vínculo triple entre la asignación de directivas, la máquina y el servicio De configuración de la máquina. La directiva crea y supervisa los recursos de asignación de invitados según sea necesario.
Para obtener más información sobre la terminología de "invitado" frente a "máquina", consulte ¿Por qué veo los términos "Configuración de invitado" y "Automanage" en lugares?
Máquina Una máquina habilitada para Arc o una máquina virtual de Azure.

Acerca de la compatibilidad (implementaciones del servidor SSH, etc.)

El control de posición ssh está diseñado para el escenario estándar de Windows Server de uso general de una única instancia de SERVIDOR SSH de larga duración :

  • cuyo ciclo de vida se administra mediante el sistema de inicialización, como Service Control Manager
  • cuyo comportamiento se rige por sshd_config archivo, coherente con el comportamiento sshd de OpenSSH
  • cuya configuración o estado efectivos se revela por sshd -T salida, coherente con el comportamiento sshd de OpenSSH

Para todos los sistemas operativos compatibles (consulte a continuación), este es el caso de uso predeterminado del servidor SSH.

En principio, una máquina podría tener cualquier número de instancias de servidor SSH que se ejecutan con distintas duraciones, en función de cualquier número de código base y tomar su configuración de cualquier número de lugares (archivos de configuración, argumentos de línea de comandos, parámetros de tiempo de compilación, etc.). Estos casos están fuera del ámbito del control de posición ssh en este momento. Si está interesado en tales casos para el futuro, por favor póngase en contacto con nosotros para discutir.

El control de posición ssh está diseñado para su uso en máquinas de Windows Server 2025 compatibles con Azure Policy y Configuración de máquinas:

No se puede garantizar la compatibilidad con cualquier máquina específica en tiempo de ejecución, ya que sysadmins y los generadores de imágenes son libres de quitar componentes del sistema operativo, hacer que los sistemas de archivos sean de solo lectura, etc.

Compatibilidad con directivas include de sshd_config

Ssh Posture Control intenta acomodar y hacer uso de Include directivas en sshd_config, como se indica a continuación:

  • Para las acciones de auditoría y lectura: confíe en sshd -T para reflejar la configuración de net desde la perspectiva de sshd, teniendo en cuenta cualquier tipo de inclusión.
  • Para acciones de configuración y escritura:
    • Vincule un nuevo archivo específico del control de posición SSH a sshd_config (como una inclusión). Posteriormente, coloque todas las escrituras en el archivo de control de posición SSH vinculado. Esto mejora la higiene del sistema y la rastreabilidad de los cambios del sistema.

Compatibilidad con directivas Match de sshd_config

Ssh Posture Control está diseñado para auditar y configurar el comportamiento de sshd principal. No intenta interactuar con bloques condicionales Match (si los hay) que pueden aplicar configuraciones sshd diferentes a poblaciones específicas.

Compatibilidad con varios valores de sshd_config

El control de posición ssh no admite el uso de varios valores para la regla "puerto", es decir, estableciendo la regla "puerto" en 22 y 33. Esta regla debe configurarse con un único valor para garantizar la funcionalidad y el cumplimiento adecuados para auditar y configurar escenarios. Otras reglas, como permitir o denegar usuarios y cifrados, pueden tener varios valores, siempre y cuando se agreguen en una sola línea.

Ejemplo:

  • Un archivo sshd_config existente incluye una línea "port:22" y otra línea "port:33".
  • La directiva "Audit SSH" se usa para auditar un valor de puerto esperado de 33.
  • Resultado: la auditoría puede pasar o producir un error de forma imprevisible.
  • Recomendación: no use esta característica con escenarios como estos.

¿Cómo puedo consultar los resultados mediante programación?

Con las consultas de Azure Resource Graph (ARG), puede integrar los datos de asignación y estado en sus propios flujos de trabajo. Estos ejemplos usan Search-AzGraph en PowerShell para ejecutar la consulta ARG, pero No es necesario PowerShell. Puede usar ARG desde muchos puntos de entrada, como Azure Portal, la CLI de Azure, las llamadas REST, etc.

  1. En la altitud más alta del resumen, puede obtener recuentos de máquinas por cubo de estado de cumplimiento. Por ejemplo:

    $machineCountsQuery = @'
    // SSH machine counts by compliance status
    guestconfigurationresources
    | where name contains "SecureShell"
    | extend complianceStatus = tostring(properties.complianceStatus)
    | summarize machineCount = count() by complianceStatus
    '@
    
    Search-AzGraph -Query $machineCountsQuery
    
    <#
    Sample output from an environment with two machines:
    
    complianceStatus machineCount
    ---------------- ------------
    Pending                     1
    Compliant                   1
    #>
    
  2. Para explorar en profundidad de forma que vea el estado general de cumplimiento por máquina, puede usar lo siguiente:

    $machinePerRowQuery = @'
    // SSH machine level compliance
    guestconfigurationresources
    | where name contains "SecureShell"
    | project 
     machine = split(properties.targetResourceId,'/')[-1],
     complianceStatus = properties.complianceStatus,
     lastComplianceStatusChecked = properties.lastComplianceStatusChecked
    '@
    
    Search-AzGraph -Query $machinePerRowQuery
    
    <#
    Sample output:
    
    machine     complianceStatus lastComplianceStatusChecked
    -------     ---------------- ---------------------------
    sshdemovm01 Compliant        2/15/2024 11:07:21 PM
    sshdemovm02 Pending          1/1/0001 12:00:00 AM
    #>
    
  3. Para explorar en profundidad los detalles de configuración por configuración, puede usar lo siguiente:

    $settingPerRowQuery = @'
    // SSH rule level detail
    GuestConfigurationResources
    | where name contains "SecureShell"
    | project report = properties.latestAssignmentReport,
     machine = split(properties.targetResourceId,'/')[-1],
     lastComplianceStatusChecked=properties.lastComplianceStatusChecked
    | mv-expand report.resources
    | project machine,
     rule = report_resources.resourceId,
     ruleComplianceStatus = report_resources.complianceStatus,
     ruleComplianceReason = report_resources.reasons[0].phrase,
     lastComplianceStatusChecked
    '@
    
    Search-AzGraph $settingPerRowQuery
    
    <#
    Sample output:
    
    machine     rule                                                  ruleComplianceStatus     ruleComplianceReason
    -------     ---------------                                                  ------               ------
    sshdemovm01 Ensure that the allowed groups for SSH are configured            true            ["administrators","openssh users"] contains the expected values: ["administrators","openssh users"]
    sshdemovm01 Ensure that appropriate ciphers are used for SSH                 true            ["aes128-ctr","aes192-ctr","aes256-ctr"] contains the expected values: ["aes128-ctr","aes192-ctr","aes256-ctr"]
    sshdemovm01 Ensure that the authorized key file for SSH is configured        true            "%programdata%/ssh/administrators_authorized_keys" is equal to "%programdata%/ssh/administrators_authorized_keys"
    sshdemovm01 Ensure that the SSH ClientAliveInterval is configured            true            3600 is equal to 3600
    sshdemovm01 Ensure that the SSH PermitEmptyPasswords is configured           true            false is equal to false
    sshdemovm01 Ensure that the SSH port is configured                           true            22 is equal to 22
    sshdemovm01 Ensure that the SSH MaxAuthTries is configured                   true            6 is equal to 6
    sshdemovm01 Ensure that only approved MAC algorithms are used                true            ["hmac-sha2-256"] contains the expected values: ["hmac-sha2-256"]
    sshdemovm01 Ensure that the SSH HostKey is configured                        true            "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" is equal to "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key"
    sshdemovm01 Ensure that the SSH LoginGraceTime is configured                 true            60 is equal to 60
    #>
    

¿Por qué veo los términos "Configuración de invitado" y "Automanage" en lugares?

El servicio Machine Configuration también se conoce como Configuración de invitado y como Configuración de la máquina de Automanage. Es posible que encuentre estos nombres a medida que interactúe con los servicios y la documentación. Por ejemplo:

  • En los ejemplos de consultas de Azure Resource Graph de este artículo, la tabla de datos se denomina guestconfigurationresources.
  • En Azure Portal, una vista útil para observar los resultados se denomina "Asignaciones de invitados".
  • En Azure Portal, al aplicar la extensión de máquina virtual correspondiente para habilitar La configuración de la máquina virtual, el título de la extensión es "Automanage Machine Configuration".

Para los fines del control de posición SSH, no hay ninguna distinción significativa entre "invitado" y "máquina". Las máquinas habilitadas para Arc y las máquinas virtuales de Azure son aptas.

¿Cuáles son los identificadores de las definiciones de directiva integradas?

En algunos casos, como la creación de asignaciones de directivas con la CLI de Azure, puede ser útil o necesario hacer referencia a una definición de directiva por identificador en lugar de a nombre para mostrar.

Nombre para mostrar identificación

| Auditar el control de posición ssh en máquinas Windows | ... | | Configuración del control de posición ssh en máquinas Windows | ... |

  • Para obtener soporte técnico con problemas, etc., póngase en contacto con el soporte técnico de Microsoft.
  • Para proporcionar comentarios, analice las solicitudes de características, etc. póngase en contacto: linux_sec_config_mgmt@service.microsoft.com