Delen via


Wat is SSH-houdingsbeheer?

Met SSH-postuurbeheer kunt u de SSH Server-beveiligingspostuur controleren en configureren op ondersteunde Linux-distributies, waaronder Ubuntu, Red Hat, Azure Linux en meer. SSH-houdingbeheer kan naadloos worden geïntegreerd met Azure Governance-services (beleid, machineconfiguratie), zodat u het volgende kunt doen:

  • Zorgen voor naleving met SSHD-standaarden in uw branche of organisatie
  • Kwetsbaarheid voor aanvallen verminderen van extern beheer op basis van sshd
  • Zorgen voor consistente sshd- in uw vloot voor beveiliging en productiviteit

Schermopname met een lijst met compatibele SSH-controles

Om u te helpen de naleving van auditors te demonstreren (en om waar nodig actie te ondernemen) bevat elke nalevingscontrole bewijs via het redenen veld dat aangeeft hoe naleving of niet-naleving is vastgesteld.

U kunt de SSHD-parameters (poortnummer, toegestane groepen, enzovoort) aanpassen of de standaardwaarden van het beleid gebruiken, die zijn afgestemd op de Azure-beveiligingsbasislijn voor Linux.

Documentatie voor aan de slag

Alleen-controle versus gedrag controleren en configureren selecteren

Wanneer u een beleid voor SSH-houdingsbeheer toewijst, kunt u gedrag voor alleen-controleren (ook wel 'Controle' genoemd) kiezen of gedrag van (ook wel Configureren genoemd).

Beleidsdefinitie Azure Policy-effect Opmerkingen over wat u kunt verwachten
alleen auditgedrag **Audit** SSH Posture Control on Linux machines auditIfNotExists Het beleid bevat meer beperkende instellingen vergeleken met veel populaire systeeminstallatiekopieën. Bijvoorbeeld denial of root ssh access. Verwacht daarom dat niet-compatibele statussen worden gerapporteerd.
Gedrag controleren en configureren **Configure** SSH Posture Control on Linux machines deployIfNotExists- Zoals hierboven, kunt u verwachten dat niet-compatibele statussen die in eerste instantie zijn gerapporteerd. Vervolgens worden de machines opnieuw geconfigureerd om te voldoen aan het beleid, wat resulteert in uiteindelijke conforme statussen.

Voor bestaande machines beginnen beheerders meestal met gedrag alleen controle om de bestaande status te bepalen en afhankelijkheden te detecteren, zoals accounts die zijn toegestaan voor automatisering van systemen. Nadat u de bestaande vloot hebt vergeleken met de standaardinstellingen voor SSH-houdingsbeheer, bepaalt u welke parameters voor SSH-houdingsbeheer u wilt aanpassen. Na deze analyse en planning zou u vervolgens overstappen op gedrag voor controle en configuratie (met veilige implementatieprocedures zoals ringen).

Voor greenfield-scenario's of wegwerptestmachines kunt u ervoor kiezen om die analyse over te slaan en rechtstreeks naar het gedrag van audit en configuratie te gaan, beginnend met de standaardinstellingen voor sterke SSH-houdingsbeheer.

Voorzichtigheid

Voordat u machines configureert, moet u de nieuwe configuratie goed valideren. U kunt per ongeluk de toegang tot uw computers verliezen.

Voorbeelden van het per ongeluk vergrendelen van uzelf zijn:

  • De toegepaste net-autorisatie-instellingen (combinatie van allowUsers,denyGroups,permitRootLogin, enzovoort) staan de aanmeldingen die u nodig hebt niet toe
  • De port die u voor sshd configureert, wordt geblokkeerd door andere besturingselementen in uw omgeving (SELinux-beleid, hostfirewallregels, netwerkfirewallregels, enzovoort)
    • Houd er rekening mee dat veel Red Hat-familie-distributies standaard SELinux-beleidsregels hebben die blokkeren dat sshd andere poorten dan 22 gebruikt.
    • Om te voorkomen dat bedrijfsteamgrenzen worden overschreden, is SSH-houdingsbeheer alleen geconfigureerde sshd. Er wordt momenteel niet geprobeerd om SELinux-beleidsregels, firewallregels, enzovoort op de geconfigureerde SSHD-poort te wijzigen. Als u deze scenario's met ons wilt bespreken, neemt u contact met ons op (zie Aanvullende bronnen hieronder).

