Hardening de NFS
Guía Completa de Seguridad para Network File System
Introducción
Network File System (NFS) es un protocolo de sistema de archivos distribuido que permite a los usuarios acceder a archivos y directorios ubicados en servidores remotos como si estuvieran en su sistema local. Sin embargo, por defecto, NFS presenta vulnerabilidades significativas que pueden comprometer la seguridad de toda la infraestructura de red.
El hardening de NFS es un proceso crítico que implica la implementación de múltiples capas de seguridad para proteger los datos, controlar el acceso y prevenir ataques malintencionados. En este artículo, exploraremos las mejores prácticas y técnicas avanzadas para fortificar su implementación de NFS.
Principales Vulnerabilidades de NFS
Autenticación Débil
NFS tradicionalmente utiliza la autenticación basada en UID/GID del sistema, que es fácilmente falsificable. Los atacantes pueden manipular estos identificadores para obtener acceso no autorizado.
Transmisión en Texto Plano
Las versiones anteriores de NFS transmiten datos sin cifrado, permitiendo que los atacantes intercepten y analicen el tráfico de red para obtener información sensible.
Exposición de Puertos
NFS utiliza múltiples servicios (rpcbind, mountd, statd, lockd) que exponen varios puertos, aumentando la superficie de ataque disponible para los ciberdelincuentes.
| Servicio | Puerto por Defecto | Función | Riesgo de Seguridad |
|---|---|---|---|
| NFS Server | 2049 | Servicio principal NFS | Alto |
| rpcbind | 111 | Mapeo de puertos RPC | Muy Alto |
| mountd | Variable | Gestión de montajes | Alto |
| statd | Variable | Monitor de estado | Medio |
Configuración Básica Segura
Configuración del Archivo /etc/exports
El archivo /etc/exports define qué directorios se comparten y con qué restricciones.
Una configuración segura debe implementar el principio de menor privilegio.
/home/shared 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/var/data 192.168.1.100(ro,sync,no_subtree_check,root_squash)
/backup 10.0.0.0/8(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
Opciones de Seguridad Importantes
- root_squash: Mapea las solicitudes del usuario root a anonymous user
- all_squash: Mapea todos los usuarios a anonymous user
- no_subtree_check: Mejora el rendimiento y evita problemas de consistencia
- sync: Garantiza que los datos se escriban al disco antes de responder
- secure: Requiere que las solicitudes originen desde puertos privilegiados
no_root_squash a menos que sea absolutamente
necesario, ya que permite que el usuario root remoto tenga privilegios completos en el servidor.
Implementación de NFSv4 con Kerberos
Ventajas de NFSv4
NFSv4 introduce mejoras significativas de seguridad, incluyendo soporte nativo para autenticación fuerte mediante Kerberos, cifrado de datos y un modelo de seguridad más robusto.
Configuración de Kerberos
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
Configuración del Servidor NFS con Kerberos
/secure/data gss/krb5p(rw,sync,no_subtree_check)
/public/docs gss/krb5i(ro,sync,no_subtree_check)
# Iniciar servicios necesarios
systemctl enable rpc-gssd
systemctl start rpc-gssd
systemctl enable nfs-server
systemctl start nfs-server
- krb5: Autenticación únicamente
- krb5i: Autenticación + integridad
- krb5p: Autenticación + integridad + privacidad (cifrado)
Configuración de Firewall y Control de Red
Fijación de Puertos
Para facilitar la configuración del firewall, es recomendable fijar los puertos utilizados por los servicios auxiliares de NFS.
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
# Reiniciar servicios después de cambiar configuración
systemctl restart nfs-config
systemctl restart nfs-server
Configuración de iptables
# Script de configuración de firewall para NFS
# Permitir tráfico NFS desde redes específicas
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 2049 -j ACCEPT
# Permitir servicios auxiliares (puertos fijos)
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 892 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 32803 -j ACCEPT
# Denegar todo lo demás
iptables -A INPUT -j DROP
# Guardar configuración
iptables-save > /etc/iptables/rules.v4
Monitoreo y Auditoría
Logging Avanzado
Implementar un sistema de logging robusto es crucial para detectar actividades sospechosas y mantener un registro de auditoría completo.
# Capturar logs de NFS en archivo separado
daemon.info /var/log/nfs.log
# Configuración del kernel para auditoría de NFS
# /etc/audit/audit.rules
-a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts
-w /etc/exports -p wa -k nfs_exports
-w /etc/fstab -p wa -k nfs_mounts
Script de Monitoreo
# Script de monitoreo NFS - nfs_monitor.sh
LOG_FILE="/var/log/nfs_security.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# Verificar conexiones activas
echo "[$DATE] Conexiones NFS activas:" >> $LOG_FILE
netstat -an | grep :2049 >> $LOG_FILE
# Verificar montajes anómalos
echo "[$DATE] Montajes NFS actuales:" >> $LOG_FILE
showmount -a >> $LOG_FILE
# Verificar intentos de conexión desde IPs no autorizadas
echo "[$DATE] Verificando accesos no autorizados:" >> $LOG_FILE
grep "refused" /var/log/messages | tail -10 >> $LOG_FILE
# Ejecutar cada 5 minutos via cron
# */5 * * * * /usr/local/bin/nfs_monitor.sh
Checklist de Hardening
🛡️ Lista de Verificación de Seguridad
- Actualizar a NFSv4 con autenticación Kerberos
- Configurar root_squash en todas las exportaciones
- Limitar acceso a redes específicas en /etc/exports
- Fijar puertos de servicios auxiliares
- Configurar firewall para permitir solo tráfico autorizado
- Implementar logging y monitoreo continuo
- Realizar auditorías periódicas de configuración
- Usar cifrado para datos sensibles (krb5p)
- Configurar TCP Wrappers para control de acceso adicional
- Implementar detección de intrusiones (IDS)
- Mantener backups seguros de configuraciones
- Documentar todos los cambios de configuración
Mejores Prácticas Avanzadas
Segmentación de Red
Implementar segmentación de red mediante VLANs o subredes separadas para aislar el tráfico NFS del resto de la red, reduciendo el riesgo de lateral movement en caso de compromiso.
Autenticación de Dos Factores
Para entornos altamente sensibles, considerar la implementación de autenticación de dos factores integrada con Kerberos para añadir una capa adicional de seguridad.
Cifrado a Nivel de Sistema de Archivos
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 encrypted_nfs
mkfs.ext4 /dev/mapper/encrypted_nfs
mount /dev/mapper/encrypted_nfs /nfs/encrypted_data
Conclusiones
El hardening de NFS es un proceso complejo que requiere una aproximación multicapa para ser efectivo. La implementación de estas medidas de seguridad no solo protege los datos, sino que también garantiza la integridad y disponibilidad del servicio.
Es fundamental mantener una mentalidad de seguridad por diseño, donde cada configuración se evalúa desde la perspectiva de minimizar riesgos y maximizar la protección de los activos digitales.
Recuerde que la seguridad es un proceso continuo que requiere monitoreo constante, actualizaciones regulares y adaptación a nuevas amenazas. Mantenga siempre sus sistemas actualizados y revise periódicamente sus configuraciones de seguridad.