
Diese Ansible-Rolle bietet zahlreiche sicherheitsbezogene SSH-Konfigurationen und gewährleistet einen umfassenden Basisschutz.
Achtung: Diese Rolle wurde in unsere hardening-collection migriert:
Bitte öffnen Sie dort alle Issues und Pull Requests!
network_ipv6_enable
ssh_listen_to muss ebenfalls gesetzt werden, um auf IPv6-Adressen zu lauschen (z. B. [::]).ssh_server_ports
ssh_client_port
ssh_listen_to
ssh_host_key_files
ssh_host_key_algorithms
ssh_client_alive_interval
ssh_client_alive_count
ssh_permit_tunnel
ssh_remote_hosts
defaults/main.yml.ssh_permit_root_login
without-password oder yes, um Root-Login zu aktivierenssh_allow_tcp_forwarding
'no' zum Deaktivieren von TCP-Forwarding. Setzen Sie 'yes', um TCP-Forwarding zu erlauben. Wenn Sie OpenSSH >= 6.2 verwenden, können Sie 'yes', 'no', 'all' oder 'local' angeben. 'yes' und 'no' mit Anführungszeichen übergeben werden.ssh_gateway_ports
falsefalse zum Deaktivieren der Bindung weitergeleiteter Ports an Nicht-Loopback-Adressen. Setzen Sie true, um die Bindung an die Wildcard-Adresse zu erzwingen. Setzen Sie clientspecified, um dem Client zu erlauben, die zu bindende Adresse anzugeben.ssh_allow_agent_forwarding
ssh_x11_forwarding
ssh_pam_support
ssh_use_pam
ssh_gssapi_support
ssh_kerberos_support
ssh_deny_users
ssh_allow_users
ssh_deny_groups
ssh_allow_groups
ssh_authorized_keys_file
ssh_trusted_user_ca_keys_file
ssh_trusted_user_ca_keys
ssh_trusted_user_ca_keys_file gesetzt ist.ssh_authorized_principals_file
ssh_trusted_user_ca_keys_file gesetzt ist.ssh_authorized_principals
default_custom.yml für alle Optionen. Wird nur verwendet, wenn ssh_authorized_principals_file gesetzt ist.ssh_print_motd
ssh_print_pam_motd
ssh_print_last_log
sftp_enabled
sftp_umask
sftp_chroot
sftp_chroot_dir
ssh_client_roaming
sshd_moduli_file
sshd_moduli_minimum
ssh_challengeresponseauthentication
ssh_client_password_login
true, um passwortbasierte Authentifizierung mit dem SSH-Client zu erlaubenssh_server_password_login
true, um passwortbasierte Authentifizierung mit dem SSH-Server zu erlaubenssh_banner
falsetrue, um beim Login ein Banner anzuzeigenssh_banner_path
ssh_client_hardening
truefalse, um das Härten des Clients zu stoppenssh_client_port
'22'ssh_client_compression
falsessh_compression
falsessh_login_grace_time
30sssh_max_auth_retries
2ssh_max_sessions
10ssh_print_debian_banner
falsetrue, um das Debian-spezifische Banner anzuzeigenssh_server_enabled
truefalse, um den opensshd-Server zu deaktivierenssh_server_hardening
truefalse, um das Härten des Servers zu stoppenssh_server_match_address
ssh_server_match_group
ssh_server_match_user
ssh_server_match_local_port
ssh_server_permit_environment_vars
noyes, um anzugeben, dass ~/.ssh/environment und environment=-Optionen in ~/.ssh/authorized_keys von sshd verarbeitet werden. Mit OpenSSH-Version 7.8 ist es möglich, zusätzlich zu den globalen Einstellungen "yes" oder "no" eine Whitelist von Umgebungsvariablennamen anzugebenssh_server_accept_env_vars
ssh_use_dns
falsessh_server_revoked_keys
ssh_max_startups
ssh_macs
defaults/main.ymlssh_kex
defaults/main.ymlssh_ciphers
defaults/main.ymlssh_custom_options
sshd_custom_options
sshd_syslog_facility
sshd_log_level
sshd_strict_modes
sshd_authenticationmethods
publickeydefaults/main.ymlWenn Sie SSH-Optionen konfigurieren möchten, die oben nicht aufgeführt sind, können Sie ssh_custom_options (für /etc/ssh/ssh_config) oder sshd_custom_options (für /etc/ssh/sshd_config) verwenden, um diese zu setzen. Diese Optionen werden am Anfang der Datei gesetzt, sodass Sie Optionen weiter unten in der Datei überschreiben können.
Beispiel-Playbook:
- hosts: localhost
roles:
- dev-sec.ssh-hardening
vars:
ssh_custom_options:
- "Include /etc/ssh/ssh_config.d/*"
sshd_custom_options:
- "AcceptEnv LANG"
Diese Rolle verwendet den Standardport 22 oder den im Inventar konfigurierten Port, um eine Verbindung zum Server herzustellen. Wenn der Standard-ssh-Port über ssh_server_ports geändert wird, versucht die Rolle nach einem Neustart des SSH-Servers weiterhin, über den vorherigen Port eine Verbindung herzustellen. Um diese Rolle erneut auf demselben Server auszuführen, muss das Inventar aktualisiert werden, um den neuen SSH-Port zu verwenden.
Wenn Idempotenz wichtig ist, ziehen Sie bitte die Rolle ssh-hardening-fallback in Betracht, einen Wrapper um diese Rolle, der auf Port 22 zurückfällt, wenn der konfigurierte Port nicht erreichbar ist.
- hosts: localhost
roles:
- dev-sec.ssh-hardening
Die bevorzugte Methode zum lokalen Testen der Rolle ist die Verwendung von Docker. Sie müssen Docker auf Ihrem System installieren. Siehe Get started für ein für Ihr System geeignetes Docker-Paket.
Sie können auch vagrant und Virtualbox oder VMWare verwenden, um Tests lokal auszuführen. Sie müssen Virtualbox und Vagrant auf Ihrem System installieren. Siehe Vagrant Downloads für ein für Ihr System geeignetes Vagrant-Paket. Für alle unsere Tests verwenden wir test-kitchen. Wenn Sie mit test-kitchen nicht vertraut sind, werfen Sie bitte einen Blick auf deren Anleitung.
Installieren Sie als Nächstes test-kitchen:
# Abhängigkeiten installieren
gem install bundler
bundle install
# schneller Test auf einer Maschine
bundle exec kitchen test ssh-ubuntu1804-ansible-latest
# Test auf allen Maschinen
bundle exec kitchen test
# für die Entwicklung
bundle exec kitchen create ssh-ubuntu1804-ansible-latest
bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
# Aufräumen
bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
# schneller Test auf einer Maschine
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
# Test auf allen Maschinen
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# für die Entwicklung
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
Weitere Informationen finden Sie unter test-kitchen
Ich kann mich nicht in mein Konto einloggen. 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.), ist Ihr Konto möglicherweise gesperrt. Der schnellste Weg, dies herauszufinden, ist ein Blick auf den Passwort-Hash Ihres Benutzers:
sudo grep myuser /etc/shadow
Wenn der Hash ein ! enthält, ist Ihr Konto gesperrt:
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:
usermod -p "*" myuser
Alternativ, wenn Sie PAM verwenden möchten, haben Sie es über 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 sich immer zuerst die Logdateien an und, wenn möglich, 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 Ciphers, Message Authentication Codes (MACs) und Key-Exchange-Algorithmen (KEX) auf eine sicherere Auswahl reduziert hat.
Nach der Verwendung der Rolle funktionieren die Module template/copy/file von Ansible nicht mehr!
Diese Rolle deaktiviert standardmäßig SFTP. Ansible verwendet standardmäßig SFTP, um Dateien auf die Remote-Hosts zu übertragen. Sie müssen scp_if_ssh = True in Ihrer ansible.cfg setzen. Auf diese Weise verwendet Ansible SCP zum Kopieren von Dateien. Alternativ können Sie SFTP wieder aktivieren, indem Sie sftp_enabled auf true setzen.
Der sshd-Dienst kann aufgrund fehlender Berechtigungen nicht neu gestartet werden
Wenn Sie beim Ausführen des Handlers "restart sshd" den folgenden Fehler erhalten
Unable to restart service ssh: Failed to restart ssh.service: Access denied
oder
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
führen Sie das Playbook entweder als root aus (ohne become: yes auf Playbook-Ebene) oder fügen Sie become: yes zum Handler hinzu.
Siehe Richtlinien für Mitwirkende.
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
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die Software unter der Lizenz 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.