Serveurs NFS et pare-feu

16

Je n'ai pas trouvé de document slam-dunk à ce sujet, alors commençons-en un.

Sur un hôte CentOS 7.1, j'ai parcouru le HOWTO linuxconfig , y compris les firewall-cmdentrées, et j'ai un système de fichiers exportable.

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.10.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 2049/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

[root@<server> ~]# showmount -e localhost
Export list for localhost:
/export/home/<user> *.localdomain

Cependant, si je viens showmountdu client, j'ai toujours un problème.

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

Maintenant, comment suis-je sûr qu'il s'agit d'un problème de pare-feu? Facile. Éteignez le pare-feu. Du côté serveur:

[root@<server> ~]# systemctl stop firewalld

Et côté client:

[root@<client> ~]# showmount -e <server>.localdomain
Export list for <server>.localdomain:
/export/home/<server> *.localdomain

Redémarrez le pare-feu. Du côté serveur:

[root@<server> ~]# systemctl start firewalld

Et côté client:

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

Alors, allons en ville, en adaptant les commandes iptables d'un serveur RHEL 6 NFS HOW-TO ...

[root@ ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp
success

[root@<server> ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp \
>  --permanent
success

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.0.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 32803/tcp 662/udp 662/tcp 111/udp 875/udp 32769/udp 875/tcp 892/udp 2049/tcp 892/tcp 111/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

Cette fois, je reçois un message d'erreur légèrement différent du client:

[root@<client> ~]# showmount -e <server>.localdomain
rpc mount export: RPC: Unable to receive; errno = No route to host

Donc, je sais que je suis sur la bonne voie. Cela dit, pourquoi ne puis-je trouver un tutoriel définitif à ce sujet nulle part? Je ne peux pas être la première personne à avoir compris ça!

Quelles sont les firewall-cmdentrées qui me manquent?

Oh, une autre note. Mes /etc/sysconfig/nfsfichiers sur le client CentOS 6 et le serveur CentOS 7 ne sont pas modifiés jusqu'à présent. Je préférerais ne pas avoir à les changer (et les maintenir!), Si possible.

dafydd
la source

Réponses:

40

Cela devrait suffire:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
à M
la source
Pas assez dans mon cas. J'ai deux serveurs NFS, le premier diffuse correctement et est abonné par ses clients, le second est apparemment en train de bien diffuser mais son client (le premier serveur) est incapable de «showmount» (exportation de montage rpc: RPC: Impossible de recevoir; errno = pas de route vers l'hôte). Je reviendrai ici si / quand je résous cela.
Urhixidur
Il s'avère que le SERVEUR avait besoin des trois services (nfs, mountd, rpc-bind) ajoutés à son pare-feu (ne sais pas si le client a également besoin des trois; il se trouve que les trois sont dans mon cas). Dans mon cas, le client (premier serveur NFS) l'avait mais le serveur (deuxième serveur NFS) manquait mountd.
Urhixidur
@Urhixidur le client ne devrait pas en avoir besoin car firewalld autorise les connexions sortantes.
T0xicCode
Notez l'orthographe de rpc-bind. Bien que je l'ai activé avec systemctl enable rpcbindet systemctl start rpcbind, firewall-cmd me l'a dit Error: INVALID_SERVICE: rpcbind. J'ai vite réalisé qu'il fallait un tiret dans ce contexte! S'agit-il vraiment du même service?
Qwertie
5

Après avoir configuré le serveur NFS, nous devons activer et démarrer trois services:

  1. nfs-server.service
  2. rpcbind.service
  3. nfs-mountd.service (seul le démarrage est nécessaire)

Et autorisez également ces services sur le pare-feu du serveur:

# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpcbind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload
Aditya.V
la source
4

Je viens de le trouver - et cela fonctionne lorsque le problème est que SELinux bloque la lecture des ~ / .ssh / authorized_keys lors de la connexion! Tout d'abord, enxure votre fichier ~ / .ssh / authorized_keys est correctement rempli et ses autorisations et les autorisations de son dossier sont définies correctement. Si vous exécutez ensuite "setenforce 0" sur l'hôte de destination SSH et que vous pouvez vous connecter à cet hôte sans entrer de mot de passe, mais que vous ne pouvez pas le faire après avoir entré "setenforce 1" sur ce même hôte de destination, les problèmes suivants peuvent résoudre votre problème:

setsebool -P use_nfs_home_dirs 1

réf: https://cassjohnston.wordpress.com/2015/06/12/selinux-nfs-home-directories/

JamesM
la source
0

J'utilise nfsv4 et fonctionne très bien avec ces lignes, en supposant que votre zone est "publique" et que vous utilisez les ports par défaut 2049 et 4001

firewall-cmd --permanent --add-service=nfs --zone=public
firewall-cmd --permanent --add-service=mountd --zone=public
firewall-cmd --permanent --add-service=rpc-bind --zone=public
firewall-cmd --permanent --add-port=4001/udp --zone=public
firewall-cmd --permanent --add-port=4001/tcp --zone=public
firewall-cmd --permanent --add-port=2049/tcp --zone=public
firewall-cmd --permanent --add-port=2049/udp --zone=public
firewall-cmd --reload
elbarna
la source