web-dev-qa-db-fra.com

Problème de pare-feu utilisant autofs avec des montages exportés par NFS

J'ai correctement configuré un serveur/système client NFS sur les ordinateurs de mon réseau local. J'aime cela!

Mais, fatigué du long délai lorsqu'un montage n'est pas disponible au démarrage, j'ai décidé de suivre @ridgy pour lui suggérer d'utiliser autofs pour monter les partages - en utilisant les informations de cet article .

J'ai eu des problèmes de pare-feu avant, donc, j'ai immédiatement suspecté que l'ufw pourrait être la raison pour laquelle les montages expirent. Donc, j'ai désactivé ufw sur le serveur et le client. Et bien sûr. Cela a bien fonctionné. Donc, je suis sûr que la configuration de base est correcte.

Les seules autres règles d'ufw à ce stade sont les règles ALLOW (Autoriser) pour les ports 2078 et 6589. Aucune règle BLOCK n'est configurée. Et, comme NFS fonctionne bien avec ufw pendant le montage contrôlé par fstab, je suis un peu confus quant à l’endroit où le blocage se produit.

Jusqu'à présent, je n'ai pas trouvé de documentation sur les ports/protocoles qui sont uniques aux autofs en plus du NFS 111,2049 TCP/UDP habituel.

Chaque fois que je réactiver ufw. Les actions redeviennent inaccessibles.

Des idées?


@ridgy

Après avoir suivi votre conseil ci-dessous d’éditer nfs-common et nfs-kernel-server .. j’ai vérifié trois fois, et les modifications ont été apportées exactement comme indiqué. J'ai redémarré et couru ...

$Sudo netstat -nalp | grep rpc... La sortie était;

tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1220/rpcbind    
tcp        0      0 0.0.0.0:32767           0.0.0.0:*               LISTEN      4158/rpc.mountd 
tcp6       0      0 :::111                  :::*                    LISTEN      1220/rpcbind    
tcp6       0      0 :::32767                :::*                    LISTEN      4158/rpc.mountd 
udp        0      0 0.0.0.0:972             0.0.0.0:*                           1220/rpcbind    
udp        0      0 0.0.0.0:32767           0.0.0.0:*                           4158/rpc.mountd 
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1220/rpcbind    
udp6       0      0 :::972                  :::*                                1220/rpcbind    
udp6       0      0 :::32767                :::*                                4158/rpc.mountd 
udp6       0      0 :::111                  :::*                                1220/rpcbind    
unix  2      [ ACC ]     STREAM     LISTENING     15939    1/init              /run/rpcbind.sock
unix  2      [ ]         DGRAM                    49175    4158/rpc.mountd     
unix  3      [ ]         STREAM     CONNECTED     48294    1220/rpcbind        /run/rpcbind.sock
unix  3      [ ]         STREAM     CONNECTED     16984    1220/rpcbind        
unix  3      [ ]         STREAM     CONNECTED     48275    4157/rpc.idmapd     
unix  3      [ ]         STREAM     CONNECTED     48276    4157/rpc.idmapd 

