web-dev-qa-db-fra.com

Serveurs NFS et pare-feu

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

Sur un hôte CentOS 7.1, je suis passé par le linuxconfig HOW-TO , y compris le firewall-cmd entré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 showmount du 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 HOWTO ...

[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!

Quoi firewall-cmd les entrées me manquent?

Oh, une autre note. Ma /etc/sysconfig/nfs les fichiers 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.

16
dafydd

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
40
tom

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
6
Aditya.V

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, enchez 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 êtes en mesure de vous connecter à cet hôte sans entrer de mot de passe, mais 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/

4
JamesM

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
0
elbarna