OpenVPN y Samba sobre openSUSE 10.3

lunes, 31 de diciembre de 2007
Este fin de semana estuve "jugando" con unos softwares bien potentes, OpenVPN y Samba. OpenVPN sirve para crear redes virtuales privadas entre equipos que fisicamente estan separados (no estan en la misma red ni en el mismo dominio). De esta manera se pueden conectar equipos o redes enteras unas con otras, por ejemplo para unir sucursales de una misma organización y compartir información por un canal seguro, o comunicar empresas con proveedores, etc.

OpenVPN utiliza OpenSSL para agregar la capa de seguridad al sistema a través de la encriptación, haciendo uso de llaves simétricas o a través de emisión de certificados digitales y llaves asimétricas (el segundo método es lejos mejor).

A través de OpenVPN podemos conectar equipos con distintos sistemas operativos, ya que tiene versiones para varios (linux, windows, etc.) y corre tanto en modo servidor como en modo cliente (se pueden ejecutar los dos modos al mismo tiempo en el mismo equipo en procesos distintos).

Samba es un software que sirve para compartir recursos en una red, autenticar usuarios, controlar acceso a recursos, tiene compatibilidad con active directory y un laaaargo etc. Mediante Samba podemos compartir recursos en equipos que corren distintos sistemas operativos, por ejemplo podemos compartir una carpeta en linux y desde windows lo podriamos ver sin problemas, o al revés, desde windows podríamos compartir una carpeta (a traves de samba o de windows) y desde linux lo podríamos ver también.

La unión de estos dos sistemas lo encuentro especialmente poderoso, por un lado creamos una red con equipos distantes y por otro lado aprovechamos los recursos compartiendo y manejando, de forma transparente, la seguridad de los datos en la red.

OpenSUSE 10.3 y Mandriva 2008 (los que probé en estos dias) traen todo lo necesario para armar un servidor/cliente OpenVPN y Samba.

En internet se pueden encontrar varias guías para ayudar a configurar OpenVPN y Samba, en mi caso particular me gustó mucho ésta guía para OpenVPN que seguí paso a paso, solo cambie cosas muy particulares para que funcionara en openSUSE 10.3. Debo recalcar que es muy buena y no tiene caso volver a redactar algo como lo que sale ahí en mi blog, está para seguir paso a paso y es casi imposible equivocarse.

Sobre Samba, leí muchas guías en Internet, ninguna me sirvió. Lo fácil es levantar el servidor usando YAST, pues en YAST -> Servicios de red -> Servidor Samba le damos siguiente siguiente a todo y ya está.
Incluso te da la opción de abrir el puerto en el cortafuegos (genial, todo automático y a puros clicks).

El problema que tuve fue al tratar de compartir recursos, YAST te da la opción, pero cuando quería acceder a las carpetas compartidas no podía, ingresaba smb:/ en konqueror y la red aparecía, las carpetas también pero al acceder salen errores como "el recurso o carpeta no existe", siendo que tenía definido que la carpeta estaba para compartir con todos sin pedir password ni nada. Probé desde el módulo de Samba en KDE, lo mismo, los mismos errores. Perdí muchas horas tratando, conclusión, las herramientas que vienen con openSUSE no lo hacen del todo bien o a mi me faltó marcar/desmarcar alguna opción.

Al final lo solucioné a mano (como en la vieja escuela). Samba lee un archivo de configuración que se llama smb.conf que está en /etc/samba. Este archivo define una configuración global a base de directivas del tipo variable = valor. La parte global YAST la maneja a la perfección, pero por experiencia propia recomiendo agregar los recursos de red a compartir a mano.

En este caso particular de OpenVPN y Samba, hay una cosa que hay que tener en cuenta, si configuran Samba (suponiendo que los recursos estan disponibles en la red, todo correcto) y OpenVPN, desde el cliente OpenVPN NO tendrán acceso a los recursos Samba.

Lo anterior es porque OpenVPN crea una sub red definida en 10.8.0.0/24 desde la cual asigna una ip a cada máquina dentro de ese rango y Samba solo permite compartir recursos en la sub red del servidor (en mi caso 192.168.0.0/24), por lo tanto aunque las máquinas estén en red, no podrán acceder a los recursos.

Para solucionar esto solo hay que agregar una linea de texto a la configuración global de samba (smb.conf):
hosts allow = 192.168.0.0/24 10.8.0.0/24 127.0.0.1

y en el caso de que el servidor Samba y el servidor OpenVPN estén corriendo en la misma máquina se agrega la siguiente linea:
interfaces = 192.168.0.0/24 10.8.0.0/24

Luego se reinicia el servidor Samba (#service smb restart) y los clientes de la VPN podrán acceder a los recursos sin problema.

Ahora, cómo agregamos recursos a Samba ? pues la verdad es muy simple y les mostraré 3 ejemplos, en los cuales compartiremos 3 carpetas pero usando distintas directivas para definir permisos, control de acceso ,etc.

[compartido]
comment = Directorio de acceso general
path = /home/metalklesk/Documents/Compartido/General
read only = No
guest ok = yes
browseable = yes

Con esa configuración, el recurso está disponible para cualquiera y tiene permisos de escritura y lectura.
  1. La primera linea define el nombre del recurso, con éste nombre se identifica en la red.
  2. Lo segundo es solo un comentario y puede ser omitido.
  3. El path define el directorio del recurso que se quiere compartir.
  4. Read only = no significa que estamos dando permisos de lectura y escritura al recurso.
  5. guest ok = yes significa que permitimos que cualqueira entre y vea el recurso.
  6. browseable = yes significa que el recurso se puede ver por cualquiera y está disponible.

[restringido]
comment = Directorio de acceso restringido
path = /home/metalklesk/Documents/Compartido/Restringido
read only = No
browseable = yes
security = shared
valid users = klesk metalklesk


Con esta configuración el recurso solo estará disponible para los usuarios klesk y metalklesk, para cualquier otro usuario el acceso al recurso será denegado. Esto se define a través de la directiva valid users = klesk metalklesk.

[restringido2]
comment = Directorio de acceso restringido
path = /home/metalklesk/Documents/Compartido/Restringido2
read only = No
browseable = yes
security = shared
invalid users = metalklesk


Esta configuración permite el acceso al recurso a todos los usuarios de la red excepto al usuario metalklesk mediante la directiva invalid users = metalklesk.

Bueno, pero y como se agregan usuarios a Samba ? pues muy fácil, se utiliza el comando:
smbpasswd -a usuario

y se le ingresa una contraseña y listo.

Ya con esto podrán compartir carpetas o recursos especificando algunas reglas para cada uno de ellos. Existem muchas mas combinaciones y mas directivas, se pueden remitir al manual de Samba para conocerlas todas y lo recomiendo.

A continuación les dejo mi archivo smb.conf completo por si les sirve.

# smb.conf is the main Samba configuration file. You find a full commented
# version at /usr/share/doc/packages/samba/examples/smb.conf.SUSE if the
# samba-doc package is installed.
# Date: 2007-09-22
[global]
printing = cups
printcap name = cups
cups options = raw
map to guest = Bad User
include = /etc/samba/dhcp.conf
logon path = \\%L\profiles\.msprofile
logon home = \\%L\%U\.9xprofile
logon drive = P:
usershare allow guests = Yes
usershare max shares = 100
security = share
restrict anonymous = no
domain master = no
preferred master = no
max protocol = NT
acl compatibility = win2k
ldap ssl = No
server signing = Auto
SO_RCVBUF=8192 SO_SNDBUF=8192
socket options = TCP_NODELAY
hosts allow = 192.168.0.0/24 10.8.0.0/24 127.0.0.1
interfaces = 192.168.0.0/24 10.8.0.0/24

[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes

[users]
comment = All users
path = /home
read only = No
inherit acls = Yes
veto files = /aquota.user/groups/shares/
browseable = yes
public = yes

[groups]
comment = All groups
path = /home/groups
read only = No
inherit acls = Yes

[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No

[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @ntadmin root
force group = ntadmin
create mask = 0664
directory mask = 0775

[compartido]
comment = Directorio de acceso general
path = /home/metalklesk/Documents/Compartido/General
read only = No
guest ok = yes
browseable = yes

[restringido]
comment = Directorio de acceso restringido
path = /home/metalklesk/Documents/Compartido/Restringido
read only = No
browseable = yes
security = shared
valid users = klesk metalklesk

[restringido2]
comment = Directorio de acceso restringido
path = /home/metalklesk/Documents/Compartido/Restringido2
read only = No
browseable = yes
security = shared
invalid users = metalklesk

Es muy probable que les suceda que no puedan acceder a los recursos desde un cliente (windows o linux), deben fijarse en los permisos de usuario de las carpetas o directorios que estén compartiendo. Por ejemplo la carpeta Documents en openSUSE no puede ser accedida por otro usuario que no sea el dueño y el root, por lo tanto aunque configuren todo bien en Samba, no podrá ser accesado por un cliente. O modifican los permisos de la carpeta o escojen otra.

Y como siempre unas capturas de pantalla. La primera muestra a openSUSE 10.3 corriendo un servidor Samba y OpenVPN y mandriva como cliente de ambos.


La siguiente muestra el diálogo de autenticación que sale al intentar entrar a la carpeta restringida


La siguiente muestra que efectivamente las máquinas están conectadas en red, mediante un simple ping a la ip del cliente (ip asignada por el servidor OpenVPN)


La siguiente muestra un cliente Windows conectado a la VPN


La siguiente muestra como Windows puede ver los recursos compartidos en openSUSE 10.3 mediante samba


En las imágenes anteriores se ve que las pruebas fueron realizadas con máquinas virtuales, esto no es ninguna trampa, efectivamente están en red a través de OpenVPN. Además probé con el equipo de un amigo y también funcionó.

Espero les sirva.

saludos !!!

7 comentarios:

Anónimo dijo...

Hola muy bueno,se agradece mucho que hagas estos artículos en openSUSE.
Saludos

Anónimo dijo...

Hola daniel:
me parece interesante los manuales que uste publica en tu blog, y quisiera pedirte un favor, no se si nos facilitarias con el manual de instalacion del TINYERP, para windows XP SP2, te lo agradeceremos. gracias

Daniel Alvarez dijo...

Que tal Daniel, Como estas?

Muy bueno el tuto, gracias... pero fijate que soy algo nuevo en linux y me esta contando un poco, como por ejemplo no puedo ni siquiera compartir un carpeta ya que esto es para darle permiso cuando ya tenes la carpeta compartida..verdad?

Muy interesante ver que estas corriendo windows en Linux... como se llama tu emulador? sera que me podrias dar un tuto para poder instalarlo y configurarlo? Gracias...

Daniel Dario Morales Salas dijo...

Hola. Para dar los permisos a la carpeta debes modificar el archivo smb.conf como explico en el tutorial, con eso le das los permisos necesarios para que sea accedida desde afuera. Debes ser root para modificar ese archivo.

El "emulador" no es tal, es un sistema que crea maquinas virtuales (es distinto a un emulador) y se llama Virtualbox. Navega en mi blog, ya hice un tutorial al respecto.

saludos !!

Daniel Alvarez dijo...

Hola Daniel, Como estas?

Gracias amigo, ya logre compartir las carpetas en la red... pero ahora no se si me podrias ayudar.. fijate que estoy tratando de compartir una caperta que desde Windows pueda escribir algo en ella... pero le he dado derechos de escritura pero de todos modos me dice: Acceso Denegado.. Muchas gracias por tu ayuda....

Greensleeves dijo...

Buenas Daniel, como estas?

Esta re bueno tu blog.
Todavía usas suse?. Yo me pase, o mejor dicho, volví a Debian.

Saludos

Pablo.

Anónimo dijo...

hola a todo q honda plis alguien sabe como puedo crear certificados y claves de servidor en openvpn desde suse linux 9.0 es que cuando quise crear mi certificado de servidor primer liste los directorios con el comando "rpm -ql openvpn" si pude crear el certificado de cliente con "./build-key" claro desde el directorio "easy-rsa" de modo ma falto el de servidor motivo esque no aparece este script "./build-key-server" al guien sabe porque no aparece

Publicar un comentario