Por que o cliente NFS está usando portas de numeração baixa?

3

Estou executando uma instância do CoreOS EC2. Eu executo um processo nesta instância que escuta na porta local 950. Geralmente, tudo funciona bem, mas depois de uma reinicialização recente do servidor CoreOS, o processo não pôde escutar na porta 950 porque já estava sendo usado por outro processo.

Esse outro processo parece ser um cliente NFSv4 usado para montar um volume do AWS EFS. Aqui está o que netstat me diz:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 10.30.102.250:950       10.30.102.170:2049      ESTABLISHED

Aqui está a parte relevante de /etc/mtab :

fs-faa33256.efs.us-west-2.amazonaws.com:/ /efs nfs4 rw,relatime,vers=4.1,\
rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,\
clientaddr=10.30.102.250,local_lock=none,addr=10.30.102.170 0 0

Algumas perguntas: 1. Por que o cliente NFS no servidor CoreOS está usando uma porta baixa-numerada para se comunicar com o servidor NFSv4 remoto? 2. Posso dizer ao cliente NFS para evitar o uso da porta 950 (ou usar somente portas sem privilégios)?

    
por rlandster 14.10.2017 / 22:10

1 resposta

3

(A seguinte resposta é derivada em grande parte dos comentários de Jeff Schaller ao meu post original.)

Para evitar que usuários não-raiz montem um volume NFS, um servidor NFS pode exigir que um cliente NFS use uma porta privilegiada (1-1023). No entanto, permitir que apenas usuários root montem um volume NFS oferece pouca segurança hoje em dia, já que qualquer um que possa colocar uma máquina na rede pode ser root nessa máquina.

Devido a essa prática de segurança antiga, alguns clientes NFS usarão as portas privilegiadas ao se conectarem a um servidor NFS.

Isso pode causar conflitos de porta se o seu cliente precisar executar um serviço em uma porta privilegiada. Uma maneira de contornar isso é definir as portas privilegiadas mínima e máxima que o cliente NFS usará para que o cliente NFS evite portas usadas por outros serviços. Esse intervalo de portas pode ser definido como parâmetros do kernel ; no CoreOS esses parâmetros podem ser armazenados nos arquivos /sys/module/sunrpc/parameters/min_resvport e /sys/module/sunrpc/parameters/max_resvport .

Você pode evitar todo o problema de porta privilegiada ao adicionar uma opção ao montar o volume NFS, informando ao sistema para usar portas não providas de valor. No caso do Linux, esta é a opção noresvport (veja também a página man do Linux nfs (5) ) .

Este é o comando mount que acabamos usando em nosso servidor CoreOS:

fs-faa33256.efs.us-west-2.amazonaws.com:/ /efs nfs4 rw,relatime,vers=4.1,\
rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,\
clientaddr=10.30.102.250,local_lock=none,addr=10.30.102.170 0 0
    
por 22.10.2017 / 17:32

Tags