
ansible.posix.sysctl: gère les paramètres kernel runtime via sysctl (fichiers /etc/sysctl.conf ou /etc/sysctl.d/*.conf). Cas d'usage RHCE 2026 typiques : IP forwarding, ajuster les buffers réseau, durcir la sécurité kernel (kernel.kptr_restrict, net.ipv4.tcp_syncookies).
Module de la collection ansible.posix. Options critiques : name:, value:, state:, sysctl_file: (chemin custom), reload: (applique maintenant).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Modifier un paramètre kernel avec persistance et application immédiate.
- Choisir entre
/etc/sysctl.conf(legacy) et/etc/sysctl.d/<file>.conf(modulaire). - Distinguer modification runtime vs persistée.
- Pattern CIS : durcissement complet via fichier dédié.
- Diagnostiquer un paramètre qui revient à sa valeur par défaut après reboot.
Prérequis
Section intitulée « Prérequis »- Avoir
ansible.posixinstallé :ansible-galaxy collection install ansible.posix. - Connaître les paramètres kernel courants (
man sysctl).
Modification basique avec reload: true
Section intitulée « Modification basique avec reload: true »- name: Activer l IP forwarding (persistant + immediat) ansible.posix.sysctl: name: net.ipv4.ip_forward value: '1' state: present reload: trueLe module modifie /etc/sysctl.conf (par défaut) et reload: true lance sysctl -p qui applique immédiatement la valeur. Sans reload: true, le paramètre est écrit mais pas appliqué au runtime, il faut un sysctl -p manuel ou un reboot.
Règle : toujours reload: true si vous voulez l'effet immédiat.
Pattern modulaire : sysctl_file:
Section intitulée « Pattern modulaire : sysctl_file: »Plutôt que tout entasser dans /etc/sysctl.conf, mieux vaut un fichier par rôle dans /etc/sysctl.d/ :
- name: Tuning reseau dans /etc/sysctl.d/99-rhce-lab.conf ansible.posix.sysctl: name: "{{ item.name }}" value: "{{ item.value }}" state: present sysctl_file: /etc/sysctl.d/99-rhce-lab.conf reload: true loop: - { name: net.core.somaxconn, value: '4096' } - { name: net.ipv4.tcp_max_syn_backlog, value: '8192' } - { name: net.ipv4.tcp_syncookies, value: '1' }Avantages :
- Versionné dans le repo Ansible (
fetch:pour audit). - Supprimable proprement via
state: absent. - Préfixe numérique (
99-) contrôle l'ordre de chargement (cf.systemd-sysctl(8): ordre alphabétique).
Pattern durcissement CIS
Section intitulée « Pattern durcissement CIS »Le CIS Benchmark RHEL impose une dizaine de paramètres sysctl pour le durcissement :
- name: Durcissement CIS (sysctl) ansible.posix.sysctl: name: "{{ item.name }}" value: "{{ item.value }}" state: present sysctl_file: /etc/sysctl.d/99-cis-hardening.conf reload: true loop: # Reseau - { name: net.ipv4.conf.all.send_redirects, value: '0' } - { name: net.ipv4.conf.all.accept_redirects, value: '0' } - { name: net.ipv4.conf.all.accept_source_route, value: '0' } - { name: net.ipv4.tcp_syncookies, value: '1' }
# Securite kernel - { name: kernel.kptr_restrict, value: '2' } - { name: kernel.dmesg_restrict, value: '1' } - { name: kernel.randomize_va_space, value: '2' }
# FS - { name: fs.suid_dumpable, value: '0' }Pattern liste de dicts + loop: rend le code propre et auditable (un fichier dédié, paramètres groupés, modifiable sans toucher au playbook).
Suppression d'un paramètre
Section intitulée « Suppression d'un paramètre »- name: Retirer le tuning si plus necessaire ansible.posix.sysctl: name: net.core.somaxconn state: absent sysctl_file: /etc/sysctl.d/99-rhce-lab.conf reload: truestate: absent retire la ligne du fichier. Mais si le paramètre était surchargé via plusieurs fichiers (/etc/sysctl.conf + /etc/sysctl.d/99-app.conf), le deuxième prend le relais après reload, toujours auditer après suppression.
Le piège : interfaces réseau dynamiques
Section intitulée « Le piège : interfaces réseau dynamiques »Certains paramètres incluent des noms d'interface :
# ❌ Suppose que l interface s appelle eth0- name: Régler le paramètre noyau net.ipv4.conf.eth0.forwarding ansible.posix.sysctl: name: net.ipv4.conf.eth0.forwarding value: '1'Sur RHEL 10, les interfaces s'appellent souvent enp0s3, ens18, etc. Pattern défensif :
- name: Activer forwarding sur l interface principale ansible.posix.sysctl: name: "net.ipv4.conf.{{ ansible_default_ipv4.interface }}.forwarding" value: '1' state: present reload: trueansible_default_ipv4.interface est le fact qui donne le nom de l'interface principale, fonctionne sur n'importe quelle distro.
Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
| Paramètre revient au défaut après reboot | Pas de fichier persistant (juste sysctl -w) | Toujours state: present + sysctl_file: |
| Modification ignorée au runtime | reload: false (défaut) | Ajouter reload: true |
| Conflit entre fichiers | Plusieurs fichiers définissent le même param | Vérifier l'ordre (préfixe numérique) |
| Paramètre interface non trouvé | Interface n'existe pas (eth0 sur RHEL 10) | Utiliser ansible_default_ipv4.interface |
À retenir
Section intitulée « À retenir »ansible.posix.sysctl:= paramètres kernel persistés.reload: truepour appliquer immédiatement.sysctl_file: /etc/sysctl.d/<name>.conf= pattern modulaire préféré.- Préfixe numérique dans
sysctl.d/contrôle l'ordre (99-= appliqué dernier). - Pattern CIS : un fichier dédié
/etc/sysctl.d/99-cis-hardening.conf.
Mettre en pratique
Section intitulée « Mettre en pratique »Un paramètre kernel bien écrit dans un fichier mais jamais appliqué reste inutile, et l'inverse est tout aussi vrai. Ce lab vous fait poser ip_forward, tcp_syncookies et swappiness dans un fichier dédié sous /etc/sysctl.d/, avec reload: true pour que la valeur prenne effet sans attendre. La vérification lit ce que sysctl retourne réellement, en plus du contenu du fichier, ce qui couvre les deux moitiés du travail.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Module reboot : certains paramètres ne prennent effet qu'au redémarrage, autant le déclencher et l'attendre correctement.
- Modules assert et fail : faire échouer le playbook quand la valeur relue ne correspond pas au durcissement demandé.
- raw, command, shell, script : le cadre à respecter quand vous relisez une valeur avec
sysctl -n, à commencer parchanged_when: false.