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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn