Regras de iptables para permitir o acesso de clientes ao NFS Server

Eu sei. Estamos no mundo da nuvem. Mas … ainda temos muitas estrutura dentro de empresas e inclusive, em datacenters terceirizados. Portanto, ainda podemos ter estruturas que estejam usando o antigo ( e ainda muito bem implementado ), NFS .

E é aquela, os protocols ainda por cima são bem complexos e com isto, nem lendo a RFC fica fácil criar regras para acessar os daemons NFS remotamente ou até, limitar o acesso a sua rede ao daemon propriamente dito ( sim, porque o daemon já tem uma limitação no ponto de montagem ).

E tem aquela, o portmapper aleatoriamente entrega ao daemon do NFS uma série de portas dinamicamente quando ele inicializa.

Como no Linux temos como filtro de pacotes o iptables batemos numa limitação do mesmo, que é não permitir a criação dos filtros com ele. E pesquisando, acabei achando a solução ( completa ) para o problema.

O primeiro passo é configurar o NFS para usar portas fixas. O arquivo para que isto seja feito é o /etc/sysaconfig/nfs .

A litas das diretivas que tem que ser modificadas estão aqui :

Porta TCP que o rpc.lockd vai subir ouvindo. LOCKD_TCPPORT=lockd-port-number

Porta UDP que o rpc.lockd vai subir ouvindo. LOCKD_UDPPORT=lockd-port-number

Porta que o rpc.mountd vai ouvir. MOUNTD_PORT=mountd-port-number

Porta que o rquotad vai ouvir. RQUOTAD_PORT=rquotad-port-number

Porta que o rpc.statd vai ouvir. STATD_PORT=statd-port-number

Porta de saída que o statd vai usar. A porta padrão é randômica. STATD_OUTGOING_PORT=statd-outgoing-port-number

E como exemplo no Cybercity.biz ele configurou deste modo :

LOCKD_TCPPORT=32803    
LOCKD_UDPPORT=32769    
MOUNTD_PORT=892    
RQUOTAD_PORT=875    
STATD_PORT=662    
STATD_OUTGOING_PORT=2020    

Feito isto é reiniciar os serviços relacionados :

Centos 6

# service portmap restart    
# service nfs restart    
# service rpcsvcgssd restart    

Centos 8

# systemctl restart  nfs    
# systemctl restart portmap    
# systemctl restart rpcsvcgssd    

E aqui as regras de iptables :

-A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT    
-A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT    
-A NPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p tcp --dport 32803 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p udp --dport 32769 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p tcp --dport 892 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p udp --dport 892 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p tcp --dport 875 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p udp --dport 875 -j ACCEPT    
-A INPUT -s 192.168.1.0/24  -m state --state NEW -p tcp --dport 662 -j ACCEPT    
-A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 662 -j ACCEPT    

Modifique o range 192.168.1.0/24 para o range de sua rede, ou, então, caso queira limitar o acesso para um dos seus dispositivos da rede 192.168.1.10/32 .

Feito isto, só reiniciar o iptables.

CentOS 6

# service iptables restart

CentOS 7/8

# systemct restart iptables