Bereik van SSH-houdingsbeheer: regels, standaardinstellingen en aanpassingen

De volgende tabel bevat de items die kunnen worden gecontroleerd of geconfigureerd met SSH-houdingsbeheer. Elk van deze staat bekend als een regel.

Elke regel heeft een standaardconfiguratiewaarde die is afgestemd op de Azure-beveiligingsbasislijn voor Linux.

De meeste regels kunnen aangepaste waarden krijgen, via beleidstoewijzing parameters om te controleren op of configureren en controleren. Als de standaard in uw organisatie bijvoorbeeld poort 1111 (in plaats van 22) voor sshd gebruikt, stelt u de bijbehorende parameter in de beleidstoewijzing in. Deze parameters hebben id's die zijn opgenomen in de onderstaande tabel. Normaal gesproken wordt de korte parameternaam programmatisch gebruikt (bijvoorbeeld met az policy assignment create --params ...), terwijl de langere weergavenaam van de parameter wordt gebruikt in Azure Portal-werkstromen.

Zorg er bij het aanpassen van waarden voor dat u waarden opgeeft die compatibel zijn met SSHD. allowGroups gebruikt bijvoorbeeld een door spaties gescheiden lijst met groepsnaampatronen. Zie de sshd_config man-paginater referentie. De sshd_config-verwijzing is ook handig voor het begrijpen van andere sshd-gedragingen, zoals hoe toestaan en lijsten met elkaar snijden.

Notitie

Als u de tabelindeling wilt behouden, zijn sommige celwaarden verplaatst naar voetnoten onder de tabel.

Regelnaam Standaardwaarde Parameternaam Weergavenaam van parameter
Zorg ervoor dat machtigingen voor /etc/ssh/sshd_config zijn geconfigureerd 600 <voetnoot 1> Toegangsmachtigingen voor sshd_config
Controleren of IgnoreRhosts is ingesteld ja ignoreHosts Rhosts en shosts negeren
Zorg ervoor dat LogLevel is ingesteld INFO logLevel Uitgebreidheidsniveau van logboek
Zorg ervoor dat MaxAuthTries is ingesteld 6 maxAuthTries Maximum aantal verificatiepogingen
Zorg ervoor dat toegestane gebruikers voor SSH-toegang zijn geconfigureerd @ <zie voetnoot 5> allowUsers Toegestane gebruikers voor SSH
Zorg ervoor dat geweigerde gebruikers voor SSH-toegang zijn geconfigureerd wortel denyUsers Geweigerde gebruikers voor SSH
Zorg ervoor dat toegestane groepen voor SSH-toegang zijn geconfigureerd * allowGroups Toegestane groepen voor SSH
Zorg ervoor dat geweigerde groepen voor SSH-toegang zijn geconfigureerd wortel denyGroups Groepen geweigerd voor SSH
Zorg ervoor dat HostbasedAuthentication is ingesteld Nee hostBasedAuthentication Verificatie op basis van host
Zorg ervoor dat PermitRootLogin is ingesteld Nee permitRootLogin Of de hoofdmap zich kan aanmelden met behulp van ssh
Zorg ervoor dat PermitEmptyPasswords is ingesteld Nee permitEmptyPasswords Of de server aanmelding toestaat bij accounts met lege wachtwoordtekenreeksen
Zorg ervoor dat ClientAliveCountMax is ingesteld 0 clientAliveCountMax Het aantal actieve clientberichten dat kan worden verzonden zonder sshd berichten terug te ontvangen van de client
Zorg ervoor dat ClientAliveInterval is ingesteld 3600 clientAliveInterval Time-outinterval in seconden waarna, als er geen gegevens van de client zijn ontvangen, sshd een bericht verzendt om een antwoord aan te vragen
Controleren of MAC's zijn geconfigureerd <voetnoot 2> <voetnoot 3> De lijst met beschikbare MAC-algoritmen (Message Authentication Code)
Zorg ervoor dat een banner is geconfigureerd <voetnoot 4> banner De inhoud van het bannerbestand dat wordt verzonden naar de externe gebruiker voordat verificatie is toegestaan
Zorg ervoor dat PermitUserEnvironment is ingesteld Nee permitUserEnvironment Of ~/.ssh/environment and environment= options in ~/.ssh/authorized_keys worden verwerkt door sshd
Zorg ervoor dat coderingen zijn geconfigureerd aes128-ctr,aes192-ctr,aes256-ctr ciphers De lijst met toegestane coderingen
Zorg ervoor dat de SSH-poort is geconfigureerd 22 port De SSH-poort
Zorg ervoor dat het best practice-protocol wordt gebruikt 2 <geen parameter> <geen parameter>

