Aller au contenu
Infrastructure as Code medium

Module sysctl Ansible : paramètres kernel persistés

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

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.

  • 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 par changed_when: false.

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