Páginas

martes, 28 de junio de 2016

Samba 4 ipfw en FreeBSD 10.3

Configurar Samba4 e ipfw firewall

Nivel: Avanzado

$ cat /boot/loader.conf
...
autoboot_delay="2"
loader_logo="beastie"
sem_load=YES
mqueuefs_load=YES

Samba es una implementación libre del protocolo de archivos compartidos de Windows (SMB y CIFS) para sistemas de tipo UNIX. De manera que nuestro pc con FreeBSD se vea como servidor de archivos en redes Windows.

Dirección IP del servidor Samba

$ cat /etc/rc.conf | grep ifconfig_em0
ifconfig_em0="inet 192.168.1.110 netmask 255.255.255.0"

# hostname
root@fbsdsmb

Instalar samba42
# pkg search samba
# pkg install samba42

Un solo usuario accediendo a su directorio personal

La forma más fácil de configurar un cliente es crear una cuenta Unix y su correspondiente directorio personal para el cliente en el servidor, luego  notificar a Samba la existencia de ese usuario. Posteriormente en el fichero de configuración de Samba se creará un recurso de disco compartido que apunte al directorio personal del usuario y a traves de valid users restringiremos su acceso.

# adduser
...

# smbpasswd -a luca

[luca]
path = /home/luca
comment = Luca's Home Directory
writeable = yes
valid users = luca

o puedes referirte al directorio personal del usuario usando la variable %H. También puedes utilizar las variables de nombre de usuario Unix %u y de nombre de usuario cliente %U.

[luca]
comment = %U Home Directory
writeable = yes
valid users = luca
path = %H

Estos dos ejemplos funcionan mientras el usuario Unix que Samba utiliza para referirse al cliente tiene derechos de lectura/escritura sobre el directorio al que se refiere la opcion path.

Agregar usuario luca a Samba
# smbpasswd -a luca

Acceso de grupo a un recurso compartido

Si estás creando un directorio compartido para acceso de grupo, hay varios pasos adicionales a realizar. Vamos a echar un vistazo a un recurso compartido para el departamento de Contabilidad en el fichero smb4.conf:

[contabilidad]
comment = Directorio Departmento de Contabilidad
writeable = yes
valid users = @cuenta
path = /srv/accounting
create mode = 0660
directory mode = 0770

@account como el usuario válido en lugar de uno o más nombres de usuario individuales es un atajo para decir que los usuarios válidos están  representados por el grupo Unix cuenta. Estos usuarios necesitan ser añadidos al grupo cuenta en el fichero de grupos del sistema (/etc/group) para ser reconocidos como parte del grupo. Una vez que lo son, Samba los reconocerá como usuarios válidos para el recurso compartido. Necesitarás crear un directorio compartido para que los miembros del grupo tengan acceso, que será mapeado a través de la opción de configuración path.


# mkdir /srv/accounting
# chgrp cuenta /srv/accounting
# chmod 770 /srv/accounting

Crear grupo cuenta
# pw groupadd cuenta

Agregar usuario luca al grupo cuenta
# pw groupmod cuenta -M luca

Ejemplos de usuarios, grupos y comparticiones

Crear los directorios
# mkdir -p /svr/p
# mkdir /svr/s
# mkdir /svr/t
# mkdir /srv/public

Añadir los usuarios al sistema FreeBSD
# adduser
Username: prof
...
# adduser
Username: super
...
# adduser
Username: argo
...
# adduser
Username: invitado
...
# adduser
Username: susiaxel

Establecer los usuarios propietarios de los directorios

# chown -R prof:prof /svr/p
# chown -R super:super /svr/s
# chown -R argo:prof /svr/t
# chown -R invitado:invitado /svr/public

Crear nuevos grupos

# pw groupadd stp
# pw groupadd tp

Agregar usuario super al grupo stp

# pw groupmod stp -M super

Agregar usuarios argo y prof al grupo tp

# pw groupmod tp -M argo,prof

Agregar usuarios invitado y susiaxel al grupo invitado

# pw groupmod invitado -M invitado,susiaxel
# pw groupshow tp
tp:*1009:prof,argo
# pw groupshow invitado
invitado:*:1007:invitado,susiaxel

Archivo de configuración de Samba /usr/local/etc/smb4.conf