Tabelnoten:

  1. accessPermissionsForSshdConfig

  2. messageAuthenticationCodeAlgorithms

  3. hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com

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

    1. Opmerking: dit wordt weergegeven aan eindgebruikers als:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    
  5. In allowUsers de standaardwaarde '@' alle accounts op de computer vertegenwoordigt

Aanvullende beleidsparameters (niet-sshd)

Deze aanvullende beleidsparameters zijn beschikbaar tijdens beleidstoewijzing. Deze beïnvloeden het toewijzingsgedrag van Azure Policy, in plaats van sshd-instellingen op computers.

Naam Beschrijving Verstek
Gekoppelde Arc-servers opnemen Als u deze optie selecteert, gaat u ermee akkoord dat er maandelijks kosten in rekening worden gebracht per met Arc verbonden machine. VALS
Effect De uitvoering van dit beleid in- of uitschakelen <Is afhankelijk van Het selecteren van alleen audit en het configureren van gedrag>

Beleidsdefinities? Beleidstoewijzingen? Gasttoewijzingen? Computerconfiguratie? Hoe past dit allemaal bij elkaar?

Om aan de slag te gaan met SSH-houdingsbeheer, is uw kernactie het maken van een beleidstoewijzing. Uw beleidstoewijzing koppelt een beleidsdefinitie (bijvoorbeeld 'Controle van SSH-houding voor Linux-machines') aan een bereik (bijvoorbeeld 'my_factory_3_resource_group').

Wanneer u het systeem gebruikt, krijgt u aanvullende resourcetypen en terminologie te zien, zoals in het volgende wordt samengevat.

diagram waarin wordt getoond hoe een beleidstoewijzing machines koppelt aan de Machine Configuration-service via gasttoewijzingen

Beschrijving
beleidsdefinitie Binnen de beleidsservice worden de abstracte gegevens beschreven die een cluster van beschikbare audit- en/of configuratiegedrag beschrijven. Bijvoorbeeld 'Controle van SSH-houding op Linux-machines'.
beleidstoewijzing Hiermee koppelt u een abstracte beleidsdefinitie aan een concreet bereik, zoals een resourcegroep. De beleidstoewijzing kan parameters en andere eigenschappen bevatten die specifiek zijn voor die toewijzing.
machineconfiguratie De Azure-service en -agentry die de controle- en instellingsconfiguratie op besturingssysteemniveau afhandelt.
gasttoewijzing Resource die fungeert als een drierichtingskoppeling tussen de beleidstoewijzing, de machine en de machineconfiguratieservice. Beleid maakt en bewaakt waar nodig resources voor gasttoewijzingen.
Zie Waarom zie ik de termen 'Gastconfiguratie' en 'Automanage' op plaatsen voor meer informatie over de terminologie 'guest' versus 'machine'?
Machine Een machine met Arc of een Azure-VM.

Over compatibiliteit (distributies, SSH Server-implementaties, enzovoort)

SSH-houdingsbeheer is ontworpen voor het algemene Linux-scenario van een langlopende SSH Server-exemplaar:

  • waarvan de levenscyclus wordt beheerd door het init-systeem als systeem
  • waarvan het gedrag wordt gebruikt door sshd_config bestand, consistent met openSSH sshd-gedrag
  • waarvan de effectieve configuratie/status wordt onthuld door sshd -T uitvoer, consistent met openSSH sshd-gedrag

