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