Si estás ejecutando Samba sobre una máquina que pertenece a varias subedes, o si quieres implementar una política de seguridad sobre tu propia subred, deberías echar un vistazo a las opciones de configuración de red:
Para los propósitos de este ejemplo, adumiremos que nuestro servidor Samba está conectado a una red con más de una subred. Concretamente, la máquina puede acceder a las subredes 192.168.220.* y 134.213.233.*. Aquí tienes unas adiciones para el fichero de configuración:
[global]
netbios name = HYDRA
server string = Samba %v on (%L)
workgroup = SIMPLE
# Networking configuration options
hosts allow = 192.168.220. 134.213.233. localhost
hosts deny = 192.168.220.102
interfaces = 192.168.220.100/255.255.255.0 \
134.213.233.110/255.255.255.0
bind interfaces only = yes
[data]
path = /home/samba/data
guest ok = yes
comment = Data Drive
volume = Sample-Data-Drive
writeable = yes
Hablaremos primero de las opciones hosts allow y hosts deny. Si te suenan familiares, estarás pensando probablemente en los ficheros hosts.allow y hosts.deny que se encuentran en los directorios /etc de muchos sistemas Unix. El propósito de estas opciones es idéntico al de dichos ficheros; proporcionan una medida de seguridad permitiendo o denegando las conexiones de otras máquinas en base a sus direcciones IP. ¿Y por qué no usamos entonces los archivos hosts.allow y hosts.deny? Porque pueden existir otros servicios en el servidor que sí quieras ofrecer a esas IPs, pero que no tengan acceso a los recursos que ofrece Samba.
Con la opción hosts allow, hemos especificado un rango de IPs: 192.168.220. (fijate en el punto al final de 220; sólo hemos obviado el cuarto número). Esto equivale a decir: "Todas las máquinas en la red 192.168.220". Sin embargo, también hemos explícitamente denegado el acceso a una IP determinada, 192.168.220.102. Esta no podrá acceder. El resto sí.
Te preguntarás ¿Por qué se denegará el acceso a 192.168.220.102 si está en la subred que autoriza la opción hosts allow? Aquí teienes cómo Samba interpreta las reglas especificadas por hosts allow y hosts deny :
- Si no hay opciones allow o deny definidas en smb.conf, Samba permitirá conexiones desde cualquier máquina que el propio sistema admita.
- Si existen opciones hosts allow o hosts deny definidas en la sección [global] del smb.conf, la aplicará a todos los recursos, excepto si los recursos tienen sus propias definiciones establecidas.
- Si sólo existe definida hosts allow para un recurso, sólo las máquinas listadas tendrán acceso al recurso. Las demás serán denegadas.
- Si sólo hay una opción hosts deny definida para un recurso, cualquier máquina que no esté en la lista tendrá acceso al recurso.
- Si ambas opciones hosts allow y hosts deny están definidas, una máquina deberá aparecer en la lista de aceptadas y no aparecer en la lista de denegadas. De lo contrario, se le negará el acceso.
ADVERTENCIA: cuidado con dar acceso a una máquina a un recurso, y luego denegar acceso a toda su subred.
Veamos otro ejemplo. Considera las siguientes opciones:
hosts allow = 111.222. hosts deny = 111.222.333.
En este caso, sólo las máquinas que pertenezcan a la subred 111.222.*.* tendrán acceso a los recursos de Samba. sin embargo, si un cliente pertenece a la subred 111.222.333.*, le será denegado el acceso, aunque pertenezca al rango de las aceptadas por hosts allow. El cliente debe aparecer en la lista de hosts allow y no debe aparecer en la lista de hosts deny para que pueda tener acceso a un recurso de Samba. Si una máquina intenta acceder a un recurso para el cual no se le permite el acceso, recibirá un mensaje de error.
Las otras dos opciones que podemos especificar son interfaces y bind interface only. Veamos la opción interfaces primero. Samba, por defecto, envía datos sólo desde el interfaz de red primario, el cual en nuestro ejemplo es la subred 192.168.220.100. Si queremos enviar datos a través de más de una interfaz, necesitamos especificar la lista completa con la opción interfaces. En el ejemplo anterior, hemos configurado Samba para que sirva a ambas subredes (192.168.220 y 134.213.233), y para la segunda está actuando a través de la interfaz de red 134.213.233.100. Si tienes más de una interfaz de red en tu computadora, deberías siempre establecer ésta opción, ya que no hay garantías de que que el primer interfaz de red que Samba seleccione sea el correcto.
Finalmente, la opción bind interfaces only instruye al proceso nmbd para que no acepte mensajes de difusión (broadcast) que no sean los de aquellas subredes especificadas con la opción interfaces. Advierte que es diferente a las opciones hosts allow y hosts deny, las cuales previenen sobre las máquinas que pueden conectar a servicios, pero no controlan la recepción de mensajes de difusión. Usar la opción bind interfaces only es la forma de cortar datagramas de subredes extrañas hacia el servidor Samba. En adición, esta opción instruye al proceso smbd para que enlace sólo con los interfaces listados en la opción interfaces. Esto restringe las redes a las que Samba servirá.
Opciones de Red
Las opciones de red de las que hemos hablado se resumen en la Tabla 4.5.
Table: Opciones de Configuración de Red.|| Opción || Parámetros || Función || Defecto || Ambito ||
|| hosts allow (allow hosts) || string (lista de nombres de máquinas) || Especifica las máquinas que pueden conectar a Samba. || ninguno || recurso ||
|| hosts deny (deny hosts) || string (lista de nombres de máquinas) || Especifica las máquinas que NO pueden conectar a Samba. || ninguno || recurso ||
|| interfaces || string (lista de combinaciones IP/máscara de red) || Establece los interfaces de red a los que Samba atenderá. || dependiente de sistema || Global ||
|| bind interfaces only || booleano || Si es yes, Samba sólo enlazará con aquellos interfaces especificados con la opción interfaces. || no || Global ||
|| socket address || string (IP) || Establece direcciones IP para la escucha, para usar con múltiples interfaces virtuales en un servidor. || ninguno || Global ||
hosts allow
La opción hosts allow (a veces escrita como allow hosts) especifica las máquinas que tendrán permiso para acceder a los recursos del servidor Samba, escritas como lista de IPs separadas por comas o espacios en blanco. También puedes emplazar colocando la dirección de tu subred en ésta opción. Por ejemplo, especificamos lo siguiente en nuestro ejemplo:
hosts allow = 192.168.220. localhost
Advierte que hemos colocado localhost tras la dirección de subred. Uno de los errores más comunes cuando intentamos usar la opción hosts allow es desactivar accidentalmente al servidor Samba para comunicar consigo mismo. El programa smbpasswd ocasionalmente necesitará conectar al servidor Samba como cliente para cambiar una contraseña de usuario encriptada. En adición, la propagación de la visualización local requiere acceso al host local. Si esta opción es activada y la dirección de la máquina localhost no se especifica, los paquetes generados localmente en respuesta a cambios de las contraseñas encriptadas serán descartados por Samba, y la propagación de la lista de visualización no trabajará correctamente. Para evitar esto, permite explícitamente el uso de la dirección de loopback (usa localhost o 127.0.0.1)
4.3.
Puedes especificar cualquiera de los siguientes formatos para esta opción:
- Nombres de Hosts, tales como ftp.example.com .
- Direcciones IP, como 130.63.9.252.
- Nombres de Dominio, que pueden ser diferenciados de nombres individuales de máquinas porue estos empiezan por un punto. Por ejemplo, , .ora.com representa a todas las máquinas dentro del dominio ora.com.
- Grupos de Red, los cuales comienzan con un símbolo (@), como @printerhosts. Los grupos de red están disponibles en sistemas corriendo páginas amarillas/NIS o NIS+. Si los grupos de red son soportados en tu sistema, debería haber una página de manual sobre netgroups que los describe en más detalle.
- SubRedes, las cuales terminan con un punto. Por ejemplo, 130.63.9. significa todas las máquinas cuyas direcciones IP comenzan por 130.63.9.
- La palabra clava ALL, que permite acceso a cualquier cliente.
- La palabra clave EXCEPT seguida por uno o más nombres, direcciones IP, nombres de dominio, grupos de red o subredes. Por ejemplo, podrías especificar que Samba permita acceso a todas las máquinas excepto a aquellas en la subred 192.168.110 con hosts allow = ALL EXCEPT 192.168.110. (no te olvides del punto).
Usar la palabra clave ALL es siempre un mala idea, ya que significa que cualquiera desde cualquier subred puede navegar por tus ficheros si simplemente conocen el nombre de tu servidor.
Advierte que aquí no hay valor por defecto para la opción de configuración hosts allow, aunque el la acción por defecto en el caso de no especificar nada es permitir el acceso desde todos los clientes. Además, si especificas esta opción en la sección [global] del fichero de configuración, esta prevalecerá sobre cualesquiera opciones hosts allow definidas a nivel de recursos.
hosts deny
La opción hosts deny (también deny hosts) especifica máquinas que no tienen permiso para acceder a recursos, escritas en forma de lista de nombres de máquinas o de IPs separadas por una coma o espacio en blanco. Usa el mismo formato que la opción hosts allow. Por ejemplo, para restringir el acceso al servidor para todo el mundo excepto a example.com, escribirías:
hosts deny = ALL EXCEPT .example.com
Como en el caso de hosts allow, no hay valor por defecto para la opción de configuración hosts deny, aunque si no se especifica nada, se permite el acceso desde todos los clientes. También, si especificas esta opción en la sección [global] del fichero de configuración, esta prevalecerá sobre cualesquiera opciones hosts deny definidas a nivel de los recursos. Si deseas negar el acceso de máquinas a determinados recursos, omite las opciones hosts allow y hosts deny en la sección [global] y defínela a nivel de recurso.
interfaces
La opción interfaces configura las direcciones de red a las cuales quieres que el servidor Samba reconozca y responda. Esta opción es útil si tienes una computadora que resida en más de un subred. Si esta opción no se configura, Samba buscará por el primer interfaz de red del servidor (normalmente la primera tarjeta Ethernet) al arrancar y se configurará para operar sólo con esa subred. Si el servidor lo quieres configurar para atender a más de una subred y no especificas esta opción, Samba sólo trabajará con la primera subred que encuentre. Debes usar esta opción para forzar a Samba a servir a las demás subredes de tu red.
El valor de esta opción es uno o más pares de valores Dirección-IP/Máscara-de-Red, tal como las que siguen:
interfaces = 192.168.220.100/255.255.255.0 192.168.210.30/255.255.255.0
Opcionalmente puedes especificar un formato CIDR, como sigue:
interfaces = 192.168.220.100/24 192.168.210.30/24
El número de bit de máscara especifica el primer número de bits que serán incluidos en la máscara de red. Por ejemplo, el número 24 significa que los primeros 24 (de 32) bits serán activados en la máscara de bit, lo cual es lo mismo que decir 255.255.255.0. Así, 16 sería equivalente a 255.255.0.0, y 8 lo sería a 255.0.0.0. ADVERTENCIA: Esta opción puede no funcionar correctamente si estás usando DHCP.
bind interfaces only
La opción bind interfaces only puede usarse para forzar a los procesos smbd y nmbd a servir a peticiones SMB de sólo las direcciones especificadas por la opción interfaces. El proceso nmbd normamente enlaza a todas las direcciones (0.0.0.0.) en los puertos 137 y 138, permitiendo la recepción de broadcasts desde cualquier lugar. Sin embargo, puedes arreglar esto con lo siguiente:
bind interfaces only = yes
Esto causará que ambos procesos de Samba ignoren cualesquiera paquetes cuya dirección de origen no coincida con la dirección(es) de broadcast especificadas por la opción interfaces, incluyendo a los paquetes de broadcast. Con smbd, esta opción causará que Samba no sirva peticiones de ficheros a subredes que no estén listadas en la opción interfaces. Deberías evitar usar esta opción si quieres permitir conexiones temporales de red, tales como las que se crean a través de SLIP o PPP. Es muy raro necesitar esta opción, y sólo debería ser usada por expertos.
Si estableces bind interfaces only a yes , deberías añadir la dirección de localhost (127.0.01) a la lista de "interfaces". De lo contrario, smbpasswd será incapaz de conectar al servidor usando su modo por defecto para cambiar una contraseña.
socket address
La opción socket address indica por cuáles de las direcciones especificadas en el parámetro interfaces debería escuchar Samba a la espera de atender posibles conexiones. Por defecto, Samba acepta conexiones en todas las direcciones especificadas. Cuando se usa en un fichero smb.conf, esta opción forzará a Samba a escuchar sólo por una dirección IP. Por ejemplo:
interfaces = 192.168.220.100/24 192.168.210.30/24
socket address = 192.168.210.30
Esta opción es más que nada una herramienta para programadores y recomendamos no usarla.
4.3
Desde Samba 2.0.5, localhost será automáticamente admitido a menos que explícitamente sea denegado.