OK ... Alors, je me demande ... Où est rpc.statd ??? De plus, mes partages NFS (l'autofs était toujours désactivé) étaient toujours visibles depuis le client. bien que le pare-feu n'ait pas été mis à jour avec le nouveau port 32767 de rpc.mountd.

2
Orian

Au final, ce n’était pas si compliqué, en suivant les astuces de Securing NFS . J'ai modifié les fichiers _/etc/default/nfs-common_ et _/etc/default/nfs-kernel-server_ en fonction de:

nfs-common:

_.
.
# Options for rpc.statd.
#   Should rpc.statd listen on a specific port? This is especially useful
#   when you have a port-based firewall. To use a fixed port, set this
#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
#   For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS
STATDOPTS="--port 32765 --outgoing-port 32766"
.
.
_

nfs-kernel-server:

_.
.
# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS="--manage-gids --port 32767"
.
. 
_

Pourquoi ces ports? Comme _32767_ est le nombre le plus élevé de 15 bits, il est très peu probable que ces ports soient déjà utilisés par autre chose.

Je n'utilise pas de quotas, je n'ai donc pas modifié _/etc/default/quota_ comme suggéré. Et j'ai dû redémarrer après avoir apporté ces modifications. Puis j'ai vu le résultat avec

_$ Sudo netstat -nalp | grep rpc

tcp        0      0 0.0.0.0:32767           0.0.0.0:*               LISTEN      1018/rpc.mountd 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      735/rpcbind     
tcp        0      0 0.0.0.0:32765           0.0.0.0:*               LISTEN      806/rpc.statd   
tcp6       0      0 :::32767                :::*                    LISTEN      1018/rpc.mountd 
tcp6       0      0 :::111                  :::*                    LISTEN      735/rpcbind     
tcp6       0      0 :::32765                :::*                    LISTEN      806/rpc.statd   
udp        0      0 0.0.0.0:875             0.0.0.0:*                           735/rpcbind     
udp        0      0 127.0.0.1:982           0.0.0.0:*                           806/rpc.statd   
udp        0      0 0.0.0.0:32765           0.0.0.0:*                           806/rpc.statd   
udp        0      0 0.0.0.0:32767           0.0.0.0:*                           1018/rpc.mountd 
udp        0      0 0.0.0.0:111             0.0.0.0:*                           735/rpcbind     
udp6       0      0 :::875                  :::*                                735/rpcbind     
udp6       0      0 :::32765                :::*                                806/rpc.statd   
udp6       0      0 :::32767                :::*                                1018/rpc.mountd 
udp6       0      0 :::111                  :::*                                735/rpcbind     
unix  2      [ ACC ]     STREAM     LISTENING     11412    735/rpcbind         /run/rpcbind.sock
unix  2      [ ]         DGRAM                    9521     806/rpc.statd       
unix  2      [ ]         DGRAM                    9614     1018/rpc.mountd     
unix  3      [ ]         STREAM     CONNECTED     11721    862/rpc.idmapd      
unix  3      [ ]         STREAM     CONNECTED     11722    862/rpc.idmapd      
_

Comme vous pouvez le constater, les ports _rpc.mountd_ et _rpc.statd_ écoutés sont désormais statiques.

Lorsque vous entrez showmount sur le client (ici 192.168.192.20), Wireshark indique la communication (le serveur est 192.168.192.111). Important ici: le _GETPORT Call_ et le _GETPORT reply_, qui renvoie _Port:32767_. La communication utilise ensuite ce port.

enter image description here Maintenant, vous devriez pouvoir modifier les règles du pare-feu en fonction, puis utiliser showmountet autofs à travers un pare-feu.

Juste pour l'enregistrement

En suivant les indications des commentaires et de ma propre expérience, j'ai trouvé un comportement différent selon les distributions:

  • Dans _raspbian jessie_ actuel (basé sur debian), il existe un service _nfs-common_ (fichier _/etc/init.d/nfs-common_) qui, lorsqu'il est activé, démarre, par exemple. _rpc.statd_ au démarrage, en respectant les paramètres de port dans _/etc/default/nfs-common_.
  • Dans l'actuel _Ubuntu 16.04_, ce service n'existe pas. _rpc.statd_ n'est pas démarré au démarrage, car il n'est pas nécessaire avec NFS V4. Mais dès que _mount .... -o nfsvers=3_ est terminé, _rpc.statd_ est lancé, en respectant les paramètres de port définis dans _/etc/default/nfs-common_.

Je n'ai pas trouvé de documentation cohérente à ce sujet. dans Comment configurer NFS le fichier _/etc/init.d/nfs-common_ est explicitement mentionné, bien qu'il soit et non dans le package. Si quelqu'un a des allusions/liens à ce sujet, il serait grandement mérité.

Encore une remarque: _man rpc.mountd_ et _man rpc.statd_ dire (pour l'option _--port_):

"Si cette option n'est pas spécifiée, rpc.statd essaiera de consulter/etc/services, si le port réussit, définira le même port pour tous les connecteurs d'écouteur, sinon choisira un port éphémère aléatoire pour chaque socket d'écouteur."

Même lors de la définition des ports dans _/etc/services_ (comme suggéré dans le wiki mentionné ci-dessus), cela ne fonctionnait pas. Donc, modifier les fichiers dans _/etc/default_ semble obligatoire - les pages de manuel ne sont pas correctes à ce stade.

2
ridgy