Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
chef-ssh-hardening — Dieses Chef-Cookbook bietet sichere ssh-client- und ssh-server-Konfigurationen. | Kitploit
Tools/GitHubGitHub/dev-sec/chef-ssh-hardening
Cloud-Infrastruktur-SicherheitKonfigurationsprüfungNetzwerksicherheitDevSecOpsAuthentifizierung
GitHubdev-sec/chef-ssh-hardening

chef-ssh-hardening

Dieses Chef-Cookbook bietet sichere ssh-client- und ssh-server-Konfigurationen.

Repository anzeigen
1686635vor 8 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Webseite
Teilen

ssh-hardening (Chef Cookbook)

Supermarket Build Status Code Coverage Gitter Chat

Beschreibung

Dieses Cookbook stellt sichere Konfigurationen für ssh-client und ssh-server bereit. Dieses Cookbook bietet keine Funktionen zur Verwaltung von Benutzern und/oder SSH-Schlüsseln; dafür bitte andere Cookbooks verwenden.

Anforderungen

  • Chef >= 14.13.11

Plattform

  • 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
  • Attribute

    Nachfolgend finden Sie die Attributdokumentation und deren Standardwerte.

    Hinweis: Einige Attribut-Standardwerte dieses Cookbooks werden in den Rezepten gesetzt. Für das Überschreiben solcher Attribute sollten Sie eine höhere Attribut-Prioritätsebene verwenden. Solche Attribute sind in der folgenden Liste mit #override attribute# gekennzeichnet. Beispiel für das Überschreiben eines solchen Attributs:

    root@kitploit:~
    override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
    
    • ['ssh-hardening']['network']['ipv6']['enable'] - false. Auf true setzen, wenn IPv6 benötigt wird
    • ['ssh-hardening']['ssh']['ports'] - 22. Ports, auf denen der ssh-server lauschen und zu denen sich der ssh-client verbinden soll
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil, um den besten Schlüsselaustausch (KEX) basierend auf der Serverversion zu berechnen, andernfalls einen String mit Kex-Werten angeben
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil, um die besten Message Authentication Codes (MACs) basierend auf der Serverversion zu berechnen, andernfalls einen String mit Mac-Werten angeben
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil, um die besten Cipher basierend auf der Serverversion zu berechnen, andernfalls einen String mit Cipher-Werten angeben
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false. Auf true setzen, wenn CBC für Cipher erforderlich ist. Dies ist in der Regel nur notwendig, wenn ältere M2M-Mechanismen mit SSH kommunizieren müssen, die keinen der konfigurierten sicheren Cipher aktiviert haben. CBC ist eine schwache Alternative. Alles Schwächere sollte vermieden werden und ist daher nicht verfügbar.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. Auf true setzen, wenn schwächere HMAC-Mechanismen erforderlich sind. Dies ist in der Regel nur notwendig, wenn ältere M2M-Mechanismen mit SSH kommunizieren müssen, die keinen der konfigurierten sicheren HMACs aktiviert haben.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. Auf true setzen, wenn schwächere Schlüsselaustausch-Mechanismen (KEX) erforderlich sind. Dies ist in der Regel nur notwendig, wenn ältere M2M-Mechanismen mit SSH kommunizieren müssen, die keinen der konfigurierten sicheren KEXs aktiviert haben.
    • ['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - ein oder mehrere Hosts, zu denen sich der ssh-client verbinden kann.
    • ['ssh-hardening']['ssh']['client']['password_authentication'] - false. Auf true setzen, wenn die Passwortauthentifizierung aktiviert werden soll.
    • ['ssh-hardening']['ssh']['client']['roaming'] - false. Auf true setzen, wenn experimentelles Client-Roaming aktiviert werden soll. Dies ist bekanntermaßen mit potenziellen Problemen verbunden, bei denen Geheimnisse an bösartige Server weitergegeben werden können, und ist standardmäßig deaktiviert.
    • ['ssh-hardening']['ssh']['client']['extras'] - {}. Zusätzliche Konfigurationsoptionen hinzufügen, siehe unten für Details
    • ['ssh-hardening']['ssh']['server']['host_key_files'] - nil, um die beste Hostkey-Konfiguration basierend auf der Serverversion zu berechnen, andernfalls ein Array mit Dateipfaden angeben (z. B. /etc/ssh/ssh_host_rsa_key)
    • ['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - Minimale akzeptable Primzahlenlänge in Bits in /etc/ssh/moduli. Primzahlen unterhalb dieser Zahl werden entfernt. (Siehe hier für weitere Informationen und Hintergründe)
    • ['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - Ob eigene Primzahlen erstellt werden sollen. Dieser Neuaufbau erfolgt nur einmal und dauert lange (~ 1,5 - 2 Stunden auf moderner Hardware für 4096 Länge).
    • ['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - Primzahlenlänge, die generiert werden soll. Diese Option ist nur gültig, wenn dh_build_primes aktiviert ist.
    • ['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - eine oder mehrere IP-Adressen, auf denen der ssh-server lauschen soll. Standardmäßig wird auf allen Schnittstellen gelauscht. Es sollte aus Sicherheitsgründen konfiguriert werden!
    • ['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false, um die Root-Anmeldung insgesamt zu deaktivieren. Auf true setzen, um Root die Anmeldung über schlüsselbasierte Mechanismen zu erlauben
    • ['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. Auf true setzen, um TCP-Forwarding zu erlauben
    • ['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. Auf true setzen, um Agent-Forwarding zu erlauben
    • ['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. Auf true setzen, um X11-Forwarding zu erlauben
    • ['ssh-hardening']['ssh']['server']['permit_tunnel'] - false, um die Weiterleitung von tun-Geräten zu deaktivieren. Auf true setzen, um die Weiterleitung von tun-Geräten zu erlauben. Andere akzeptierte Werte: 'yes', 'no', 'point-to-point', 'ethernet'. Siehe man sshd_config für genaue Verhaltensweisen. Hinweis: Sie müssen auch allow_tcp_forwarding aktivieren.
    • ['ssh-hardening']['ssh']['server']['use_pam'] - true. Auf false setzen, um die PAM-Authentifizierung von sshd zu deaktivieren
    • ['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. Auf true setzen, um die Challenge-Response-Authentifizierung zu aktivieren.
    • ['ssh-hardening']['ssh']['server']['deny_users'] - [], um DenyUsers zu konfigurieren. Wenn angegeben, ist die Anmeldung für Benutzernamen, die einem der Muster entsprechen, nicht erlaubt.
    • ['ssh-hardening']['ssh']['server']['allow_users'] - [], um AllowUsers zu konfigurieren. Wenn angegeben, ist die Anmeldung nur für Benutzernamen erlaubt, die einem der Muster entsprechen.
    • ['ssh-hardening']['ssh']['server']['deny_groups'] - [], um DenyGroups zu konfigurieren. Wenn angegeben, ist die Anmeldung für Benutzer nicht erlaubt, deren primäre Gruppe oder ergänzende Gruppenliste einem der Muster entspricht.
    • ['ssh-hardening']['ssh']['server']['allow_groups'] - [], um AllowGroups zu konfigurieren. Wenn angegeben, ist die Anmeldung nur für Benutzer erlaubt, deren primäre Gruppe oder ergänzende Gruppenliste einem der Muster entspricht.
    • ['ssh-hardening']['ssh']['server']['print_motd'] - false. Auf true setzen, um das Anzeigen der MOTD zu aktivieren
    • ['ssh-hardening']['ssh']['server']['print_last_log'] - false. Auf true setzen, um das Anzeigen der letzten Anmeldeinformationen zu aktivieren
    • ['ssh-hardening']['ssh']['server']['banner'] - nil. Einen Pfad wie '/etc/issue.net' setzen, um das Banner zu aktivieren
    • ['ssh-hardening']['ssh']['server']['os_banner'] - false, um Versionsinformationen während des Protokoll-Handshakes zu deaktivieren (nur Debian-Familie). Auf true setzen, um es zu aktivieren
    • ['ssh-hardening']['ssh']['server']['use_dns'] - nil, um den OpenSSH-Standard zu verwenden. Auf true oder false setzen, um die DNS-Auflösung und -Prüfung des entfernten Hosts zu aktivieren/deaktivieren
    • ['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil, um den besten Wert basierend auf der Serverversion zu berechnen, andernfalls true oder false setzen
    • ['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. Zeit, in der die Anmeldung erfolgreich sein muss, andernfalls wird der Benutzer getrennt.
    • ['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. Die Anzahl der Authentifizierungsversuche pro Verbindung
    • ['ssh-hardening']['ssh']['server']['max_sessions'] - 10 Die Anzahl der Sitzungen pro Verbindung
    • ['ssh-hardening']['ssh']['server']['password_authentication'] - false. Auf true setzen, wenn die Passwortauthentifizierung aktiviert werden soll
    • ['ssh-hardening']['ssh']['server']['log_level'] - verbose. Der Log-Level von sshd. Siehe LogLevel in man 5 sshd_config für mögliche Werte.
    • ['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. Auf true setzen, um die SFTP-Funktion des OpenSSH-Daemons zu aktivieren
    • ['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. Setzt die Option Match Group von SFTP, um SFTP nur für dedizierte Benutzer zu erlauben
    • ['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. Setzt das Verzeichnis, in das der SFTP-Benutzer gechrootet werden soll
    • ['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. Wenn nicht nil, vollständiger Pfad zu einer oder mehreren durch Leerzeichen getrennten authorized_keys-Dateien, die innerhalb des Match Group für SFTP-only-Zugriff gesetzt werden
    • ['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. Auf true setzen, wenn die Passwortauthentifizierung aktiviert werden soll
    • ['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. Wenn nicht nil, wird ein vollständiger Pfad zu einer oder mehreren durch Leerzeichen getrennten authorized_keys-Dateien erwartet.
    • ['ssh-hardening']['ssh']['server']['extras'] - {}. Zusätzliche Konfigurationsoptionen hinzufügen, siehe unten für Details
    • ['ssh-hardening']['ssh']['server']['match_blocks'] - {}. Match-Konfigurationsblock, siehe unten für Details

    Verwendung

    Fügen Sie die Rezepte zur run_list hinzu:

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

    Dies installiert ssh-server und ssh-client. Sie können alternativ nur eines davon auswählen über:

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

    Attribute konfigurieren:

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

    Der Standardwert für listen_to ist 0.0.0.0. Es wird dringend empfohlen, den Wert zu ändern.

    SFTP

    Um die SFTP-Konfiguration zu aktivieren, fügen Sie eines der folgenden Rezepte zur run_list hinzu:

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

    Attribute konfigurieren:

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

    Dies aktiviert den SFTP-Server und chrootet jeden Benutzer in der Gruppe sftpusers in das Verzeichnis /home/sftp/%u.

    Zusätzliche Konfigurationsoptionen

    Zusätzliche Konfigurationsoptionen können an die Client- oder Server-Konfigurationsdateien angehängt werden. Dies kann verwendet werden, um statisch gesetzte Werte zu überschreiben oder Konfigurationsoptionen hinzuzufügen, die über Attribute nicht verfügbar sind.

    Die Syntax ist wie folgt:

    root@kitploit:~
    # => Zusätzliche Server-Konfiguration
    default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
      extra['#Some Comment'] = 'Heres the Comment'
      extra['AuthenticationMethods'] =  'publickey,keyboard-interactive'
    end
    
    # => Zusätzliche Client-Konfiguration
    default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
      extra['PermitLocalCommand'] = 'no'
      extra['Tunnel'] =  'no'
    end
    

    Match-Konfigurationsoptionen für sshd

    Match-Blöcke müssen am Ende der sshd_config platziert werden. Dies kann über den Attributbaum match_blocks erreicht werden:

    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
    

    Lokale Tests

    Bitte installieren Sie chef-dk, VirtualBox oder VMware Workstation und Vagrant.

    Linting wird mit rubocop und foodcritic geprüft:

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

    Unit-/Spec-Tests werden mit chefspec durchgeführt:

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

    Integrationstests werden mit test-kitchen und inspec durchgeführt:

    root@kitploit:~
    $ chef exec rake kitchen
    .....
    # oder Sie können kitchen direkt verwenden
    $ kitchen test
    

    FAQ / Stolperfallen

    Ich kann mich nicht bei meinem Konto anmelden. Ich habe den Client-Schlüssel registriert, aber es lässt mich trotzdem nicht rein.

    Wenn Sie alle typischen Probleme ausgeschlossen haben (Firewall, Netzwerk, fehlender Schlüssel, falscher Schlüssel, deaktiviertes Konto usw.), könnte es sein, dass Ihr Konto gesperrt ist. Der schnellste Weg, dies herauszufinden, ist ein Blick auf den Passwort-Hash Ihres Benutzers:

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

    Wenn der Hash ein ! enthält, ist Ihr Konto gesperrt:

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

    Der richtige Weg, dies zu lösen, ist das Entsperren des Kontos (passwd -u myuser). Wenn der Benutzer kein Passwort hat, können Sie es wie folgt entsperren:

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

    Alternativ, wenn Sie PAM verwenden möchten, haben Sie es über ['ssh-hardening']['ssh']['use_pam'] = true aktiviert. PAM erlaubt gesperrten Benutzern den Zugang mit Schlüsseln.

    Warum verbindet sich meine Anwendung nicht mehr über SSH?

    Schauen Sie immer zuerst in die Logdateien und, wenn möglich, auf die Aushandlung zwischen Client und Server, die beim Verbindungsaufbau abgeschlossen wird.

    Wir haben einige Probleme in Anwendungen (basierend auf Python und Ruby) gesehen, die auf deren Verwendung eines veralteten Krypto-Sets zurückzuführen sind. Dies kollidiert mit diesem Härtungsmodul, das die Liste der Cipher, Message Authentication Codes (MACs) und Schlüsselaustausch-Algorithmen (KEX) auf eine sicherere Auswahl reduziert hat.

    Wenn Sie feststellen, dass dies nicht ausreicht, können Sie die Attribute cbc_requires für Cipher, weak_hmac für MACs und weak_kex für KEX in den Namensräumen ['ssh-hardening']['ssh']['client'] oder ['ssh-hardening']['ssh']['server'] aktivieren, je nachdem, wo Sie sie unterstützen möchten.

    Warum kann ich mich nach dem Hinzufügen eines Benutzers zu meiner SFTP-Gruppe nicht beim SFTP-Server anmelden?

    Dies ist ein Problem mit dem Besitz von ChrootDirectory. sshd lehnt SFTP-Verbindungen zu Konten ab, die in ein Verzeichnis gechrootet werden sollen, dessen Besitz/Berechtigungen sshd als unsicher betrachtet. Die strengen Besitz-/Berechtigungsanforderungen von sshd besagen, dass jedes Verzeichnis im Chroot-Pfad root gehören und nur vom Besitzer beschreibbar sein muss. Wenn die Chroot-Umgebung beispielsweise /home ist, muss diese root gehören.

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

    Mitwirkende + Kudos

    • 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

    Dieses Cookbook basiert größtenteils auf Anleitungen von:

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

    Vielen Dank an alle!!

    Mitwirken

    Siehe Mitwirkungsrichtlinien.

    Lizenz und Autor

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

    Lizenziert unter der Apache License, Version 2.0 (die "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter

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

    Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die unter der Lizenz verteilte Software auf einer "WIE BESEHEN"-Basis verteilt, OHNE GEWÄHRLEISTUNG ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend. Siehe die Lizenz für die spezifischen Berechtigungen und Einschränkungen unter der Lizenz.

    Tool herunterladen