
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- 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.
Pratiquer dans le lab
Section intitulée « Pratiquer dans le lab »Cette page a un lab d’accompagnement : labs/modules-rhel/sysctl/ dans stephrobert/ansible-training.
Challenge — sur db1.lab :
- Configurer 4 paramètres dans
/etc/sysctl.d/99-rhce-lab.conf:net.ipv4.ip_forward = 1net.ipv4.tcp_syncookies = 1kernel.kptr_restrict = 2vm.swappiness = 10
Validation pytest+testinfra :
ansible-playbook solution.ymlpytest -v labs/modules-rhel/sysctl/challenge/tests/9 tests vérifient le fichier et les valeurs effectives via sysctl -n.