Désactiver le service nginx
Garantit que l'unité nginx.service n'est ni activée au démarrage ni en cours d'exécution, sauf si l'hôte est volontairement un serveur web.
Vérifié sur l’état résolu en cours d’exécution (ex. sshd -T, sysctl, systemctl show), attrape les drop-ins et Include qu’une lecture de fichier raterait. Réserve : runtime ≠ persistance ; une valeur correcte maintenant peut ne pas survivre à un redémarrage.
Pavois vérifie la configuration effective, l’état résolu et réellement appliqué, pas un fichier. Les scanners basés fichier (OVAL/SCAP, Lynis) ratent les Include, drop-ins et défauts runtime ; ce check voit ce qui est réellement en vigueur.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
Une instance nginx écoute sur le réseau (généralement 80/443) et expose à des attaquants distants un analyseur, une pile TLS et tout hôte virtuel configuré. Sur une machine qui n'a pas vocation à servir du HTTP, une installation nginx oubliée ou par défaut élargit inutilement la surface d'attaque : une seule CVE nginx, un bloc location mal configuré ou une page de statut exposée peut devenir un point d'entrée ou une fuite d'information. Si ce rôle n'est pas requis, le service doit être arrêté et désactivé.
Ce que vérifie Pavois
Pavois interroge l'état effectif du service via service('nginx.service'), qui résout à la fois le statut enabled (au démarrage) et running (courant) depuis systemd, et non depuis un fichier de configuration. C'est important car une unité peut être masquée, surchargée par un drop-in sous /etc/systemd/system/nginx.service.d/, ou activée par socket, des faits que seul systemd connaît. Un scanner basé sur les fichiers qui se contente de vérifier si le paquet nginx est installé manquerait un service installé mais bel et bien en cours d'exécution, ou inversement.
describe service('nginx.service') do
it { should_not be_enabled }
it { should_not be_running }
endComment vérifier qu’elle est appliquée
Exécutez systemctl is-enabled nginx.service et systemctl is-active nginx.service. Les deux doivent renvoyer respectivement disabled (ou masked/not-found) et inactive. Vue complète : systemctl status nginx.service doit afficher Loaded: ... disabled et Active: inactive (dead).
Inspecter et investiguer
Inspectez journalctl -u nginx.service pour les événements de démarrage/arrêt et toute activité passée de l'écouteur. systemctl show nginx.service -p ActiveState -p UnitFileState donne l'état lisible par machine sur lequel Pavois s'appuie. Pour confirmer que rien n'est encore lié aux ports HTTP, utilisez ss -tlnp | grep -E ':80|:443'.
Remédiation
Le plan de durcissement de Pavois agit sur la ressource service nommée nginx avec les actions disable puis stop : il supprime l'activation au démarrage et arrête l'instance en cours. Appliqué avec pavois harden apply. Aucun fichier n'est réécrit, seul l'état de l'unité systemd change.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| action | disable, stop |
|---|---|
| name | nginx |
| resource | service |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Si nginx sert légitimement du trafic (application web, reverse proxy, challenge ACME/Let's Encrypt HTTP-01), le désactiver mettra ce service hors ligne et pourra casser les applications dépendantes ou le renouvellement des certificats. Avant d'appliquer : confirmez que l'hôte n'a pas vocation à servir du HTTP (ss -tlnp | grep -E ':80|:443', vérifiez les vhosts dans /etc/nginx/sites-enabled/) et qu'aucun rôle de reverse-proxy ou de répartiteur de charge n'en dépend. Sur un hôte qui a réellement besoin de nginx, cette règle ne s'applique pas et doit être exclue du périmètre.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| CIS | 2.1.18 | direct | per OS, see the benchmark table | haute |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.