##############INICIO###############
[global]

invalid users = root bin daemon adm sync shutdown \
halt mail news uucp operator gopher
workgroup = MYOFFICE
server string = My Office Server
dos charset = cp850
unix charset = UTF-8
fstype = NTFS
security = user
encrypt passwords = yes
wins support = yes
name resolve order = wins lmhosts hosts bcast
max open files = 16384
use mmap = yes
unix extensions = no
hosts allow = 192.168.1. 192.168.3. localhost

# Debug logging information
log level = 2
log file = /var/log/samba4/samba.log.%m
max log file = 100
debug timestamp = yes

# Browsing election options
os level = 34
local master = yes

[homes]

comment = Home Directories
browseable = no
writeable = yes
directory mask = 0750
create mask = 0644

[luca]

comment = %U Home Directory
writeable = yes
valid users = luca path = %H

[contabilidad]

comment = Directorio Departmento de Contabilidad
writeable = yes
valid users = @cuenta
path = /srv/accounting
create mode = 0660
directory mode = 0770

[public]

comment = public
path = /srv/public
public = no
writeable = yes
write list = @invitado
directory mask = 0770
create mask = 0660

[super]

comment = super
path = /srv/s
public = no
writeable = yes
write list = super
directory mask = 0750
create mask = 0644

[profesores]

comment = Profesores
path = /srv/p
public = no
writeable = yes
write list = prof, @stp
directory mask = 0750
create mask = 0644

[alumnos]

comment = alumnos
path = /srv/t
public = no
writeable = yes
write list = super, @tp
directory mask = 0770
create mask = 0660
#############FINAL###############

Habilitar Samba server

# echo 'samba_server_enable="YES"'>>/etc/rc.conf

Iniciar el servicio
# service samba_server start

Opciones de ficheros de registro

Hemos añadido un fichero de registro de usuario que reporta información de depuración de nivel 2. El nivel 2 nos proporcionará información útil sin ocupar mucho espacio en disco en el sevidor.

Este fichero está localizado en el directorio /var/log/samba4 definido con la opción log file del fichero de configuración. Podemos usar una de las variables proporcionada por Samba para crear ficheros de registro independientes para cada cliente, como la variable %m.
log file = /var/log/samba4/samba.log.%m

Aislar los mensajes de registro puede resultar útil en el momento de tener que rastrear un error de red si el problema viene de una máquina o cliente determinado. Ninguno de ellos puede exceder en tamaño de 100 kb, indicado en la opción log size.

La fecha y la hora de la depuración en los registros nos la proporciona la opción debug timestamp, el cual es el valor por defecto. Coloca una cadena de fecha y hora en el formato timestamp junto a cada mensaje en el fichero de registro.


Recurso compartido homes

La sección [homes] puede representar cualquier cuenta en la máquina, esto no es deseable. Por ejemplo, podría crear un recurso compartido para root, bin, uucp y similares. La opción invalid users protege frente a esto.

Si un usuario intenta conectar a un recurso compartido ordinario que no aparece en el fichero smb.conf, Samba va a buscar el recurso compartido [homes]. Si no existe, el nombre del recurso compartido enviado a Samba se asume como un nombre de usuario y se busca como tal su contraseña en la base de datos (/etc/passwd) del servidor Samba. Si aparece, Samba asume que el cliente es un usuario Unix intentando conectar a su directorio personal.

Si susi esta intentando conectar a un recurso compartido llamado [susi] en el servidor Samba. Existe un recurso compartido [homes], No hay un recurso compartido con ese nombre en el fichero de configuración, el usuario susi está presente en la base de datos de contraseñas entonces, Samba crea un nuevo recurso compartido llamado [susi] con el  especificado en la seccion, Samba la inicializa a su directorio personal. Samba inicializa las opciones del nuevo recurso a partir de las opciones por defecto de la sección [globals], por último conecta al cliente susi a este nuevo recurso.

Aumentar la seguridad

Hemos visto que ocurre cuando especificas usuarios válidos, también puedes establecer una lista de usuarios no válidos, a los que nunca les será permitido acceder a Samba o a sus recursos. Esto se hace con la opción invalid users. Un valor por defecto relacionado con la sección [homes] para asegurar que determinados usuarios y superusuarios del sistema no pueden ser manipulados o alterados para conseguir acceso a éste.

