21 abril 2007

Network File System (NFS) e a Firewall

Cada vez mais, começamos a ter as nossas "redes caseiras" configuradas em casa, e para além de partilharmos a internet para outros pc's, também podemos usufruir de partilhas de disco assim como de impressoras duns pc's para outros.
Quando se usa pc's com linux em casa, um método para partilhar pastas entre pc's é o NFS.
O NFS é excelente, rápido e respeita as permissões de cada ficheiro desde que se use em partições que suportem o sistema de permissões do linux.
Porém, quando há uma firewall no sistema, o montar/desmontar uma partilha NFS fica muito demorada... mas depois da montagem feita, a tudo funciona bem, até chegada a hora de desmontar e lá temos o atraso.
Estive com este problema durante algum tempo, até que esta semana decidi dedicar-me a resolvê-lo.

O manual do NFS tem uma lacuna:
Ele diz que usa a porta 111 para o 1º passo (portmap) e depois a porta 2049 para o NFS, mas não é feita referência que o comando mount usa outras portas... para complicar mais a coisa, o comando mount não tem uma porta pré-defenida para funcionar e a cada boot funciona com uma porta diferente... enquanto observava o funcionamento, detectei que os meus comandos de montagem, tanto queriam funcionar pela porta 730, como 784, 947, 878, etc etc... ora isto torna impossivel a correcta configuração duma firewall.
A solução passa por defenir-mos uma porta fixa para o "mountd" funcionar:

com o comando
# rpcinfo -p
podemos ver qual a porta que o "mountd" está a usar no momento e verificar que altera a cada boot/reboot.

Solução para Mandriva 2007:
editar o ficheiro /etc/sysconfig/nfs e descomentar as linhas

MOUNTD_PORT=4002
LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
STATD_PORT=4000
STATD_OUTGOING_PORT=4000
(e reiniciar)


Solução para Debian:
adicionar estas linhas em /etc/services

mountd 4002/tcp
mountd 4002/udp
lockd 4001/tcp
lockd 4001/udp
statd 4000/tcp
(e reiniciar)

neste caso escolhi a porta 4002 para o mountd
(as outras 4000 e 4001 são também necessárias segundo o que li, e as não questionei)
Só tenho oportunidade de testar esta alteração em Debian e Mandriva, mas penso que nas outras distros será algo semelhante. Esta alteração é necessária nos Pc's que partilhem pastas, se algum deles apenas aceder a pastas partilhadas e não partilhar nada, então esta alteração é desnecessária.

Depois destas pequenas alterações feitas, usamos o "rpcinfo -p" para verificarmos que a alteração resultou.

E pronto, agora podemos abrir na firewall as portas
4000 a 4002 TCP
4001 UDP bidirecional
(importante que apenas se abra estas portas na nossa "zona" de rede-caseira)
e abrimo-las aceitando ligação iniciada de cliente para servidor (o servidor é quem tem a pasta partilhada).

Falta apenas dizer (e agradecer) que me apoiei bastante nesta página
e apesar de não ter levado as instruções à risca (até porque eram para Red Hat), foi ela que me trouxe luz na resolução do problema.

Depois disto, o meu mount/unmount reduziu de 3min para 1seg a executar.

0 comentários: