Traduções: English - Português (Brasil)


Melhorando a segurança do NFS

Observações sobre a aplicação das sugestões da seção de Segurança do Como Fazer NFS no Debian 4.0 (Etch). Essas configurações devem funcionar no Debian 3.1 (Sarge).

https://www.tldp.org/HOWTO/NFS-HOWTO/security.html

Firewalls

Amigável ao Firewall

Quando você configura um firewall rigoroso, segue o paradigma "bloqueia tudo, permite algumas". O sistema ?pt_BR/SunRPC foi projetado com base no paradigma "confie no sistema remoto" e no paradigma "simplifique para o administrador, use portas dinâmicas". Felizmente, os serviços que você usa com o NFS têm opções de porta para funcionar melhor com seu firewall.

Os exemplos a seguir são modificações para um Debian 3.1 (Sarge) (para Debian 6.0 (Squeeze), leia os comentários na parte inferior da página) com o kernel 2.6 Linux. Na maioria dos casos, eles não indicam o conteúdo completo dos arquivos, apenas as partes que foram modificadas.

É fácil configurar as opções de porta para os serviços RPC statd, mountd e quotad, graças ao uso de /etc/default/* pelos init-scripts

 # /etc/default/nfs-common
 STATDOPTS="--port 32765 --outgoing-port 32766"

 # /etc/default/nfs-kernel-server
 RPCMOUNTDOPTS="-p 32767"

 # /etc/default/quota
 RPCRQUOTADOPTS="-p 32769"

O daemon nfs (rpc.nfsd ou apenas nfsd) escutará na porta 2049 por padrão quando nenhuma porta é especificada.

A mudança para /etc/services não é obrigatória. Isso apenas ajuda a produzir uma boa saída (sensível) a partir do netstat -tl no servidor NFS.

 # /etc/services
 # NFS ports as per the NFS-HOWTO
 # http://www.tldp.org/HOWTO/NFS-HOWTO/security.html#FIREWALLS
 # Listing here does not mean they will bind to these ports. 
 rpc.nfsd        2049/tcp                        # RPC nfsd
 rpc.nfsd        2049/udp                        # RPC nfsd
 rpc.nfs-cb      32764/tcp                       # RPC nfs callback
 rpc.nfs-cb      32764/udp                       # RPC nfs callback
 rpc.statd-bc    32765/tcp                       # RPC statd broadcast
 rpc.statd-bc    32765/udp                       # RPC statd broadcast
 rpc.statd       32766/tcp                       # RPC statd listen
 rpc.statd       32766/udp                       # RPC statd listen
 rpc.mountd      32767/tcp                       # RPC mountd
 rpc.mountd      32767/udp                       # RPC mountd
 rpc.lockd       32768/tcp                       # RPC lockd/nlockmgr
 rpc.lockd       32768/udp                       # RPC lockd/nlockmgr
 rpc.quotad      32769/tcp                       # RPC quotad
 rpc.quotad      32769/udp                       # RPC quotad

Parâmetros do Kernel: criei /etc/modprobe.d/local.conf para fornecer o módulo lockd com as opções.

 # /etc/modprobe.d/local.conf
 options lockd nlm_udpport=32768 nlm_tcpport=32768
 options nfs callback_tcpport=32764

Parâmetros alternativos ao kernel: Essas configurações podem ser inseridas no /etc/sysctl.conf ou no /etc/sysctl.d/nfs-static-ports.conf:

fs.nfs.nfs_callback_tcpport = 32764
fs.nfs.nlm_tcpport = 32768
fs.nfs.nlm_udpport = 32768

Essas configurações podem ser recarregadas sem a reinicialização e, em seguida, levadas em consideração pelo servidor do kernel do NFS usando:

sysctl --system
/etc/init.d/nfs-kernel-server restart

A abordagem do sysctl foi testada com sucesso no Debian 7 “Wheezy”.

Regras do Firewall

Criar regras para seu firewall para os serviços acima agora deve ser tão simples quanto criar regras para serviços mais comuns que se ligam a portas conhecidas, como http.

Shorewall

Um exemplo de permissão para um servidor de firewall fazer montagens nfs em um servidor interno. Esse conjunto de regras para o firewall Shorewall permite o tráfego para o portmap (111) e nfs (2049). O programa mount no Etch parece preferir conexões tcp para nfs e mountd, então adicionamos regras tcp para todas as portas e intervalos.

 # Allow nfs mounts to local network
 ACCEPT          fw      loc             udp     111
 ACCEPT          fw      loc             tcp     111
 ACCEPT          fw      loc             tcp     2049
 ACCEPT          fw      loc             udp     2049
 ACCEPT          fw      loc             tcp     32764:32769
 ACCEPT          fw      loc             udp     32764:32769


Observações

Os números das portas são sugestões

As portas listadas acima são sugestões do Como Fazer do NFS. A listagem aqui não indica que eles fazem parte do registro IANA, nem é a única sugestão. Chris Lowth tem uma lista diferente de portas, mas o conceito é basicamente o mesmo. Eu escolhi as portas Como Fazer do NFS, apenas porque é um documento popular e altamente visível.

Como as portas 32768 e 32769 estão no intervalo de portas efêmeras, a saída de ss -l não incluirá o nome dos serviços para essas portas.

Quem cria a porta?

As páginas de manual de programas RPC individuais como rpc.statd e rpc.portd, bem como documentação on-line Como Fazer do NFS em tldp.org, afirmam que o portmapper atribui uma porta aleatória.

Outros documentos da internet, incluindo um tópico sobre firewall com NFS do fórum Gentoo e As notas da IANA sobre números RPC da Sun, afirmam que o portmap não aloca portas. Os serviços solicitam a próxima porta disponível do kernel e registram sua porta no portmap.

Parece que uma verificação rápida de código e possíveis correções de documentação estão a caminho.

Erro no Debian 6.0 (Squeeze)

Reiniciar o serviço causa o erro a seguir:

 # /etc/init.d/nfs-kernel-server restart
 Starting NFS kernel daemon: nfsdrpc.nfsd: unable to resolve ANYADDR:nfs to inet address: Servname not supported for ai_socktype
rpc.nfsd: unable to set any sockets for nfsd
failed!

Isso ocorre porque o serviço nfs não está definido no /etc/services para resolver esse problema, basta adicionar uma entrada para o nfs no /etc/services, conforme abaixo:

 # /etc/services
 nfs     2049/tcp    # Network File System
 nfs     2049/udp    # Network File System


CategorySystemSecurity CategoryNetwork CategorySoftware