[global]

invalid users = root bin daemon adm sync shutdown \
halt mail news uucp operator gopher

Por conveniencia, decidimos habilitar la opción del fichero Samba hosts allow = 192.168.1. 192.168.3. localhost que permite conectar con nuestro servidor desde las redes: 192.168.3.0/25 y 192.168.1.0/24. Una vez hecho esto cambiaremos la dirección IP del servidor a la dirección 192.168.3.110 para que quede detrás de nuestro firewall basado en openbsd, soekris y pf, configurado en un artículo anterior cuya IP es 192.168.3.1 y con DHCP activado.

Cambiar IP y puerta de enlace del servidor:

# ee /etc/rc.conf
ifconfig_em0="inet 192.168.3.110 netmask 255.255.255.128"
defaultrouter="192.168.3.1"
...

Cambios en el Firewall ipfw

A continuación añadimos estas dos líneas al fichero de configuración del firewall /etc/ipfw.rules

add 5139 allow tcp from 192.168.3.0/25 to any 139 keep-state setup
add 5300 allow ip from 192.168.3.0/25 to 192.168.3.0/25

Conexiones físicas

Conectamos los cables ethernet al router Soekris de las máquinas involucradas. En este caso nuestro servidor, la máquina win xp, la máquina win 7, cualquier otra máquina conectadas directamente al router cuya ip es 192.168.1.1 (proveedor ISP) también podrá acceder a los recursos del servidor como ya hemos visto.

# service samba_server restart
# service ipfw restart

El servidor Samba está actuando como visualizador maestro local para la actual subred

nmbd/nmbd_become_lmb.c:become_local_master_stage2
*****
Samba name server FBSDSMB is now a local master browser for
workgroup MYOFFICE on subnet 192.168.3.110
****

write list - Una lista de usuarios o grupos (nombres de grupo tienen el prefijo @) que será capaz de escribir a este recurso compartido. Los permisos de usuarios adecuados todavía tienen que ser establecidos en el directorio.

directory mask - por defecto - 0755
create mask - por defecto - 0744
force create mode - por defecto - 000
force directory mode - por defecto - 0000

En Samba en lugar de definir lo que está restringido, define lo que está permitido.

Los siguientes valores de las opciones definidas de un recurso compartido en smb4.conf :

directory mask = 0700
create mask = 0600

directory mask. Permite al usuario propietario permisos de lectura, escritura y ejecución. Al grupo y otros no les permite ni leer, ni escribir, ni ejecutar (no tendrán acceso a este directorio).

create mask. Permisos de lectura, escritura al usuario propietario. El grupo y otros no tienen permisos de lectura ni escritura.

create mask = 744

Por ejemplo, la opción create mask forzará que los permisos de un archivo creado por un cliente Windows sean, como mucho, 744

mientras que la opción directory mask que mostramos a continuación forzará los permisos de un recién creado directorio a, como mucho, 755:

directory mask = 755

directory mask - Recomendamos la máscara 0750 o rwxrx, eliminando la posibilidad de acceso al resto de usuarios que no son tú, y no pertenecen a tu grupo. 

create mask - Si necesitas cambiarlo a archivos no ejecutables, recomendamos 0644, o rw−r−r−.

Como ejemplo, considere los siguientes valores de las opciones definidas de un recurso compartido en smb4.conf :

create mask = 0770
directory mask = 0770

Esto permitiría ambos, archivos y directorios leer, escribir y ejecutar permisos para usuario y grupo, pero no a otros. Al mismo tiempo, obliga al grupo permisos leer y escribir para archivos y de lectura, escritura y ejecución para los directorios.

testparm comprueba la existencia de errores en el fichero de configuración del servidor Samba

# testparm

Solucionar errores 

# sysctl kern.maxfilesperproc=16384
kern.maxfilesperproc: 14040 -> 16384
# sysctl kern.maxfiles=16384
kern.maxfiles: 14040 -> 16384

Hacer permanente los cambios

# echo 'kern.maxfilesperproc=16384'>>/etc/sysctl.conf
# echo 'kern.maxfiles=16384'>>/etc/sysctl.conf

