2026-06-24 20:17:46 -04:00
|
|
|
---
|
|
|
|
|
- name: Installer auditd
|
|
|
|
|
ansible.builtin.apt:
|
|
|
|
|
name:
|
|
|
|
|
- auditd
|
|
|
|
|
- audispd-plugins
|
|
|
|
|
state: present
|
|
|
|
|
|
audit + timers : deux services en echec sur les quinze machines, muets depuis toujours
`make prouver` disait 15/15 a failed=0. Les machines, elles, portaient chacune trois
unites systemd en echec. Le rapport d Ansible n est pas l etat d une machine.
AUDITD : ONZE REGLES ARMEES, PERSONNE POUR COLLECTER.
Deux fichiers de regles identiques cohabitaient — 99-chezlepro.rules et
99-setops.rules, vestige du renommage du role. augenrules CONCATENE rules.d/ :
Error sending add rule data request (Rule exists)
There was an error in line 16 of /etc/audit/audit.rules
audit-rules echoue, et auditd ne demarre pas — c est sa dependance. Resultat :
auditctl -l affiche onze regles, ce qui donne toutes les apparences d un audit qui
fonctionne, et rien ne les enregistre.
Meme mue que ssh_baseline, meme registre : auditd_fichiers_perimes. On n y ajoute
que des noms qu on a REELLEMENT deposes un jour.
Et `failed_when: false` cachait la panne : quinze machines a failed=0 avec auditd
mort sur les quinze. Un service de securite qui ne demarre pas doit se VOIR.
TIMERS APT-DAILY : UN ETAT D ECHEC RESIDUEL.
Masquer le service pendant que son timer tourne lui fait perdre sa cible ; systemd
le note et le GARDE (Unit to trigger vanished). `state: stopped` n efface pas un
etat failed — seul reset-failed le fait.
Ce n est pas cosmetique : une supervision qui compte les unites en echec compte ces
deux-la pour toujours, et la vraie panne s y noiera. Meme defaut que le journal de
la frontiere noye sous 982 000 entrees.
DIAGNOSTIC FAUX, CORRIGE : j avais lu « masked enabled » dans list-unit-files comme
un etat contradictoire, et construit une reparation pour le defaire. Ces colonnes
sont ETAT puis PRESET — masque avec un prereglage constructeur active est normal.
La reparation a ete annulee avant d etre livree.
make verifier : vert. make prouver : CONFORME, 55 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-31 16:16:13 -04:00
|
|
|
# AVANT DE POSER LES NOTRES, RETIRER CELLES D'UNE NOMENCLATURE ABANDONNEE.
|
|
|
|
|
#
|
|
|
|
|
# `augenrules` concatene tout `rules.d/` : un doublon fait echouer le chargement ENTIER,
|
|
|
|
|
# et `auditd` ne demarre pas faute de sa dependance. Voir defaults/main.yml.
|
|
|
|
|
- name: Retirer les regles auditd d'une nomenclature abandonnee
|
|
|
|
|
ansible.builtin.file:
|
|
|
|
|
path: "/etc/audit/rules.d/{{ item }}"
|
|
|
|
|
state: absent
|
|
|
|
|
loop: "{{ auditd_fichiers_perimes }}"
|
2026-10-03 17:58:47 -04:00
|
|
|
notify:
|
|
|
|
|
- Restart auditd
|
|
|
|
|
- Recharger les regles auditd
|
audit + timers : deux services en echec sur les quinze machines, muets depuis toujours
`make prouver` disait 15/15 a failed=0. Les machines, elles, portaient chacune trois
unites systemd en echec. Le rapport d Ansible n est pas l etat d une machine.
AUDITD : ONZE REGLES ARMEES, PERSONNE POUR COLLECTER.
Deux fichiers de regles identiques cohabitaient — 99-chezlepro.rules et
99-setops.rules, vestige du renommage du role. augenrules CONCATENE rules.d/ :
Error sending add rule data request (Rule exists)
There was an error in line 16 of /etc/audit/audit.rules
audit-rules echoue, et auditd ne demarre pas — c est sa dependance. Resultat :
auditctl -l affiche onze regles, ce qui donne toutes les apparences d un audit qui
fonctionne, et rien ne les enregistre.
Meme mue que ssh_baseline, meme registre : auditd_fichiers_perimes. On n y ajoute
que des noms qu on a REELLEMENT deposes un jour.
Et `failed_when: false` cachait la panne : quinze machines a failed=0 avec auditd
mort sur les quinze. Un service de securite qui ne demarre pas doit se VOIR.
TIMERS APT-DAILY : UN ETAT D ECHEC RESIDUEL.
Masquer le service pendant que son timer tourne lui fait perdre sa cible ; systemd
le note et le GARDE (Unit to trigger vanished). `state: stopped` n efface pas un
etat failed — seul reset-failed le fait.
Ce n est pas cosmetique : une supervision qui compte les unites en echec compte ces
deux-la pour toujours, et la vraie panne s y noiera. Meme defaut que le journal de
la frontiere noye sous 982 000 entrees.
DIAGNOSTIC FAUX, CORRIGE : j avais lu « masked enabled » dans list-unit-files comme
un etat contradictoire, et construit une reparation pour le defaire. Ces colonnes
sont ETAT puis PRESET — masque avec un prereglage constructeur active est normal.
La reparation a ete annulee avant d etre livree.
make verifier : vert. make prouver : CONFORME, 55 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-31 16:16:13 -04:00
|
|
|
when: auditd_enabled | bool
|
|
|
|
|
|
audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
# LA RETENTION EST UN CHOIX, DONC ELLE S'ECRIT (2026-09-11). Voir defaults/main.yml pour
|
|
|
|
|
# l'arithmetique : depuis qu'Alloy expedie `audit.log` vers Loki, le local n'est plus
|
|
|
|
|
# l'archive mais un TAMPON pour traverser une panne du collecteur.
|
|
|
|
|
#
|
|
|
|
|
# `lineinfile` plutot qu'un gabarit complet : `auditd.conf` porte une quinzaine de
|
|
|
|
|
# reglages que Debian ajuste, et les reecrire tous nous rendrait responsables de choix
|
|
|
|
|
# que nous n'avons pas faits.
|
|
|
|
|
- name: Fixer la retention locale du journal d'audit
|
|
|
|
|
ansible.builtin.lineinfile:
|
|
|
|
|
path: /etc/audit/auditd.conf
|
|
|
|
|
regexp: "^{{ item.cle }}\\s*="
|
|
|
|
|
line: "{{ item.cle }} = {{ item.valeur }}"
|
|
|
|
|
owner: root
|
|
|
|
|
group: root
|
|
|
|
|
mode: "0640"
|
|
|
|
|
loop:
|
|
|
|
|
- { cle: "max_log_file", valeur: "{{ auditd_max_log_file }}" }
|
|
|
|
|
- { cle: "num_logs", valeur: "{{ auditd_num_logs }}" }
|
|
|
|
|
loop_control:
|
|
|
|
|
label: "{{ item.cle }}"
|
|
|
|
|
notify: Restart auditd
|
|
|
|
|
when: auditd_enabled | bool
|
|
|
|
|
|
2026-06-24 20:17:46 -04:00
|
|
|
- name: Déployer les règles auditd Set-OPS
|
|
|
|
|
ansible.builtin.template:
|
|
|
|
|
src: 99-setops.rules.j2
|
|
|
|
|
dest: /etc/audit/rules.d/99-setops.rules
|
|
|
|
|
owner: root
|
|
|
|
|
group: root
|
|
|
|
|
mode: "0640"
|
2026-10-03 17:58:47 -04:00
|
|
|
notify:
|
|
|
|
|
- Restart auditd
|
|
|
|
|
- Recharger les regles auditd
|
2026-06-24 20:17:46 -04:00
|
|
|
when: auditd_enabled | bool
|
|
|
|
|
|
audit + timers : deux services en echec sur les quinze machines, muets depuis toujours
`make prouver` disait 15/15 a failed=0. Les machines, elles, portaient chacune trois
unites systemd en echec. Le rapport d Ansible n est pas l etat d une machine.
AUDITD : ONZE REGLES ARMEES, PERSONNE POUR COLLECTER.
Deux fichiers de regles identiques cohabitaient — 99-chezlepro.rules et
99-setops.rules, vestige du renommage du role. augenrules CONCATENE rules.d/ :
Error sending add rule data request (Rule exists)
There was an error in line 16 of /etc/audit/audit.rules
audit-rules echoue, et auditd ne demarre pas — c est sa dependance. Resultat :
auditctl -l affiche onze regles, ce qui donne toutes les apparences d un audit qui
fonctionne, et rien ne les enregistre.
Meme mue que ssh_baseline, meme registre : auditd_fichiers_perimes. On n y ajoute
que des noms qu on a REELLEMENT deposes un jour.
Et `failed_when: false` cachait la panne : quinze machines a failed=0 avec auditd
mort sur les quinze. Un service de securite qui ne demarre pas doit se VOIR.
TIMERS APT-DAILY : UN ETAT D ECHEC RESIDUEL.
Masquer le service pendant que son timer tourne lui fait perdre sa cible ; systemd
le note et le GARDE (Unit to trigger vanished). `state: stopped` n efface pas un
etat failed — seul reset-failed le fait.
Ce n est pas cosmetique : une supervision qui compte les unites en echec compte ces
deux-la pour toujours, et la vraie panne s y noiera. Meme defaut que le journal de
la frontiere noye sous 982 000 entrees.
DIAGNOSTIC FAUX, CORRIGE : j avais lu « masked enabled » dans list-unit-files comme
un etat contradictoire, et construit une reparation pour le defaire. Ces colonnes
sont ETAT puis PRESET — masque avec un prereglage constructeur active est normal.
La reparation a ete annulee avant d etre livree.
make verifier : vert. make prouver : CONFORME, 55 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-31 16:16:13 -04:00
|
|
|
# `failed_when: false` A CACHE LA PANNE PENDANT TOUT UN DEPLOIEMENT (2026-08-30).
|
|
|
|
|
#
|
|
|
|
|
# Quinze machines rapportaient `failed=0` alors qu'`auditd` etait mort sur les quinze. Un
|
|
|
|
|
# service de securite qui ne demarre pas doit se VOIR : c'est precisement le genre de
|
|
|
|
|
# panne que personne ne va chercher, puisque rien ne la signale et que `auditctl -l`
|
|
|
|
|
# affiche des regles.
|
|
|
|
|
#
|
|
|
|
|
# On tolere encore l'echec sur les machines ou l'audit n'est pas demande — mais quand il
|
|
|
|
|
# l'est, on le dit.
|
2026-06-24 20:17:46 -04:00
|
|
|
- name: Activer auditd
|
|
|
|
|
ansible.builtin.systemd:
|
|
|
|
|
name: auditd
|
|
|
|
|
enabled: true
|
|
|
|
|
state: started
|
|
|
|
|
when: auditd_enabled | bool
|
audit + timers : deux services en echec sur les quinze machines, muets depuis toujours
`make prouver` disait 15/15 a failed=0. Les machines, elles, portaient chacune trois
unites systemd en echec. Le rapport d Ansible n est pas l etat d une machine.
AUDITD : ONZE REGLES ARMEES, PERSONNE POUR COLLECTER.
Deux fichiers de regles identiques cohabitaient — 99-chezlepro.rules et
99-setops.rules, vestige du renommage du role. augenrules CONCATENE rules.d/ :
Error sending add rule data request (Rule exists)
There was an error in line 16 of /etc/audit/audit.rules
audit-rules echoue, et auditd ne demarre pas — c est sa dependance. Resultat :
auditctl -l affiche onze regles, ce qui donne toutes les apparences d un audit qui
fonctionne, et rien ne les enregistre.
Meme mue que ssh_baseline, meme registre : auditd_fichiers_perimes. On n y ajoute
que des noms qu on a REELLEMENT deposes un jour.
Et `failed_when: false` cachait la panne : quinze machines a failed=0 avec auditd
mort sur les quinze. Un service de securite qui ne demarre pas doit se VOIR.
TIMERS APT-DAILY : UN ETAT D ECHEC RESIDUEL.
Masquer le service pendant que son timer tourne lui fait perdre sa cible ; systemd
le note et le GARDE (Unit to trigger vanished). `state: stopped` n efface pas un
etat failed — seul reset-failed le fait.
Ce n est pas cosmetique : une supervision qui compte les unites en echec compte ces
deux-la pour toujours, et la vraie panne s y noiera. Meme defaut que le journal de
la frontiere noye sous 982 000 entrees.
DIAGNOSTIC FAUX, CORRIGE : j avais lu « masked enabled » dans list-unit-files comme
un etat contradictoire, et construit une reparation pour le defaire. Ces colonnes
sont ETAT puis PRESET — masque avec un prereglage constructeur active est normal.
La reparation a ete annulee avant d etre livree.
make verifier : vert. make prouver : CONFORME, 55 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-31 16:16:13 -04:00
|
|
|
register: auditd_demarrage
|
|
|
|
|
|
|
|
|
|
- name: Refuser si l'audit est demande mais ne tourne pas
|
|
|
|
|
ansible.builtin.assert:
|
|
|
|
|
that:
|
|
|
|
|
- auditd_demarrage is not failed
|
|
|
|
|
fail_msg: >-
|
|
|
|
|
`auditd_enabled` est vrai mais le service n'a pas demarre. Cause la plus frequente :
|
|
|
|
|
un doublon dans `/etc/audit/rules.d/` fait echouer `audit-rules.service`, dont
|
|
|
|
|
`auditd` depend — verifier `augenrules --check` et `auditd_fichiers_perimes`.
|
|
|
|
|
Les regles peuvent etre ARMEES dans le noyau sans que personne ne collecte.
|
|
|
|
|
when: auditd_enabled | bool
|
audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
|
|
|
|
|
# LA SONDE MESURE LA COLLECTE, PAS L'ARMEMENT. Voir le gabarit : le 2026-08-30, onze
|
|
|
|
|
# regles etaient armees dans le noyau sur quinze machines ou personne ne collectait.
|
|
|
|
|
#
|
|
|
|
|
# ELLE EST DECLAREE PAR LE GROUPE `serveur_durci` ET DEPOSEE ICI. La derivation de
|
|
|
|
|
# supervision ne traverse pas les roles-taches : declaree dans `roles/auditd/meta/`, elle
|
|
|
|
|
# serait restee invisible d'Icinga — et le menage de `client_sante` l'aurait effacee au
|
|
|
|
|
# passage suivant. Meme lecon que la sonde `correctifs`, le 2026-09-10.
|
2026-09-13 23:43:46 -04:00
|
|
|
# CE ROLE ECRIVAIT SA SONDE SANS CREER LE REPERTOIRE (2026-09-13). Vingt-trois roles sur
|
|
|
|
|
# vingt-cinq l'assurent avant d'y deposer quoi que ce soit ; `auditd` et `chrony` etaient
|
|
|
|
|
# les deux exceptions, et ils s'en tiraient parce qu'un role plus precoce l'avait cree.
|
|
|
|
|
#
|
|
|
|
|
# UNE DEPENDANCE D'ORDRE QUI N'EST ECRITE NULLE PART. Elle tient tant que la couche
|
|
|
|
|
# complete passe dans l'ordre habituel, et elle casse des qu'on applique un groupe SEUL :
|
|
|
|
|
#
|
|
|
|
|
# Destination directory /usr/local/lib/setops/sondes does not exist
|
|
|
|
|
#
|
|
|
|
|
# Mesure sur une flotte neuve : treize machines l'avaient, une ne l'avait pas. Rien ne
|
|
|
|
|
# distinguait la quatorzieme, sinon l'ordre dans lequel les taches l'avaient atteinte.
|
|
|
|
|
- name: Assurer le repertoire des sondes de supervision
|
|
|
|
|
ansible.builtin.file:
|
|
|
|
|
path: /usr/local/lib/setops/sondes
|
|
|
|
|
state: directory
|
|
|
|
|
owner: root
|
|
|
|
|
group: root
|
|
|
|
|
mode: "0755"
|
|
|
|
|
|
audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
- name: Deposer la sonde de collecte d'audit
|
|
|
|
|
ansible.builtin.template:
|
|
|
|
|
src: sonde-audit.sh.j2
|
|
|
|
|
dest: /usr/local/lib/setops/sondes/audit.sh
|
|
|
|
|
owner: root
|
|
|
|
|
group: root
|
|
|
|
|
mode: "0750"
|
|
|
|
|
when: auditd_enabled | bool
|