Voor alle ondersteunde distributies (zie hieronder), is dit de standaardgebruiksaanvraag voor SSH-server.

In principe kan op een computer een willekeurig aantal SSH-serverexemplaren worden uitgevoerd met verschillende levensduur, op basis van een willekeurig aantal codebases, en de configuratie van een willekeurig aantal plaatsen (configuratiebestanden, opdrachtregelargumenten, compilatietijdparameters, enzovoort). Dergelijke gevallen vallen op dit moment buiten het bereik van SSH-houdingsbeheer. Als u geïnteresseerd bent in dergelijke gevallen voor de toekomst, neem dan contact met ons op om te bespreken.

SSH-houdingbeheer is bedoeld voor gebruik op die Linux-distributies die worden ondersteund door Azure Policy en machineconfiguratie, met uitzondering van de distributies die tijdens de ontwikkeling in uitgebreide ondersteuning waren. Dit geldt met name voor 2024-06-05:

  • AlmaLinux 9
  • Amazon Linux 2
  • Ubuntu Server 20.04
  • Ubuntu Server 22.04
  • Debian 10
  • Debian 11
  • Debian 12
  • Azure Linux (CBL Mariner) 2
  • Oracle Linux 7
  • Oracle Linux 8
  • CentOS 7.3
  • CentOS 8
  • RHEL 7.4
  • RHEL 8
  • RHEL 9
  • Rocky Linux 9
  • SLES 15

Voor zover haalbaar, wordt SSH-houdingscontrole getest met specifieke veelgebruikte systeemsamenstellingen van de bovenstaande distributies. Voorbeeld: samenstellingen van installatiekopieën van het besturingssysteem die zijn gepubliceerd door distributie-onderhouders in de Azure-galerie. Compatibiliteit met een specifieke machine tijdens runtime kan niet worden gegarandeerd omdat sysadmins en opbouwfuncties voor installatiekopieën vrij zijn om onderdelen uit het besturingssysteem te verwijderen, bestandssysteems alleen-lezen te maken, agentacties te blokkeren met SELinux, enzovoort.

Compatibiliteit met sshd_config Inclusief instructies

SSH-houdingscontrole probeert als volgt gebruik te maken van Include instructies in sshd_config:

  • Voor controle-/leesacties: Vertrouw op sshd--T om de netconfiguratie weer te geven vanuit het perspectief van sshd, rekening houdend met eventuele insluitingen.
  • Voor configureer-/schrijfacties:
    • Als de SSHD-implementatie op de computer Bevat ondersteunt, koppelt u een nieuw SSH-postuurbeheer-specifiek bestand aan sshd_config (als include). Plaats vervolgens alle schrijfbewerkingen in het gekoppelde SSH-houdingsbeheerbestand. Dit verbetert de systeem hygiëne en traceerbaarheid van systeemwijzigingen.
    • Als de SSHD-implementatie op de machine geen instructies ondersteunt, schrijft u configuratiewijzigingen rechtstreeks naar sshd_config.

Compatibiliteit met sshd_config Overeenkomst-instructies

SSH-houdingsbeheer is ontworpen om het kerngedrag van SSHD te controleren en te configureren. Er wordt niet geprobeerd om te communiceren met voorwaardelijke Match blokken (indien aanwezig) die verschillende SSHD-configuraties kunnen toepassen op specifieke populaties.

Hoe kan ik programmatisch query's uitvoeren op de resultaten?

