Présentation du protocole NFS
Le système de fichiers réseau (NFS) est un protocole permettant à des systèmes cleints d'accéder à des fichiers sur un serveur distant comme s'ils étaient stockés localement.
Composants essentiels
- nfs-kernel-server : Le daemon principal du service NFS.
- rpcbind : Service de mappage des ports RPC.
- /etc/exports : Fichier de configuration des partages.
Administration du service
Vérification et gestion des démons système :
# Vérifier l'état des services
systemctl status nfs-kernel-server
systemctl status rpcbind
# Démarrer, arrêter ou redémarrer le service NFS
systemctl start nfs-kernel-server
systemctl stop nfs-kernel-server
systemctl restart nfs-kernel-server
# Activer le démarrage automatique
systemctl enable nfs-kernel-server
systemctl enable rpcbind
Validation et application de la configuration :
# Vérifier la syntaxe du fichier exports
exportfs -v
# Recharger la configuration sans interruption de service
exportfs -ra
# Lister les partages actifs
exportfs -s
Configuration des partages
Structure du fichier /etc/exports :
# Format : répertoire client(options)
/données/projets 192.168.10.0/24(rw,sync,no_subtree_check)
/volume/publique *.domaine.fr(ro,async,all_squash,anonuid=65534,anongid=65534)
Options importantes :
- rw/ro : Permission en lecture/écriture ou lecture seule.
- sync/async : Écriture synchrone ou asynchrone.
- root_squash : Mappe l'accès root client vers l'utilisateur nobody (par défaut).
- no_subtree_check : Désactive la vérification de sous-arbre pour de meilleures performances.
Exemple d'ajout et de suppression dynamique d'un partage :
# Ajouter un partage et appliquer
echo "/export/commun 10.10.0.0/16(rw,sync)" >> /etc/exports
exportfs -ra
# Retirer temporairement un partage spécifique
exportfs -u 10.10.0.0/16:/export/commun
# Supprimer tous les partages et reconfigurer proprement
exportfs -ua
nano /etc/exports # Édition du fichier
exportfs -ra
Surveillance des connexions clients
Pour identifier les clients connectés, plusieurs méthodes sont disponibles.
Utilisation de showmount
# Afficher tous les points de montage clients
showmount -a
# Extraire uniquement les adresses IP uniques
showmount -a | awk -F: '{print $1}' | sort -u
Analyse des fichiers d'état et des connexions réseau
# Consulter le journal des montages actifs
cat /var/lib/nfs/rmtab
# Surveiller les connexions sur le port NFS (2049)
ss -tan | grep :2049
# Ou avec netstat
netstat -anp | grep 2049
Statistiques avec nfsstat
# Afficher les statistiques du serveur NFS
nfsstat -s
# Surveiller en temps réel les opérations
watch -n 2 'nfsstat -s -2'
Recherche ciblée par IP client
#!/bin/bash
# Rechercher les montages pour une IP spécifique
CIBLE="10.10.25.7"
echo "Montages pour le client $CIBLE :"
showmount -a | grep "$CIBLE"
ss -tan | grep :2049 | grep "$CIBLE"
Génération d'un rapport complet
#!/bin/bash
# Créer un rapport sur l'activité NFS
RAPPORT="/tmp/rapport_nfs_$(date +%F).log"
{
echo "Rapport NFS du $(date)"
echo "================================"
echo -e "\nClients montés :"
showmount -a
echo -e "\nStatistiques serveur :"
nfsstat -s
echo -e "\nConnexions réseau actives :"
ss -tan | grep :2049
} > "$RAPPORT"
echo "Rapport généré : $RAPPORT"
Optimisation des performances
Ajustement des paramètres
# Augmenter le nombre de threads nfsd (fichier /etc/default/nfs-kernel-server)
RPCNFSDCOUNT=32
# Optimiser les paramètres réseau pour NFS (dans /etc/sysctl.conf)
echo "sunrpc.tcp_slot_table_entries=128" >> /etc/sysctl.conf
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf
sysctl -p
Surveillance des performancse
# Monitorer l'activité I/O disque liée à NFS
iostat -x 2 | grep -E "nfs|sd"
# Observer la charge des processus nfsd
top -p $(pgrep -d, nfsd)
Dépannage et journaux
Localisation des logs
# Journaux système liés à NFS
journalctl -u nfs-kernel-server -f
# Messages d'erreur du noyau
dmesg | grep -i nfs
Diagnostic des problèmes courants
# Vérifier que le service écoute bien
rpcinfo -p | grep nfs
# Tester un montage local pour isoler le problème
mount -t nfs localhost:/test /mnt/temp
# Vérifier les règles du pare-feu
ufw status | grep 2049
# Contrôler les permissions du répertoire partagé
ls -ld /chemin/vers/partage
getfacl /chemin/vers/partage
Renforcement de la sécurité
Configuration sécurisée
# 1. Restreindre l'accès à des IP/clients spécifiques
# /etc/exports
/export/securise 192.168.1.100(rw,sync,root_squash)
# 2. Privilégier NFSv4 dans /etc/nfs.conf
[nfsd]
vers4=y
vers3=n
# 3. Configurer le pare-feu pour NFS
ufw allow from 192.168.1.0/24 to any port 2049
ufw allow from 192.168.1.0/24 to any port 111
Audit et surveillance
# Script pour auditer les accès
#!/bin/bash
LOG="/var/log/audit_nfs.log"
echo "Audit du $(date)" >> "$LOG"
showmount -a >> "$LOG"
echo "---" >> "$LOG"
Automatisation
Script de surveillance des connexions
#!/bin/bash
# Surveiller le nombre de clients connectés
DELAI=120 # Intervalle en secondes
JOURNAL="/var/log/surveillance_nfs.log"
while true; do
NOMBRE=$(showmount -a 2>/dev/null | wc -l)
HEURE=$(date "+%H:%M:%S")
echo "$HEURE - Clients actifs : $NOMBRE" >> "$JOURNAL"
if [ "$NOMBRE" -gt 50 ]; then
echo "ALERTE : Nombre élevé de clients ($NOMBRE)" >> "$JOURNAL"
fi
sleep $DELAI
done
Nettoyage des entrées obsolètes
#!/bin/bash
# Tenter de nettoyer les entrées clients potentiellement obsolètes
FICHIER="/var/lib/nfs/rmtab"
if [ -f "$FICHIER" ]; then
while IFS=: read -r client chemin; do
if ! ping -c 1 -W 2 "$client" > /dev/null; then
echo "Entrée suspecte pour $client -> $chemin"
# exportfs -u "$client":"$chemin" # Décommenter pour agir
fi
done < "$FICHIER"
fi
Récapitulatif des bonnes pratiques
- Préférer NFSv4 pour sa sécurité améliorée et son fonctionnement via un seul port.
- Appliquer le principe du moindre privilège pour les permissions d'export.
- Segmenter le trafic NFS sur un réseau dédié.
- Surveiller régulièrement les performances et les connexions.
- Sauvegarder périodiquement les fichiers de configuration critiques.
Aide-mémoire des commandes
| Commande | Description |
|---|---|
showmount -a |
Lister tous les clients montés |
exportfs -ra |
Recharger la configuration des partages |
nfsstat -s |
Afficher les statistiques du serveur |
ss -tan | grep :2049 |
Voir les connexions réseau NFS actives |
Dernière mise à jour : 2023-10-27
Systèmes applicables : Debian/Ubuntu, RHEL/CentOS 8+
Précaution : Tester toute modification en environnement de pré-production avant déploiement.