Que está ofreciendo el servidor a la red

# smbclient -U% -L localhost


Sincronizar usuarios

Esto se puede resolver de tres maneras: en primer lugar al mantener manualmente los usuarios de FreeBSD y sincronizar con una base de datos de usuario Samba - específica mediante la utilidad smbpasswd. Esta utilidad se comporta de manera similar a la utilidad "pw". Es la solución más simple y se recomienda para pequeñas instalaciones con varios usuarios, que muy rara vez cambian sus contraseñas. Tenga en cuenta que primero tendrá que añadir un usuario a FreeBSD (shell-nologin), y luego añadir un usuario Samba con el mismo nombre usando "smbpasswd -a".

Despúes de añadir usuarios a FreeBSD lo agregamos a Samba 

# smbpasswd -a super
# smbpasswd -a prof
# smbpasswd -a argo
# smbpasswd -a invitado
# smbpasswd -a susiaxel


Implementación del firewall ipfw

Los firewalls de red bloquean (previenen) a ciertos tipos de paquetes de red llegar a determinados servicios del sistema. la práctica moderna de seguridad es en realidad para bloquear todos los paquetes excepto un pequeño conjunto de elegidos, con el fin de reducir al mínimo la superficie de ataque, o el número y el alcance de los servicios que están expuestos a la red.

En este caso permitimos todo tráfico IP mediante la interfaz loopback, ssh, http, https, samba-cifs, permitir todos los paquetes IP independientemente del protocolo o cualquier otro detalle de todas las direcciones en una red local a todas las direcciones en la misma red, Niega todos los demás paquetes de red y los registra en syslog.

# cat /etc/ipfw.rules

###########INICIO####################
add 500 allow ip from any to any via lo0

add 1000 allow icmp from any to any

add 2000 allow tcp from me to any setup keep-state

add 2001 allow udp from me to any keep-state

add 4022 allow tcp from any to me 22 setup keep-state

add 4080 allow tcp from any to me 80, 443 setup keep-state

add 4139 allow tcp from 192.168.1.0/24 to any 139 keep-state setup

add 5000 allow ip from 192.168.1.0/24 to 192.168.1.0/24

add 5139 allow tcp from 192.168.3.0/25 to any 139 keep-state setup

add 5300 allow ip from 192.168.3.0/25 to 192.168.3.0/25

add 65400 deny log ip from any to any
###############FINAL#####################

# echo 'firewall_enable="YES"'>>/etc/rc.conf
# echo 'firewall_type="/etc/ipfw.rules"'>>/etc/rc.conf

# service samba_server restart
# service ipfw restart

# netstat -a | grep ipv4
# ipfw list


Eleccion de Visualizador

Samba puede usar una elección de visualizador para una variedad de resultados, incluyendo el ser siempre el visualizador maestro local de la subred o no serlo nunca. Por ejemplo, las siguientes opciones (sección global), asegurará que Samba siempre gane la elección de visualizador maestro local, sin importar qué otras máquinas estén presentes en la red:

# Browsing election options
os level = 34
local master = yes

Saber si una máquinan es el visualizador maestro local

Usando el comando nbtstat puedes saber si una máquina es el visualizador maestro local. Coloca el nombre NetBIOS de la máquina que quieras interrogar tras la opción −a:

C:\> nbtstat -a fbsdsmb


La línea que estás buscando es ..__MSBROWSE__.<01>. Indica que el servidor está actuando como el visualizador maestro local para la actual subred. 

Conectar con un recurso compartido desde un ordenador con Windows XP. 

En este caso utilizando el nombre del servidor y el nombre del recurso compartido (alumnos), que pertenece al usuario argo. El nombre de usuario y la contraseña que fueron creadas en el cliente deben coincidir con la combinación usuario/contraseña del servidor.


Desde un ordenador con Windows 7 conectamos con un recurso compartido. Los usuarios solo podrán acceder a los archivos y carpetas cuyos permisos sean establecidos en el archivo smb4.conf.


Referencias:
https://wiki.freebsd.org/Samba
https://www.freebsd.org/doc/faq/
http://es.tldp.org/Manuales-LuCAS/USANDO-SAMBA/usando-samba.pdf

Unix es genial!.

No hay comentarios:

Publicar un comentario