Se me planteó un problema ayer en clase... tenia que hacer un firewall con iptables estableciendo una politica por defecto de INPUT (entrada de paquetes a mi maquina) a DROP y que funcionase con NFS...
En principio lo pensé facil... abrimos la entrada al servicio RPC (sunrpc) que corre por el puerto 111 y abro el NFSD (puerto 2079) y listo... pero luego se me iba complicando, porque tenemos varios servicios más: lockd, mountd y statd... ¿que hacemos con estos? Como todos sabeis, tanto statd, como mountd y lockd, se mueven por el primer puerto disponible que el mapeador de puertos les indique. Esto nos complica la tarea, ya que si no sabemos porqué puerto se mueven estos servicios, y tenemos una politica DROP por defecto, ¿como vamos a aceptar algo que no sabemos por donde se mueve?. ´
La única solución que se me ocurrió, fue mapear los puertos de estos servicios a un puerto fijo, ejecutando:
# statd -p 32765 -o 32766
# mountd -p 32767
El problema es lockd, ya que es iniciado por el kernel cuando es necesitado. Lo que sugieren los chicos de NFS, es cambiar nuestros parametros de arranque del kernel para fijarle un puerto fijo al servicio lockd, lo cual, me parece un poco chapuzilla, pero funcionaria:
vmlinuz 3 root=/dev/hda1 lockd.udpport=32768 lockd.tcpport=32768
Asi quedaria en mi caso...
Una vez tenemos todo ligado, solo nos quedaria hacer las reglas:
iptables -A INPUT -f -j ACCEPT -s 192.168.0.0/24
iptables -A INPUT -s 192.168.0.0/24 -d -s 192.168.0.2 32765:32768 -p tcp -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.2 32765:32768 -p udp -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.2 2049 -p tcp -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.2 2049 -p udp -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.2 111 -p tcp -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.2 111 -p udp -j ACCEPT
Esto es, en primer lugar aceptamos todos los fragmentos de paquetes (excepto el primero, ya que sería un paquete normal) solo de los que vengan de nuestra lan. Y a continuación abrimos los puertos que hemos dicho anteriormente.
Esta solucion funciona, vale, pero me parece un poco chapuza, ¿se os ocurre alguna forma de habilitar NFS sobre IPTABLES sin mapear los puertos de statd y compañia?
Gracias muy buen consejo, me funciono a la perfeccion
utilizo fedora 3 y la unica modificacion es la siguiente: en el siguiente orden
service iptables restart
service nfs restart
service portmap restart
rpc.statd -p 32765 -o 32766
rpc.mountd -p 32767
Silverado (N) | 19-07-2005 02:23:38