Aller au contenu
Infrastructure as Code medium

Module sysctl Ansible : paramètres kernel persistés

9 min de lecture

Logo Ansible

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).

  • 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.
  • Avoir ansible.posix installé : ansible-galaxy collection install ansible.posix.
  • Connaître les paramètres kernel courants (man sysctl).
- name: Activer l IP forwarding (persistant + immediat)
ansible.posix.sysctl:
name: net.ipv4.ip_forward
value: '1'
state: present
reload: true

Le 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.

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).

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).

- 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: true

state: 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.

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: true

ansible_default_ipv4.interface est le fact qui donne le nom de l’interface principale — fonctionne sur n’importe quelle distro.

SymptômeCauseFix
Paramètre revient au défaut après rebootPas de fichier persistant (juste sysctl -w)Toujours state: present + sysctl_file:
Modification ignorée au runtimereload: false (défaut)Ajouter reload: true
Conflit entre fichiersPlusieurs fichiers définissent le même paramVé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
  • ansible.posix.sysctl: = paramètres kernel persistés.
  • reload: true pour 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.

Cette page a un lab d’accompagnement : labs/modules-rhel/sysctl/ dans stephrobert/ansible-training.

Challenge — sur db1.lab :

  1. Configurer 4 paramètres dans /etc/sysctl.d/99-rhce-lab.conf :
    • net.ipv4.ip_forward = 1
    • net.ipv4.tcp_syncookies = 1
    • kernel.kptr_restrict = 2
    • vm.swappiness = 10

Validation pytest+testinfra :

Fenêtre de terminal
ansible-playbook solution.yml
pytest -v labs/modules-rhel/sysctl/challenge/tests/

9 tests vérifient le fichier et les valeurs effectives via sysctl -n.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn