Servidores NFS e firewalld

16

Eu não encontrei um documento slam-dunk sobre isso, então vamos começar um.

Em um host CentOS 7.1, eu passei pelo COMO FAZER linuxconfig , incluindo as firewall-cmdentradas, e tenho um sistema de arquivos exportável.

[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

No entanto, se eu for showmountdo cliente, ainda tenho um problema.

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

Agora, como tenho certeza de que esse é um problema de firewall? Fácil. Desligue o firewall. Lado do servidor:

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

E do lado do cliente:

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

Reinicie o firewalld. Lado do servidor:

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

E do lado do cliente:

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

Então, vamos à cidade, adaptando os comandos iptables de um HOWTO DO servidor RHEL 6 NFS ...

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

Desta vez, recebo uma mensagem de erro ligeiramente diferente do cliente:

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

Então, eu sei que estou no caminho certo. Dito isto, por que não consigo encontrar um tutorial definitivo sobre isso em nenhum lugar? Não posso ter sido a primeira pessoa a descobrir isso!

Que firewall-cmdentradas estou faltando?

Oh, mais uma nota. /etc/sysconfig/nfsAté agora, meus arquivos no cliente CentOS 6 e no servidor CentOS 7 não foram modificados. Eu preferiria não precisar alterá-los (e mantê-los!), Se possível.

dafydd
fonte

Respostas:

40

Isso deve ser suficiente:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
tom
fonte
Não é suficiente no meu caso. Eu tenho dois servidores NFS, o primeiro é transmitido corretamente e é subscrito por seus clientes, o segundo aparentemente está transmitindo bem, mas seu cliente (o primeiro servidor) não pode 'mostrar' (exportação de montagem rpc: RPC: Não é possível receive; errno = Nenhuma rota para hospedar). Voltarei aqui se / quando resolver isso.
Urhixidur 14/07/2016
Acontece que o SERVER precisava dos três serviços (nfs, mountd, rpc-bind) adicionados ao firewall (não sei se o cliente também precisa dos três; apenas os três no meu caso). No meu caso, o cliente (primeiro servidor NFS) o possuía, mas o servidor (segundo servidor NFS) estava ausente no mountd.
Urhixidur
@Urhixidur, o cliente não deve precisar disso, porque o firewalld permite conexões de saída.
T0xicCode
Observe a ortografia do rpc-bind. Embora eu tenha habilitado com systemctl enable rpcbinde systemctl start rpcbind, o firewall-cmd me disse Error: INVALID_SERVICE: rpcbind. Logo percebi que precisava de um traço nesse contexto! Eles são realmente o mesmo serviço?
Qwertie 17/01/19
5

Depois de configurar o servidor NFS, devemos ativar e iniciar três serviços:

  1. nfs-server.service
  2. rpcbind.service
  3. nfs-mountd.service (somente o início é necessário)

E também permita esses serviços no firewall do servidor:

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

Acabei de encontrar isso - e funciona quando o problema é o SELinux bloquear a leitura das ~ / .ssh / allowed_keys durante o login! Primeiro, enxure o arquivo ~ / .ssh / allowed_keys corretamente preenchido e suas permissões e permissões da pasta estão definidas corretamente. Se você executar "setenforce 0" no host de destino SSH e conseguir fazer login nesse host sem inserir uma senha, mas não poderá fazê-lo após inserir "setenforce 1" no mesmo host de destino, o seguinte poderá resolver o problema:

setsebool -P use_nfs_home_dirs 1

ref: https://cassjohnston.wordpress.com/2015/06/12/selinux-nfs-home-directories/

JamesM
fonte
0

Eu uso o nfsv4 e funciona bem com essas linhas, supondo que sua zona seja "pública" e você esteja usando as portas 2049 e 4001 padrão

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
fonte