
Ce rôle Ansible fournit de nombreuses configurations SSH liées à la sécurité, offrant une protection de base complète.
Attention : Ce rôle a été migré vers notre collection de durcissement :
Veuillez ouvrir tous les problèmes et demandes de tirage (pull requests) là-bas !
network_ipv6_enable
ssh_listen_to doit également être défini pour écouter sur les adresses IPv6 (par exemple [::]).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 ou yes pour activer la connexion rootssh_allow_tcp_forwarding
'no' pour désactiver le transfert TCP. Définir sur 'yes' pour autoriser le transfert TCP. Si vous utilisez OpenSSH >= 6.2, vous pouvez spécifier 'yes', 'no', 'all' ou 'local'. 'yes' et 'no' doivent être passées entre guillemets.ssh_gateway_ports
falsefalse pour désactiver la liaison des ports transférés aux adresses non-loopback. Définir sur true pour forcer la liaison sur l'adresse wildcard. Définir sur clientspecified pour permettre au client de spécifier l'adresse à laquelle se lier.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 est défini.ssh_authorized_principals_file
ssh_trusted_user_ca_keys_file est défini.ssh_authorized_principals
default_custom.yml pour toutes les options. Uniquement utilisé si ssh_authorized_principals_file est défini.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 pour autoriser l'authentification par mot de passe avec le client sshssh_server_password_login
true pour autoriser l'authentification par mot de passe avec le serveur sshssh_banner
falsetrue pour afficher une bannière à la connexionssh_banner_path
ssh_client_hardening
truefalse pour arrêter le durcissement du clientssh_client_port
'22'ssh_client_compression
falsessh_compression
falsessh_login_grace_time
30sssh_max_auth_retries
2ssh_max_sessions
10ssh_print_debian_banner
falsetrue pour afficher la bannière spécifique à Debianssh_server_enabled
truefalse pour désactiver le serveur opensshdssh_server_hardening
truefalse pour arrêter le durcissement du serveurssh_server_match_address
ssh_server_match_group
ssh_server_match_user
ssh_server_match_local_port
ssh_server_permit_environment_vars
noyes pour spécifier que ~/.ssh/environment et les options environment= dans ~/.ssh/authorized_keys sont traités par sshd. Avec la version 7.8 d'openssh, il est possible de spécifier une liste blanche de noms de variables d'environnement en plus des paramètres globaux "yes" ou "no"ssh_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.ymlSi vous souhaitez configurer des options ssh non répertoriées ci-dessus, vous pouvez utiliser ssh_custom_options (pour /etc/ssh/ssh_config) ou sshd_custom_options (pour /etc/ssh/sshd_config) pour les définir. Ces options seront définies au début du fichier afin que vous puissiez remplacer les options plus bas dans le fichier.
Exemple de playbook :
- hosts: localhost
roles:
- dev-sec.ssh-hardening
vars:
ssh_custom_options:
- "Include /etc/ssh/ssh_config.d/*"
sshd_custom_options:
- "AcceptEnv LANG"
Ce rôle utilise le port par défaut 22 ou le port configuré dans l'inventaire pour se connecter au serveur. Si le port ssh par défaut est modifié via ssh_server_ports, une fois le serveur ssh redémarré, il tentera toujours de se connecter en utilisant le port précédent. Pour exécuter ce rôle à nouveau sur le même serveur, l'inventaire devra être mis à jour pour utiliser le nouveau port ssh.
Si l'idempotence est importante, veuillez envisager d'utiliser le rôle ssh-hardening-fallback, qui est un wrapper autour de ce rôle et qui revient au port 22 si le port configuré est inaccessible.
- hosts: localhost
roles:
- dev-sec.ssh-hardening
La méthode privilégiée pour tester localement le rôle est d'utiliser Docker. Vous devrez installer Docker sur votre système. Voir Commencer pour un package Docker adapté à votre système.
Vous pouvez également utiliser vagrant et Virtualbox ou VMWare pour exécuter des tests localement. Vous devrez installer Virtualbox et Vagrant sur votre système. Voir Téléchargements Vagrant pour un package vagrant adapté à votre système. Pour tous nos tests, nous utilisons test-kitchen. Si vous n'êtes pas familier avec test-kitchen, veuillez consulter leur guide.
Ensuite, installez test-kitchen :
# Installer les dépendances
gem install bundler
bundle install
# test rapide sur une machine
bundle exec kitchen test ssh-ubuntu1804-ansible-latest
# test sur toutes les machines
bundle exec kitchen test
# pour le développement
bundle exec kitchen create ssh-ubuntu1804-ansible-latest
bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
# nettoyage
bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
# test rapide sur une machine
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
# test sur toutes les machines
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# pour le développement
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
Pour plus d'informations, voir test-kitchen
Je ne peux pas me connecter à mon compte. J'ai enregistré la clé client, mais elle ne me laisse toujours pas entrer.
Si vous avez épuisé tous les problèmes typiques (pare-feu, réseau, clé manquante, mauvaise clé, compte désactivé, etc.), il est possible que votre compte soit verrouillé. Le moyen le plus rapide de le savoir est de consulter le hachage du mot de passe de votre utilisateur :
sudo grep myuser /etc/shadow
Si le hachage contient un !, votre compte est verrouillé :
myuser:!:16280:7:60:7:::
La bonne façon de résoudre ce problème est de déverrouiller le compte (passwd -u myuser). Si l'utilisateur n'a pas de mot de passe, vous pouvez le déverrouiller via :
usermod -p "*" myuser
Alternativement, si vous avez l'intention d'utiliser PAM, vous l'avez activé via ssh_use_pam: true. PAM permettra aux utilisateurs verrouillés d'entrer avec des clés.
Pourquoi mon application ne se connecte-t-elle plus via SSH ?
Regardez toujours d'abord les fichiers journaux et, si possible, la négociation entre le client et le serveur qui est effectuée lors de la connexion.
Nous avons constaté certains problèmes dans des applications (basées sur python et ruby) dus à leur utilisation d'un ensemble cryptographique obsolète. Cela entre en collision avec ce module de durcissement, qui a réduit la liste des chiffrements, des codes d'authentification de message (MAC) et des algorithmes d'échange de clés (KEX) à une sélection plus sécurisée.
Après avoir utilisé le rôle, le module template/copy/file d'Ansible ne fonctionne plus !
Ce rôle désactive par défaut SFTP. Ansible utilise par défaut SFTP pour transférer les fichiers vers les hôtes distants. Vous devez définir scp_if_ssh = True dans votre ansible.cfg. Ainsi, Ansible utilisera SCP pour copier les fichiers. Alternativement, vous pouvez réactiver SFTP en définissant sftp_enabled sur true.
Impossible de redémarrer le service sshd en raison d'un manque de privilèges
Si vous obtenez l'erreur suivante lors de l'exécution du handler "restart sshd"
Unable to restart service ssh: Failed to restart ssh.service: Access denied
ou
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
exécutez le playbook en tant que root (sans become: yes au niveau du playbook), ou ajoutez become: yes au handler.
Sous licence Apache License, Version 2.0 (la "Licence") ; vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence. Vous pouvez obtenir une copie de la Licence à l'adresse
http://www.apache.org/licenses/LICENSE-2.0
Sauf si requis par la loi applicable ou convenu par écrit, le logiciel distribué sous la Licence est distribué sur une base "EN L'ÉTAT", SANS GARANTIES OU CONDITIONS D'AUCUNE SORTE, expresses ou implicites. Voir la Licence pour le langage spécifique régissant les permissions et les limitations de la Licence.