kmonticolo.ansible_os_hardening
os-hardening (Rôle Ansible)
Description
Ce rôle fournit de nombreuses configurations liées à la sécurité, offrant une protection de base complète. Il a été conçu pour être conforme à la DevSec Linux Baseline.
Il configure :
- La gestion des paquets, par exemple, n'autorise que les paquets signés
- Supprime les paquets ayant des problèmes connus
- Configure le module
pam
etpam_limits
- Configuration de la suite de mots de passe en mode Shadow
- Configure les permissions du chemin système
- Désactive les core dumps via des limites douces
- Restreint les connexions root à la console système
- Définit les SUID
- Configure les paramètres du noyau via sysctl
- Installe et configure auditd
Il ne fera pas :
- Mettre à jour les paquets système
- Installer des correctifs de sécurité
Exigences
- Ansible 2.5.0
Avertissement
Si vous utilisez inspec pour tester vos machines après avoir appliqué ce rôle, veuillez vous assurer d'ajouter l'utilisateur de connexion à la variable os_ignore_users
. Sinon, inspec échouera. Pour plus d'informations, voir problème #124.
Si vous utilisez Docker / Kubernetes+Docker, vous devrez remplacer le paramètre sysctl de transfert IP v4.
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# Activer le transfert de trafic IPv4.
net.ipv4.ip_forward: 1
Variables
Nom | Valeur par Défaut | Description |
---|---|---|
os_desktop_enable |
false | vrai si c'est un système de bureau, c'est-à-dire Xorg, KDE/GNOME/Unity/etc |
os_env_extra_user_paths |
[] | ajouter des chemins supplémentaires à la variable PATH de l'utilisateur (par défaut vide). |
os_env_umask |
027 | définir les permissions par défaut pour les nouveaux fichiers à 750 |
os_auth_pw_max_age |
60 | âge maximal du mot de passe (mettre à 99999 pour désactiver efficacement) |
os_auth_pw_min_age |
7 | âge minimal du mot de passe (avant de permettre un autre changement de mot de passe) |
os_auth_retries |
5 | nombre maximum de tentatives d'authentification, avant que le compte ne soit verrouillé pendant un certain temps |
os_auth_lockout_time |
600 | temps en secondes à passer, si le compte a été verrouillé en raison de trop de tentatives d'authentification échouées |
os_auth_timeout |
60 | délai d'authentification en secondes, donc la connexion sera fermée si ce délai est dépassé |
os_auth_allow_homeless |
false | vrai pour permettre aux utilisateurs sans domicile de se connecter |
os_auth_pam_passwdqc_enable |
true | vrai si vous souhaitez utiliser un contrôle de mot de passe fort dans PAM avec passwdqc |
os_auth_pam_passwdqc_options |
"min=disabled,disabled,16,12,8" | définir sur toute option que vous souhaitez passer à passwdqc |
os_security_users_allow |
[] | liste des actions qu'un utilisateur est autorisé à effectuer. Peut contenir change_user . |
os_security_kernel_enable_module_loading |
true | vrai si vous souhaitez autoriser le changement de modules du noyau une fois le système en cours d'exécution (ex. modprobe , rmmod ) |
os_security_kernel_enable_core_dump |
false | le noyau plante ou se comporte mal et un core dump de noyau est créé |
os_security_suid_sgid_enforce |
true | vrai si vous voulez réduire les bits SUID/SGID. Il y a déjà une liste d'éléments configurés, mais vous pouvez également ajouter vos propres éléments |
os_security_suid_sgid_blacklist |
[] | liste des chemins dont les bits SUID/SGID doivent être supprimés |
os_security_suid_sgid_whitelist |
[] | liste des chemins dont les bits SUID/SGID ne devraient pas être modifiés |
os_security_suid_sgid_remove_from_unknown |
false | vrai si vous souhaitez supprimer les bits SUID/SGID de tout fichier qui n'est pas explicitement configuré dans une blacklist . Cela fera que chaque exécution d'Ansible recherche à travers les systèmes de fichiers montés les bits SUID/SGID qui ne sont pas configurés dans la blacklist par défaut et utilisateur. Si un bit SUID/SGID est trouvé, il sera supprimé, sauf si ce fichier est dans votre whitelist . |
os_security_packages_clean |
true | supprime les paquets ayant des problèmes connus. Voir la section paquets. |
ufw_manage_defaults |
true | vrai signifie appliquer tous les réglages avec le préfixe ufw_ |
ufw_ipt_sysctl |
'' | par défaut, il désactive IPT_SYSCTL dans /etc/default/ufw. Si vous voulez remplacer les valeurs de /etc/sysctl.conf en utilisant ufw - définissez-le sur votre dictionnaire sysctl, par exemple /etc/ufw/sysctl.conf |
ufw_default_input_policy |
DROP | définir la politique d'entrée par défaut de ufw sur DROP |
ufw_default_output_policy |
ACCEPT | définir la politique de sortie par défaut de ufw sur ACCEPT |
ufw_default_forward_policy |
DROP | définir la politique de transfert par défaut de ufw sur DROP |
os_auditd_enabled |
true | Mettre à false pour désactiver l'installation et la configuration d'auditd. |
Paquets
Nous supprimons les paquets suivants :
- xinetd (NSA, Chapitre 3.2.1)
- inetd (NSA, Chapitre 3.2.1)
- tftp-server (NSA, Chapitre 3.2.5)
- ypserv (NSA, Chapitre 3.2.4)
- telnet-server (NSA, Chapitre 3.2.2)
- rsh-server (NSA, Chapitre 3.2.3)
- prelink (open-scap)
Systèmes de fichiers désactivés
Nous désactivons les systèmes de fichiers suivants, car ils ne sont probablement pas utilisés :
- "cramfs"
- "freevxfs"
- "jffs2"
- "hfs"
- "hfsplus"
- "squashfs"
- "udf"
- "vfat" # seulement si uefi n'est pas utilisé
Pour empêcher certains des systèmes de fichiers d'être désactivés, ajoutez-les à la variable os_filesystem_whitelist
.
Installation
Installez le rôle avec ansible-galaxy :
ansible-galaxy install dev-sec.os-hardening
Exemple de Playbook
- hosts: localhost
roles:
- dev-sec.os-hardening
Changer les variables sysctl
Si vous souhaitez remplacer les variables sysctl, vous pouvez utiliser la variable sysctl_overwrite
(dans les anciennes versions, vous deviez remplacer tout le sysctl_dict
).
Ainsi, par exemple, si vous souhaitez changer la variable de transfert de trafic IPv4 à 1
, faites-le ainsi :
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# Activer le transfert de trafic IPv4.
net.ipv4.ip_forward: 1
Alternativement, vous pouvez changer le comportement des hachages d'Ansible à merge
, dans ce cas, vous n'aurez qu'à remplacer le seul hachage dont vous avez besoin. Mais veuillez noter que le changement du comportement des hachages le change pour tous vos playbooks et n'est pas recommandé par Ansible.
Tests Locaux
La façon préférée de tester localement le rôle est d'utiliser Docker. Vous devez installer Docker sur votre système. Consultez Commencer pour obtenir 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. Consultez Téléchargements de Vagrant pour obtenir 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
Tests avec Docker
# test rapide sur une machine
bundle exec kitchen test default-ubuntu-1404
# tester sur toutes les machines
bundle exec kitchen test
# pour le développement
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404
Tests avec Virtualbox
# test rapide sur une machine
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404
# tester 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 default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404
Pour plus d'informations, consultez test-kitchen
Contributeurs + Remerciements
...
Ce rôle est principalement basé sur des guides de :
- Wiki d'Arch Linux, Durcissement de Sysctl
- NSA : Guide pour la Configuration Sécurisée de Red Hat Enterprise Linux 5
- Sécurité/Caractéristiques d'Ubuntu
- Deutsche Telekom, Sécurité IT du Groupe, Exigences de Sécurité (Allemand)
Merci à vous tous !
Contribution
Voir directives de contributeurs.
Licence et Auteur
- Auteur:: Sebastian Gumprich
Sous licence de la Licence Apache, 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 à
http://www.apache.org/licenses/LICENSE-2.0
À moins que la loi applicable n'exige ou que ce soit convenu par écrit, le logiciel distribué sous la Licence est distribué sur une base "EN L'ÉTAT", SANS GARANTIES OU CONDIITIONS D'AUCUNE SORTE, explicites ou implicites. Voir la Licence pour la langue spécifique régissant les permissions et limitations sous la Licence.
This role provides numerous security-related configurations, providing all-round base protection.
ansible-galaxy install kmonticolo.ansible_os_hardening