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!.

martes, 21 de junio de 2016

Raid 1 OpenBSD 5.9

RAID-1, o mirroring es donde el contenido de un disco es duplicado sobre otro. Es una manera de lograr fiabilidad a bajo coste.

El subsistema softraid funciona emulando un scsibus con dispositivos sd hechos combinando una serie de disklabel particiones OpenBSD en un disco virtual con el nivel de RAID deseado. En este momento sólo RAID 0, RAID 1, RAID 5 y cripto son totalmente compatibles. Este disco virtual es tratado como cualquier otro disco, primero particionando con fdisk y luego creando disklabels como de costumbre.



RAID en general

El kernel install sólo tiene las entradas /dev para un dispositivo wd y un dispositivo sd en el arranque, por lo que tendrá que crear manualmente más dispositivos de disco si su configuración deseada softraid los requiere. Este proceso se realiza de forma automática por el instalador, pero recuerde que aún no ha ejecutado el instalador.

Entrar en el modo shell


Welcome to the OpenBSD/amd64 5.8 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? s

#
Cambiar el teclado a español
# kbd es

Agregar el segundo disco
# cd /dev
# sh MAKEDEV sd1

Inicializar los discos con fdisk
# fdisk -iy sd0
# fdisk -iy sd1

Crear particiónes con disklabel
# echo -n "d\n\n\n\nRAID\nw\nq\n\n" | disklabel -E sd0
# echo -n "d\n\n\n\nRAID\nw\nq\n\n" | disklabel -E sd1


# disklabel -E sd0
> a
partition: [a] d
offset: [64]
size: [16777216]
FS type: [4.2BSD] RAID
> w
> q

# disklabel -E sd1
> a
partition: [a] d
offset: [64]
size: [16777216]
FS type: [4.2BSD] RAID
> w
> q


Crear el espejo (mirror)
# bioctl -c 1 -l /dev/sd0d,/dev/sd1d softraid0
sd2 at scsibus2 targ 1 lun 0: SCSI2 0/direct fixed
Now exit the shell and install as usual, using sd2 as root disk.

Instalar el sistema
# exit

Instalar sd2 como root


layout para sd2

Inicializar disco



Instalación de conjuntos (sets)


Continuar sin verificar

Instalación completada satisfactoriamente


Reiniciar. Veremos nuestro nuevo disco sr0 (sd2)


Comprobar RAID


IP estática.
# echo "192.168.1.50 255.255.255.0 192.168.1.255" > /etc/hostname.em0


Bibliografía:
Stefan Sperling EuroBSDcon 2015
http://www.openbsd.org/faq/faq14.html#softraid
https://www.openbsd.org/papers/

OpenBSD es genial!.

viernes, 17 de junio de 2016

RAID 1 en FreeBSD


RAID- 1,  o reflejo, es donde el contenido de un disco se duplica en otro. Esta es una gran manera de conseguir la fiabilidad a bajo costo. Yo uso RAID 1 en todos mis servidores. La duplicación puede dar incluso a un servidor de escritorio barato alguna medida de protección de datos. El tamaño de la matriz RAID 1 es el tamaño de
el disco duro más pequeño del array. Es recomendable utilizar discos del mismo tamaño.

Configuración de la Máquina Virtual

FreeBSD 10.3-RELEASE
Neetwork adapter : Bridge (Conectado directamente a la red física)
Dos discos duros de 40 GB cada uno.


Iniciamos el instalador FreeBSD

#

Entramos a la Shell para establecer la matriz manualmente. Esto es suponiendo que tenga una máquina capaz de arrancar desde GPT y tiene dos unidades de disco duro, de igual tamaño en el sistema. En este laboratorio dos discos, da0 y da1, de 40 GB c/u en una máquina virtual.

Averiguar los discos conectados

# sysctl -a|grep kern.disks
kern.disks cd0 da1 da0

Tamaño de los discos da0 y da1


# kldstat

# kldload geom_mirror

# gmirror list

# gmirror label root /dev/da0 /dev/da1

# gmirror status


# exit


seleccionar teclado

Nombre de host


Elegir componentes opcionales del sistema a instalar:


Particionado - manual


Elegir /mirror/roo del disco da0


GPT   GUID Partition Table



La tabla de particiones fue creada con éxito. Por favor, de nuevo para crear particiones.


Partición boot




Crear partición raíz




Creadas las particiones nos desplazamos con el tabulador hasta Finish y luego Intro.
En la siguiente pantalla Commit e Intro para guardar los cambios.


 Writing partition tables
 Initializing mirror/rootp2


Password for the system management account (root)
 New Password
 Retype New Password

Configuración de la red


Le gustaría configurar IPV4 para esta interfaz


Le gustaría utilizar DHCP para configurar esta interfaz?. No, nuestro servidor tendrá una IP estática.


 Static Network Interface Configuration
 IP Address      192.168.1.10
 Subnet mas 255.255.255.0
 Default Router  192.168.1.1

 Le gustaría configurar IPv6 para esta interfaz.
 NO

 Resolver Configuration



El reloj CMOS de esta máquina en hora UTC ? Si se ha establecido con la hora local ,
 o no sabe, por favor, seleccione NO en esta lista?
NO

Selecciones una región
 Europe
 Spain
 Madrid

 Does the abbreviation 'CEST' look reasonable?
 Yes

Elegir los servicios que le gustaría iniciar con el sistema:

 (*) sshd
 (*) ntpd
 (*) dumpdev

Le gustaría agregar usuarios a la instalación del sistema ahora?

Invite carles into other groups? []: wheel

 Aplicar configuración y salir del instalador

 La instalación ha finalizado. Antes de salir del instalador, le gustaría abrir una shell en el nuevo sistema para realizar para realizar manualmente alguna modificación final?
 Yes

# kldstat
 1 ...
 2   1  0xc60ce000  geom_mirror.ko

# gmirror status
    Name       Status    Components
 mirror/root  COMPLETE   ada0 (ACTIVE)
        ada1 (ACTIVE)

Iniciar GEOM con el sistema
# echo 'geom_mirror_load="YES"'>>/boot/loader.conf

# mount
# df


# exit y reiniciar


 login: root
 Password:
# mount

# df

# cat /boot/loader.conf
geom_mirror_load="YES"


Reparar RAID 1

El propósito principal de un RAID es redundancia. Si una unidad de disco duro muere, quiero ser capaz de recuperar los datos y/o mantener las operaciones. Su hardware dicta su capacidad para continuar las operaciones y/o recuperar. Si tiene un sistema intercambiables en caliente con unidades SCSI o SATA, puede reparar RAID sobre la marcha, si está utilizando un sistema ATA (prácitamente desaparecidos) es probable que tenga que cerrar para reemplazar el disco duro defectuoso.

# gmirror status

# ls /dev/mirror

Eliminar todas las unidades que no están actualmente disponibles en el configurador espejo
# gmirror forget root

Utilizamos el comando insert para agregar una unidad a la configuración
# gmirror insert root /dev/da1

Comprobar sincronización
# gmirror status

Este mensaje avisa de la finalización del proceso 
# GEOM_MIRROR: Device root: rebulding provider da1 finished.

Verificar operación
# gmirror status

Todo es correcto.





Referencias:
BSD magazine
BSDnow
http://bsdwiki.reedmedia.net/wiki/View_the_status_of_a_software_RAID_mirror_or_stripe.html
Obsolute FreeBSD Michael Lucas
Ivan Voras Programador FreeBSD

Unix es genial!.