Supprimer ou reconfigurer rpcbind de Debian pour regagner un peu en sécurité
Même si vous avez pris le pli d’utiliser un pare-feu sur votre machine Debian, j’ai remarqué qu’une installation par défaut « embarquait » le démon rpcbind, qui écoute et répond à tout va sur le port 111. Wut ? Fort heureusement, s’il ne vous sert pas, on peut le supprimer très simplement.
Non, rpcbind n’est pas toujours inutile
De nos jours, rpcbind n’est plus utilisé que pour NFS, pour Network File System, qui permet de « monter » un système de fichier distant comme s’il était local. La plupart des gens (dont je fais partie) lui préférera CIFS/Samba, qui est une implémentation du partage de fichiers made in Microsoft, ce qui est plus pratique pour partager des dossiers avec leurs OS.
Et c’est à peu près tout, les deux autres usages d’rpcbind sont abandonnés depuis.
Si vous ne vous en servez pas ? Suppression
Si dans certaines anciennes versions de Debian, supprimer rpcbind équivalait à un parcours du combattant, le paquet est bien mieux construit aujourd’hui, rendant l’opération triviale. J’opte pour l’option purge qui permet de supprimer tous les fichiers de configuration en même temps que le programme lui-même :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apt-get purge rpcbind Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants seront ENLEVÉS : nfs-common* rpcbind* 0 mis à jour, 0 nouvellement installés, 2 à enlever et 0 non mis à jour. Après cette opération, 822 ko d'espace disque seront libérés. Souhaitez-vous continuer [O/n] ? (Lecture de la base de données... 37215 fichiers et répertoires déjà installés.) Suppression de nfs-common ... Purge des fichiers de configuration de nfs-common ... dpkg-statoverride : avertissement : pas de dérogation (« override ») présente Suppression de rpcbind ... [ ok ] Stopping rpcbind daemon.... Purge des fichiers de configuration de rpcbind ... Traitement des actions différées (« triggers ») pour « man-db »... |
On constate donc qu’il a supprimé les ressources communes d’nfs (et les fichiers de configuration correspondants) en même temps. Par la suite, j’ai découvert (un peu par hasard, sur une autre machine) qu’on pouvait supprimer des paquets supplémentaires à l’aide d’une deuxième commande :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apt-get autoremove Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants seront ENLEVÉS : libevent-2.0-5 libtirpc1 0 mis à jour, 0 nouvellement installés, 2 à enlever et 0 non mis à jour. Après cette opération, 600 ko d'espace disque seront libérés. Souhaitez-vous continuer [O/n] ? (Lecture de la base de données... 37144 fichiers et répertoires déjà installés.) Suppression de libevent-2.0-5:i386 ... Suppression de libtirpc1:i386 ... Traitement des actions différées (« triggers ») pour « man-db »... |
Et hop, deux paquets en moins aussi.
Et si on utilise NFS ? On revoit la sécurité
En effet, il ne s’agirait pas non plus que n’importe qui accède au serveur NFS en attaquant comme ça. Il faut de préférence restreindre l’accès aux seules machines autorisées et à qui sont destinées ces partages.
Et on peut le faire au niveau d’rpcbind, en modifiant les fichiers hosts.allow et hosts.deny. Ces fichiers permettent de définir respectivement autorisation et interdiction aux machines soit globalement, soit service par service.
On commence donc par interdire toute communication sur rpcbind qui viendrait de l’extérieur :
1 |
echo "rpcbind: ALL" >>/etc/hosts.deny |
Ensuite, il suffit d’ajouter les noms ou les adresses IP des machines autorisées :
1 |
echo "rpcbind: 192.168.1.15" >>/etc/hosts.allow |
Solution annexe : le pare-feu
J’ai déjà expliqué sur le wiki d’homeserver.diy comment configurer le pare-feu du noyau Linux au moyen d’un script de démarrage pour iptables. Il est possible d’agir à ce niveau pour sécuriser un peu plus sa machine 🙂
Merci pour cet article ! Ça m’a mis la puce à l’oreille et je suis allé vérifier sur mes systèmes Debian, rpcbind écoutait bien en TCP sur 0.0.0.0 port 111. Pour ceux qui utilisent systemd, on peut facilement désactiver rpcbind en lançant :
$ sudo systemctl stop rpcbind.service
$ sudo systemctl disable rpcbind.service
Mais il se peut qu’une mise à jour via apt-get réactive rpcbind … Adjoindre une règle pare-feu évitera les mauvaises surprises.