guidugli.audit
Rôle Ansible : audit
Un rôle Ansible qui installe et configure l'audit sur RHEL/CentOS, Fedora et Debian/Ubuntu.
Les règles par défaut sont basées sur les normes CIS RedHat/Ubuntu/Debian ainsi que sur ce dépôt GitHub : https://github.com/Neo23x0/auditd.
Avertissement : Je ne suis pas un expert en sécurité et vous ne devriez en aucun cas utiliser ce rôle sans d'abord comprendre comment l'audit fonctionne et les règles configurées par ce rôle. La sécurité de vos serveurs est VOTRE responsabilité !
Exigences
Système d'exploitation fonctionnant sur un serveur physique ou sur une virtualisation hyperviseur. Sur des systèmes conteneurisés, un seul processus auditd peut fonctionner, généralement sur le système hôte. Ce rôle ne tentera pas de démarrer le démon auditd sur les conteneurs.
Variables de rôle
Les variables disponibles sont listées ci-dessous, avec leurs valeurs par défaut (voir defaults/main.yml
) :
audit_local_events: true
Ce mot clé oui/non spécifie s'il faut ou non inclure les événements locaux. Normalement, vous souhaitez inclure les événements locaux, donc la valeur par défaut est oui. Les cas où vous mettriez ceci à non sont lorsque vous souhaitez agréger des événements uniquement du réseau.
#audit_log_file: /var/log/audit/audit.log
Ce mot clé spécifie le nom de chemin complet du fichier journal où les enregistrements d'audit seront stockés. Cela doit être un fichier régulier.
audit_write_logs: true
Ce mot clé oui/non détermine s'il faut ou non écrire des journaux sur le disque. Normalement, vous voulez cela, donc la valeur par défaut est vraie.
audit_log_format: ENRICHED
Le format du journal décrit comment les informations doivent être stockées sur le disque. Il y a 2 options : brut et enrichi.
audit_log_group: root
Ce mot clé spécifie le groupe appliqué aux permissions du fichier journal. La valeur par défaut est root. Le nom du groupe peut être soit numérique, soit écrit en entier.
audit_priority_boost: 4
C'est un nombre non négatif qui indique au démon d'audit combien de coups de priorité il doit prendre. La valeur par défaut est 4. Aucun changement est 0.
audit_flush: INCREMENTAL_ASYNC
Les valeurs valides sont none, incremental, incremental_async, data et sync.
audit_freq: 50
C'est un nombre non négatif qui indique au démon d'audit combien d'enregistrements écrire avant d'émettre une commande explicite de vidage sur disque. Cette valeur n'est valide que lorsque le mot clé de vidage est défini sur incremental ou incremental_async.
audit_num_logs: 5
Ce mot clé spécifie le nombre de fichiers journaux à conserver si le rotation est donné comme action max_log_file. Si le nombre est < 2, les journaux ne sont pas tournés. Ce nombre doit être 999 ou moins.
audit_name_format: NONE
Cette option contrôle comment les noms de nœuds informatiques sont insérés dans le flux d'événements d'audit. Il a les choix suivants : none, hostname, fqd, numeric et user. Aucun signifie qu'aucun nom d'ordinateur n'est inséré dans l'événement d'audit.
#audit_name: mydomain
Ceci est la chaîne définie par l'administrateur qui identifie la machine si l'utilisateur est donné comme option name_format.
audit_max_log_file: 256
Ce mot clé spécifie la taille maximale du fichier en mégaoctets. Lorsque cette limite est atteinte, cela déclenchera une action configurable.
audit_max_log_file_action: keep_logs
Ce paramètre indique au système quelle action entreprendre lorsque le système a détecté que la limite de taille de fichier maximale a été atteinte. Les valeurs valides sont ignore, syslog, suspend, rotate et keep_logs.
audit_verify_email: true
Cette option détermine si l'adresse e-mail donnée dans action_mail_acct est vérifiée pour voir si le nom de domaine peut être résolu. Cette option doit être donnée avant action_mail_acct ou la valeur par défaut de oui sera utilisée.
audit_action_mail_acct: root
Cette option doit contenir une adresse e-mail ou alias valide. L'adresse par défaut est root. Si l'adresse e-mail n'est pas locale à la machine, vous devez vous assurer que vous avez correctement configuré le courrier sur votre machine et votre réseau. De plus, cette option nécessite que /usr/lib/sendmail existe sur la machine.
audit_space_left: 75
Si l'espace libre dans le système de fichiers contenant log_file tombe en dessous de cette valeur, le démon audit prend l'action spécifiée par space_left_action. Si la valeur de space_left est spécifiée comme un nombre entier, elle est interprétée comme une taille absolue en mégaoctets (Mo). Si la valeur est spécifiée comme un nombre entre 1 et 99 suivi d'un signe de pourcentage (par exemple, 5 %), le démon audit calcule la taille absolue en Mo en fonction de la taille du système de fichiers contenant log_file.
audit_space_left_action: email
Ce paramètre indique au système quelle action entreprendre lorsque le système a détecté qu'il commence à manquer d'espace disque. Les valeurs valides sont ignore, syslog, rotate, email, exec, suspend, single et halt.
audit_admin_space_left: 50
C'est une valeur numérique en mégaoctets qui indique au démon d'audit quand effectuer une action configurable parce que le système manque d'espace disque. Cela doit être considéré comme la dernière chance de faire quelque chose avant de manquer d'espace disque.
audit_admin_space_left_action: suspend
Ce paramètre indique au système quelle action entreprendre lorsque le système a détecté qu'il a peu d'espace disque. Les valeurs valides sont ignore, syslog, rotate, email, exec, suspend, single et halt.
audit_disk_full_action: SUSPEND
Ce paramètre indique au système quelle action entreprendre lorsque le système a détecté que la partition dans laquelle les fichiers journaux sont écrits est devenue pleine. Les valeurs valides sont ignore, syslog, rotate, exec, suspend, single et halt.
audit_disk_error_action: SUSPEND
Ce paramètre indique au système quelle action entreprendre chaque fois qu'une erreur est détectée lors de l'écriture d'événements d'audit sur disque ou de la rotation des journaux. Les valeurs valides sont ignore, syslog, exec, suspend, single et halt.
#audit_tcp_listen_port: 60
C'est une valeur numérique dans la plage 1..65535 qui, si spécifiée, amène auditd à écouter le port TCP correspondant pour les enregistrements d'audit provenant de systèmes distants. Le démon d'audit peut être lié avec tcp_wrappers. Vous pouvez vouloir contrôler l'accès avec une entrée dans les fichiers hosts.allow et deny. Si cela est déployé sur un système d'exploitation basé sur systemd, vous devrez peut-être ajuster la directive 'After'.
#audit_tcp_listen_queue: 5
C'est une valeur numérique qui indique combien de connexions en attente (demandées mais non acceptées) sont autorisées. La valeur par défaut est 5. La définition de cela trop petite peut entraîner le rejet des connexions si trop de hôtes se lancent en même temps, comme après une panne de courant. Ce réglage est uniquement utilisé pour les serveurs d'agrégation. Les clients se connectant à un serveur distant doivent garder cela commenté.
#audit_tcp_max_per_addr: 1
C'est une valeur numérique qui indique combien de connexions simultanées à partir d'une adresse IP sont autorisées. La valeur par défaut est 1 et le maximum est 1024. La définition de cela trop grande peut permettre une attaque par déni de service sur le serveur de journalisation.
audit_use_libwrap: true
Ce paramètre détermine s'il faut ou non utiliser tcp_wrappers pour discerner les tentatives de connexion provenant de machines autorisées.
#audit_tcp_client_ports: 1024-65535
Ce paramètre peut être une valeur numérique unique ou deux valeurs séparées par un tiret (sans espaces autorisés). Il indique quels ports clients sont autorisés pour les connexions entrantes. Si non spécifié, tout port est autorisé.
audit_tcp_client_max_idle: 0
Ce paramètre indique le nombre de secondes pendant lesquelles un client peut être inactif (c'est-à-dire sans données de leur part) avant qu'auditd ne se plaint. Cela est utilisé pour fermer les connexions inactives si la machine cliente a un problème où elle ne peut pas fermer la connexion correctement. Notez que c'est un paramètre global, et doit être supérieur à tout réglage individuel heartbeat_timeout d'un client, de préférence par un facteur de deux. La valeur par défaut est zéro, ce qui désactive ce contrôle.
audit_transport: TCP
Si défini sur TCP, seules les connexions TCP en texte clair seront utilisées. Si défini sur KRB5, Kerberos 5 sera utilisé pour l'authentification et le chiffrement.
audit_krb5_principal: auditd
C'est le principal pour ce serveur. La valeur par défaut est "auditd". Étant donné cette valeur par défaut, le serveur cherchera une clé nommée comme auditd/hostname@EXAMPLE.COM stockée dans /etc/audit/audit.key pour s'authentifier, où hostname est le nom canonique de l'hôte du serveur, retourné par une recherche DNS de son adresse IP.
#audit_krb5_key_file: /etc/audit/audit.key
Emplacement de la clé pour le principal de ce client. Notez que le fichier de clé doit être détenu par root et avoir le mode 0400.
audit_distribute_network: false
Si défini sur vrai, les événements provenant du réseau seront distribués au répartiteur d'audit pour traitement.
audit_q_depth: 400
C'est une valeur numérique qui indique la taille de la file d'attente interne du répartiteur d'événements d'audit. Une plus grande file d'attente lui permet de mieux traiter une inondation d'événements, mais pourrait contenir des événements qui ne sont pas traités lorsque le démon est arrêté. Si vous recevez des messages dans le syslog indiquant que des événements sont perdus, augmentez cette valeur.
audit_overflow_action: SYSLOG
Cette option détermine comment le démon doit réagir lorsque sa file d'attente interne déborde. Lorsque cela se produit, cela signifie que plus d'événements sont reçus qu'il ne peut en transmettre aux processus enfants. Cette erreur signifie qu'il va perdre l'événement actuel qu'il tente de distribuer. Cette option a les choix suivants : ignore, syslog, suspend, single et halt.
audit_max_restarts: 10
C'est un nombre non négatif qui indique au répartiteur d'événements d'audit combien de fois il peut essayer de redémarrer un plugin en panne.
audit_plugin_dir: /etc/audit/plugins.d
C'est l'emplacement que auditd utilisera pour rechercher ses fichiers de configuration de plugin.
force_overwrite_audit: true
Si le fichier d'audit existe déjà, forcer le remplacement ? Il ne sera remplacé que si le contenu du fichier cible est différent de la source.
audit_sudo_log: "{{ sudo_log | default('/var/log/sudo.log') }}"
Si le rôle sudo est défini, obtenir la valeur de la variable sudo_log sinon utiliser la valeur par défaut : /var/log/sudo.log. Cela est fait pour empêcher les utilisateurs de devoir spécifier les mêmes informations plusieurs fois. Mais le rôle sudo n'est pas une dépendance pour ce rôle.
Les variables listées ci-dessous n'ont pas besoin d'être changées pour les systèmes ciblés (voir vars/main.yml) :
audit_packages: ['audit', 'audit-libs']
Cette variable est définie dans vars/main.yml et elle est configurée selon la distribution Linux. Les utilisateurs n'ont pas besoin de changer cette variable pour les systèmes cibles de ce rôle.
audit_config_path: /etc/audit/auditd.conf
Cette variable est définie dans vars/main.yml et contrôle où se trouve le fichier auditd.conf.
audit_rulesd_path: /etc/audit/rules.d
Cette variable est définie dans vars/main.yml et contrôle où se trouve le répertoire rules.d.
audit_rules_files:
- 01-init.rules
- 10-self-audit.rules
- 20-filters.rules
- 30-kernel.rules
- 40-identity.rules
- 40-login.rules
- 40-mount.rules
- 40-stunnel.rules
- 40-swap.rules
- 40-time.rules
- 50-cron.rules
- 50-dac.rules
- 50-hostname.rules
- 50-ip-connections.rules
- 50-network.rules
- 50-pkg-manager.rules
- 50-remote-shell.rules
- 50-sudoers.rules
- 50-system-libs.rules
- 50-system-startup.rules
- 55-privileged.rules
- 60-mail.rules
- 60-pam.rules
- 60-sshd.rules
- 60-systemd.rules
- 70-access.rules
- 70-mac-policy.rules
- 70-power-state.rules
- 70-sessions.rules
- 70-shell-profiles.rules
- 80-data-compression.rules
- 80-network.rules
- 80-privilege-abuse.rules
- 80-reconnaissance.rules
- 80-socket-creation.rules
- 80-suspicious.rules
- 80-suspicious-shells.rules
- 80-virtualization.rules
- 90-cred-in-files.rules
- 90-IPC.rules
- 90-root-exec.rules
- 90-special-sw.rules
- 95-32bit-api-exploitation.rules
Spécifiez les fichiers de règles à copier. Par défaut, aucun fichier n'est sélectionné pour être copié. Les fichiers énumérés ci-dessus sont fournis par le rôle, mais l'utilisateur peut créer ses propres fichiers au besoin. Le rôle fournit les règles séparées en plusieurs petits fichiers (au lieu d'un grand), pour favoriser la réutilisabilité : vous pouvez sélectionner quelles règles mettre en œuvre et vous pouvez créer vos propres règles personnalisées. Les règles sont basées sur les normes CIS et d'autres normes de sécurité.
Dépendances
Pas de dépendances.
Exemple de Playbook
- hosts: servers
vars_files:
- vars/main.yml
roles:
- { role: guidugli.audit }
Licence
MIT / BSD
Informations sur l'auteur
Ce rôle a été créé en 2020 par Carlos Guidugli.
ansible-galaxy install guidugli.audit