Páginas

martes, 11 de septiembre de 2012

NFS Network File System


Un escenario físico de dos máquinas (clientes y servidor). Servidor con una distribución Debian Squeeze, dos tarjetas de red eth0 (192.168.1.0/24) conectada a Internet y eth1 (192.168.0.0/24) conectada a la red local. El servidor incorpora un cortafuegos iptables y una conexión compartida a Internet:
Escenario físico:

1. Máquina Pentium 4 3.2 2 GB de Ram actuando servidor
servidor - servidor.example.com

Estación de trabajo:

2. Gentoo linux zeus.example.com

Después de instalar NFS en el servidor es necesario para su funcionamiento funcionamiento configurar algunos ficheros y permitir el paso de paquetes a través del cortafuegos. Esto es un resumen del proceso realizado

Entrando en el servidor local (servidor.example.com)

$ ssh carlos@servidor


Fijar los nombres de la interfaz con ifrename /etc/iftab:



Fichero configuracion intefaces de red /etc/network/interfaces:



Comprobando la red con ifconfig -a:


Rutas en el servidor /sbin/route:


Activar forwarding paquetes para ipv4:
Fichero /etc/sysctl.conf
# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1
:wq
# sysctl -p


Así queda el firewall de manera que permite conectar la red local a Internet y abre los puertos necesarios para NFS y portmap:
#!/bin/sh
##/usr/local/bin/fw_nat
#iptables firewall script for sharing
#broadband Internet, with no public services

#define variables
ipt="/sbin/iptables"
mod="/sbin/modprobe"
LAN_IFACE="eth1"
WAN_IFACE="eth0"
NETLAN="192.168.0.0/24"

#basic set of kernel modules
$mod ip_tables
$mod ip_conntrack
$mod iptable_filter
$mod iptable_nat
$mod iptable_mangle
$mod ipt_LOG
$mod ipt_limit
$mod ipt_state
$mod ipt_MASQUERADE

#add these for IRC and FTP
$mod ip_nat_ftp
$mod ip_nat_irc
$mod ip_conntrack_ftp
$mod ip_conntrack_irc

# Flush all active rules and delete all custom chains
$ipt -F
$ipt -t nat -F
$ipt -t mangle -F
$ipt -X
$ipt -t nat -X
$ipt -t mangle -X

#Set default policies
$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT ACCEPT
$ipt -t nat -P OUTPUT ACCEPT
$ipt -t nat -P PREROUTING ACCEPT
$ipt -t nat -P POSTROUTING ACCEPT
$ipt -t mangle -P PREROUTING ACCEPT
$ipt -t mangle -P POSTROUTING ACCEPT

#this line is necessary for the loopback interface
#and internal socket-based services to work correctly
$ipt -A INPUT -i lo -j ACCEPT

#Enable IP masquerading
$ipt -t nat -A POSTROUTING -o $WAN_IFACE -j MASQUERADE

#Enable unrestricted outgoing traffic, incoming
#is restricted to locally-initiated sessions only
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A FORWARD -i $WAN_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A FORWARD -i $LAN_IFACE -o $WAN_IFACE -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Accept important ICMP messages
$ipt -A INPUT -p icmp --icmp-type echo-request  -j ACCEPT
$ipt -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$ipt -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT

# Restringir acceso SSH solamente a hosts LAN
$ipt -A INPUT -i $LAN_IFACE -p tcp -s $NETLAN --dport 22 --sport 1024:65535 -m state --state NEW  -j ACCEPT

# SERVICES_TCP="ssh 22 nfs 111 2049 32765 32767 32768"
# SERVICES_UDP="111 2049 32765 32767 32768 "
# $ipt -N tcp_packets

# for x in ${SERVICES_TCP}
# do
# $ipt -A tcp_packets -p tcp -s $NETLAN --dport ${x} -j ACCEPT
# done

# for x in ${SERVICES_UDP}
# do
# $ipt -A tcp_packets -p tcp -s $NETLAN --dport ${x} -j ACCEPT
# done
# netstat -tl
# /etc/modprobe.d/local.conf http://wiki.debian.org/SecuringNFS

# Abrir puertos NFS
$ipt -A INPUT -m state --state NEW  -p tcp --dport 2049 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p udp --dport 2049 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p tcp --dport 111 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p udp --dport 111 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p udp --dport 32765 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p tcp --dport 32765  -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p tcp --dport 32767 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p udp --dport 32767 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p tcp --dport 32768 -j ACCEPT
$ipt -A INPUT -m state --state NEW  -p udp --dport 32768 -j ACCEPT


Fichero /etc/modprobe.d/local.conf


Arrancando el firewall con el sistema. /etc/rc.local


Cambios en el fichero /etc/default/nfs-common


Cambios en el fichero /etc/default/nfs-kernel-server


Modificando /etc/hosts /etc/hosts.allow /etc/hosts.deny:


Definiendo servicios en /etc/services

 # vim /etc/services
 nfs     2049/tcp    # Network File System
 nfs     2049/udp    # Network File System

Fuente: http://wiki.debian.org/SecuringNFS

Información sobre rutas y servicios:
# netstat -tl

Reporte RPC información con rpcinfo -p lista todos los programas RPC registrados:


Directorios a compartir en red utilizando NFS /etc/exports:


Permisos de las carpetas:


exportfs -a sincroniza con el contenido de /etc/exports


En la estación de trabajo:
zeus carlos # /etc/init.d/rpcbind start
rpcbind       | * Starting rpcbind ...                                   [ ok ]
zeus carlos # /etc/init.d/rpc.statd start
rpc.statd     | * Starting NFS statd ...                                 [ ok ]
zeus carlos # /etc/init.d/nfs start      
rpc.idmapd    | * Starting idmapd ...                                    [ ok ]
nfs           | * Starting NFS mountd ...                                [ ok ]
nfs           | * Starting NFS daemon ...
nfs           |rpc.nfsd: Unable to access /proc/fs/nfsd 
nfs           | * Starting NFS smnotify ...                              [ ok ]
zeus carlos # 
Montar directorios:
El acceso de los usuarios dependerá de los permisos asociados a las carpetas. Por ejemplo para crear un directorio donde todo el mundo pueda escribir ficheros, donde todos los ficheros tengan el mismo grupo, pero donde nadie pueda suprimir los ficheros de los demás los derechos son:
rwxrwsrwt, lo que es lo mismo, 3777 en octal.

Si se tiene activada la opción volumes_visible el Escritorio se verá así:


Fuente: http://wiki.debian.org/SecuringNFS

Linux es genial!.