Met behulp van ARG-query's (Azure Resource Graph) kunt u toewijzings- en statusgegevens integreren in uw eigen werkstromen. In deze voorbeelden wordt Search-AzGraph in PowerShell gebruikt om de ARG-query uit te voeren, maar PowerShell is niet vereist. U kunt ARG gebruiken vanaf veel toegangspunten, waaronder Azure Portal, Azure CLI, REST-aanroepen, enzovoort.

  1. Op de hoogste hoogte van samenvattingen kunt u het aantal machines per bucket voor nalevingsstatus ophalen. Bijvoorbeeld:

    $machineCountsQuery = @'
    // SSH machine counts by compliance status
    guestconfigurationresources
    | where name contains "LinuxSshServerSecurityBaseline"
    | 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. Als u wilt inzoomen zodat u de algehele nalevingsstatus per computer ziet, kunt u het volgende gebruiken:

    $machinePerRowQuery = @'
    // SSH machine level compliance
    guestconfigurationresources
    | where name contains "LinuxSshServerSecurityBaseline"
    | 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. Als u wilt inzoomen op instellingsdetails, kunt u het volgende gebruiken:

    $settingPerRowQuery = @'
    // SSH rule level detail
    GuestConfigurationResources
    | where name contains "LinuxSshServerSecurityBaseline"
    | 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 permissions on /etc/ssh/sshd_config are configured        true            Access to '/etc/ssh/sshd_config' matches required ...
    sshdemovm01 Ensure SSH is configured to meet best practices (protocol 2)     true            'Protocol 2' is found uncommented in /etc/ssh/sshd_config
    sshdemovm01 Ensure SSH is configured to ignore rhosts                        true            The sshd service reports that 'ignorerhosts' is set to 'yes'
    sshdemovm01 Ensure SSH LogLevel is set to INFO                               true            The sshd service reports that 'loglevel' is set to 'INFO'
    sshdemovm01 Ensure SSH MaxAuthTries is configured                            true            The sshd service reports that 'maxauthtries' is set to '6'
    sshdemovm01 Ensure allowed users for SSH access are configured               true            The sshd service reports that 'allowusers' is set to '*@*'
    sshdemovm01 Ensure denied users for SSH are configured                       true            The sshd service reports that 'denyusers' is set to 'root'
    sshdemovm01 Ensure allowed groups for SSH are configured                     true            The sshd service reports that 'allowgroups' is set to '*'
    sshdemovm01 Ensure denied groups for SSH are configured                      true            The sshd service reports that 'denygroups' is set to 'root'
    sshdemovm01 Ensure SSH host-based authenticationis disabled                  true            The sshd service reports that 'hostbasedauthentication' is ...
    #>
    

Waarom zie ik de termen 'Gastconfiguratie' en 'Automanage' op locaties?

De Machine Configuration-service is ook wel bekend als gastconfiguratie en als Automanage Machine Configuration. U kunt deze namen tegenkomen wanneer u communiceert met services en documentatie. Bijvoorbeeld:

  • In de Azure Resource Graph-queryvoorbeelden in dit artikel wordt de gegevenstabel guestconfigurationresourcesgenoemd.
  • In Azure Portal wordt een handige weergave voor het observeren van resultaten 'Gasttoewijzingen' genoemd.
  • Wanneer u in Azure Portal de relevante VM-extensie toepast om Machineconfiguratie in te schakelen, is de extensietitel 'Automatische machineconfiguratie'.

Voor SSH-houdingsbeheer is er geen duidelijk onderscheid tussen 'gast' en 'machine'. Machines met Arc en Azure-VM's komen in aanmerking.

Wat zijn de id's voor de ingebouwde beleidsdefinities?

In sommige gevallen, zoals het maken van beleidstoewijzingen met Azure CLI, kan het handig of noodzakelijk zijn om te verwijzen naar een beleidsdefinitie op id in plaats van de weergavenaam.

displayName legitimatiebewijs
Controle van SSH-houding op Linux-machines /providers/Microsoft.Authorization/policyDefinitions/a8f3e6a6-dcd2-434c-b0f7-6f309ce913b4
SSH-houdingsbeheer configureren op Linux-machines /providers/Microsoft.Authorization/policyDefinitions/e22a2f03-0534-4d10-8ea0-aa25a6113233
  • Neem contact op met Microsoft Ondersteuning voor ondersteuning met problemen, enzovoort
  • Als u feedback wilt geven, functieaanvragen, enzovoort wilt bespreken, neemt u contact op met: linux_sec_config_mgmt@service.microsoft.com