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