martes, 6 de abril de 2010

FreeBSD 8: Samba + LDAP + Dovecot + Postfix

Aqui de nuevo, esta vez me he visto en la necesidad de crear un dominio con samba+ldap y utilizar este contenido de datos para que FreeBSD consulte los usuarios con sus respectivas claves de acceso que por costumbre voy a utilizar el lenguaje comun ingles.

Bien aqui mismo, vamos a levantar un servidor de correo con Dovecot+Postfix que juntos hacen un buena mancuerna.

LDAP es el AD de Unix/Linux por ello es importante saber como usarlo, no soy un experto en el ya que es muy complejo, pero lo que he hecho con el sigue funcionando.

Para el correo no voy a usar directorios virtuales, como estamos hablando de un dominio, donde tenemos:
  • Usuarios
  • Computadoras
  • Grupos
Y cada usuario tiene si propio directorio en /home, asi:

/home/usurio1
/home/usurio2
/home/usurio3
...
/home/usurioN

Entonces no veo la razon de tener que crear esto:

/var/mail/virtual/dominioA/user1
/var/mail/virtual/dominioA/user2
/var/mail/virtual/dominioA/user3
...
/var/mail/virtual/dominioA/userN

Ademas de tener que levantar un Mysql para esto, es un solo dominio, si fueran mas dominios entonces si tendria que ver la posibilidad de hacer uso de Mysql o PostgreSQL, pero con mi actual red no le veo caso.

Vamos meternos con NSS para que FreeBSD consulte la informacion de los usuarios, por ejemplo tengo un usuario de nombre test en samba, FreeBSD no lo tiene localmente, pero al momento de ejecutar el comando ID debe darnos la informacion de este usuario, asi:

id test
uid=10003(test) gid=513(Domain Users) groups=513(Domain Users)

Como podran ver, es un usuario de LDAP, en la base de datos local no existe:

# $FreeBSD: src/etc/master.passwd,v 1.40.22.1.2.1 2009/10/25 01:10:29 kensmith Exp $
#
root:$1$2OxWxY4U$zs3bOHCFShY.8yUclDtRS0:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin
proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
mysql:*:88:88::0:0:MySQL Daemon:/var/db/mysql:/usr/sbin/nologin

Es lo bonito de poder centralizar todo un solo punto, asi cualquier cliente con soporte para LDAP podra consultar este servidor para autentificar los usuarios, que bonito no?

Y como ultimo, todo esto no va a ejecutarse dentro de un sistema fisico, sino dentro de un Jail, que es una forma que tiene BSD para virtualizar nativamente, es como poder tener 2 FreeBSD en la misma caja.

Para ello, vamos a seguir paso a paso el capitulo 15 de la biblia de FreeBSD para crear nuestra Jail, les recomiendo leer "man src.conf" para que ustedes decidan que necesitan y que no, aqui yo les voy a indicar como me quedo el archivo para este servidor, para poder llegar a esto, tuve que ejecutar varias veces el buildworld, y reinstalar infinidad de veces la misma aplicacion via ports, pero valio la pena.

Antes iniciar esto, necesito que cumplan los siguientes requisitos

a) Si van a usar jails, crearla y ponerla en operacion.
b) Actualizar su arbol de ports.
b) Configurar el acceso a el jail via ssh por llave, aqui en mi blog viene esto.

Una vez hecho esto, podemos continuar.

Paso 1: Configurar Samba con LDAP.
Ports a instalar:
  • net/samba3
  • net/openldap24-server
  • net/openldap24-client
  • net/nss_ldap
  • security/pam_ldap
  • net/smbldap-tools
Como no voy a compartir las impresoras con Samba, deshabilito CUPS cuando salga el menu de configuracion de Samba.

Van a salir mas ports de los cuales dependen estos, pero usen las opciones que vienen por default.

src.conf
WITHOUT_AMD="yes"
WITHOUT_APM="yes"
WITHOUT_ASSERT_DEBUG="yes"
WITHOUT_ATM="yes"
WITHOUT_AUTHPF="yes"
WITHOUT_BIND="yes"
WITHOUT_BLUETOOTH="yes"
WITHOUT_BOOT="yes"
WITHOUT_CALENDAR="yes"
WITHOUT_CDDL="yes"
WITHOUT_CTM="yes"
WITHOUT_CVS="yes"
WITHOUT_DICT="yes"
WITHOUT_EXAMPLES="yes"
WITHOUT_FLOPPY="yes"
WITHOUT_FREEBSD_UPDATE="yes"
WITHOUT_GAMES="yes"
WITHOUT_GPIB="yes"
WITHOUT_HTML="yes"
WITHOUT_INET6="yes"
WITHOUT_IPFILTER="yes"
WITHOUT_IPFW="yes"
WITHOUT_IPX="yes"
WITHOUT_JAIL="yes"
WITHOUT_KVM="yes"
WITHOUT_LPR="yes"
WITHOUT_MAIL="yes"
WITHOUT_MAN="yes"
WITHOUT_NCP="yes"
WITHOUT_NDIS="yes
WITHOUT_NTP="yes"
WITHOUT_PF="yes"
WITHOUT_PMC="yes"
WITHOUT_PPP="yes"
WITHOUT_PROFILE="yes"
WITHOUT_QUOTAS="yes"
WITHOUT_RCMDS="yes"
WITHOU_RCS="yes"
WITHOUT_SHAREDOCS="yes"
WITHOUT_TELNET="yes"
WITHOUT_USB="yes"
WITHOUT_WIRELESS="yes"
WITHOUT_WPA_SUPPLICANT_EAPOL="yes"

LDAP Server

Una vez finalizado, lo primero que vamos a configurar es ldap, como sabran la configuracion la tenemos en /usr/local/etc/openldap.

Como este va a ser el servidor ldap, vamos a trabajar sobre slapd.conf, cuando este listo continuaremos con ldap.conf, ya que es usado por los clientes que buscan contactar a servidores ldap, aqui el servidor es a la vez cliente.

Vamos a definir nuestro dominio, pero vamos a darle mas realismo, aqui yo me registre en dyndns.org y elegi el nombre midominio, el cual quedo:

midominio.dyndns.org

Esta es la estructura de mi domino en ldap:

dc=midominio,dc=dyndns,dc=org

Vamos a tener lo siguiente en mi dominio:

Users -- Usuarios.
Groups -- Grupos.
Computers --Computadoras
Imap

Por pasos:

1; Password de ldap.
Necesitamos obtener el password que ldap va usar para administrarlo, para ello elegimos un password, ustedes elijen el que gusten:

root@ slappasswd
New password:
Re-enter new password:
{SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2; Crear archivo ldif:

Con esta informacion voy a crear el siguiente archivo el cual mas adelante voy a usar para crear mi dominio en ldap, le voy a llamar midominio.ldif:

dn: dc=midominio,dc=dyndns,dc=org
objectClass: dcObject
objectClass: organizationalUnit
dc: midominio
ou: midominio

dn: cn=Manager,dc=midominio,dc=dyndns,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: Manager
description: LDAP administrator
userPassword:{SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

dn: ou=Users,dc=midominio,dc=dyndns,dc=org
objectClass: organizationalUnit
ou: Users

dn: ou=Groups,dc=midominio,dc=dyndns,dc=org
objectClass: organizationalUnit
ou: Groups

dn: ou=Computers,dc=midominio,dc=dyndns,dc=org
objectClass: organizationalUnit
ou: Computers

dn: ou=Idmap,dc=midominio,dc=dyndns,dc=org
objectClass: organizationalUnit
ou: Idmap

El campo del password va a ser de acuerdo a su password que usaron con el comando anterior.

3; Editar el archivo slapd.conf:

Ahora necesitamos ahora si editar el archivo de configuracion del servidor ldap, su nombre es slapd.conf, se localiza en /usr/local/etc/openldap/, quedaria como sigue:

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/samba.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org

pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

# Load dynamic backend modules:
modulepath /usr/local/libexec/openldap
moduleload back_bdb
#######################################################################
# BDB database definitions
#######################################################################

database bdb
suffix "dc=midominio,dc=dyndns,dc=org"
rootdn "cn=Manager,dc=midominio,dc=dyndns,dc=org"
cachesize 100000

# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/db/openldap-data/midominio
# Indices to maintain
index objectClass eq
index cn pres,sub,eq
index sn pres,sub,eq
index uid pres,sub,eq
index displayName pres,sub,eq
index uidNumber eq
index gidNumber eq
index memberUID eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub

loglevel 256

Recordar el password del archivo midominio.ldif debe ser el mismo.

A) Yo estoy usando el folder midominio en la ruta indicada, asi que como no existe lo creo.

B) Muchos esquemas o "schemas" no estan con ldap asi que tenemos que buscarlos y copiarlos a el folder: .../openldap/schemas/ ejemplo:

include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/samba.schema

cp /usr/local/share/examples/samba/LDAP/samba.schema /usr/local/etc/openldap/schema/

C) Copear el archivo DB_CONFIG.example a donde Ldap va a almacenar su informacion:

cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/pipi/DB_CONFIG

D) Cambiar los permisos del folder padre y sus subdirectorios, el usuario ldap y el mismo grupo deben ser los propietarios de esos directorios:

chown -R ldap:ldap /var/db/openldap-data/

E) Agregar el servicio para que arranque al iniciar el servidor:

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

F) Iniciamos el servicio:

/usr/local/etc/rc.d/slapd start
Starting slapd.

G) Verificamos que haya arrancado:

sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
ldap slapd 23384 7 tcp4 192.168.49.2:389 *:*

H) De otro cliente probamos nos responda via telnet:

telnet 192.168.49.2 389
Trying 192.168.49.2...
Connected to 192.168.49.2.
Escape character is '^]'.

Listo.

I) Apagamos el servicio.

/usr/local/etc/rc.d/slapd stop
Stopping slapd.
Waiting for PIDS: 23384.

J) Agregamos el log a el syslog:

!slapd
*.* /var/log/slapd.log

Debemos crear este archivo.
touch /var/log/slapd.log

Debemos reiniciar syslog para que levante los cambios.
Debemos reiniciar slapd y ya debe estar logeando a ese archivo.

cat slapd.log
Apr 22 23:56:18 host slapd[23535]: @(#) $OpenLDAP: slapd 2.4.21 (Apr 21 2010 22:09:47) $ root@host.midomnio.dyndns.org:/usr/ports/net/openldap24-server/work/openldap-2.4.21/servers/slapd
Apr 22 23:56:18 mail slapd[23536]: slapd starting

Hasta aqui el servidor esta listo para poder ahora si crear nuestra estructura.

Creando el dominio.

Apagamos el servicio de ldap, ahora lo que sigue es muy simple, como en mi caso estoy almacenando la BD de ldap en /var/db/openldap-data/pipi/, todo ese contenido lo voy a borrar para poder ahora crear mi dominio.

cd /var/db/openldap-data/midominio/
mail# rm -rf ./*

De nuevo tenemos que hacer lo del paso C). Ahora vamos a darle a LDAP nuestro archivo de texto con extension ldif para que forme nuestro dominio.

slapadd -v -l /usr/local/etc/openldap/pipi.ldif
added: "dc=midominio,dc=dyndns,dc=org" (00000001)
added: "cn=Manager,dc=midominio,dc=dyndns,dc=org" (00000002)
added: "ou=Users,dc=midominio,dc=dyndns,dc=org" (00000003)
added: "ou=Groups,dc=midominio,dc=dyndns,dc=org" (00000004)
added: "ou=Computers,dc=midominio,dc=dyndns,dc=org" (00000005)
added: "ou=Idmap,dc=midominio,dc=dyndns,dc=org" (00000006)
_#################### 100.00% eta none elapsed none fast!
Closing DB...

Ahora repetir paso D).

Dejo el servicio apagado.

Ahora si, lo que sigue es trabajar con samba.

Samba

Tenemos nuestro servicio LDAP operando, ahora entra samba, tiene que ser configurado para que LDAP sea quien le proporcione informacion de los usuarios, maquinas, grupos, etc.

Para esto necesitamos configurar samba y proporcionarle la informacion necesaria para poder comunicarse con LDAP, para ello vamos a usar la siguiente configuración.

Encontramos el archivo en: /usr/local/etc/

smb.conf

# Global parameters
[global]
workgroup = PIPI
server string = Samba Server
netbios name = SMBPDC
hosts allow = 192.168.49. 127.
interfaces = xl0
bind interfaces only = Yes

# passwd backend
encrypt passwords = yes
passdb backend = ldapsam:ldap://192.168.49.2/
enable privileges = yes
pam password change= Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %nn *ReType*new*UNIX*password* %nn * passwd:*all*authentication*tokens*updated*successfully*
unix password sync = Yes

# Log options
log level = 1
log file = /var/log/samba/%m.log
max log size = 500
syslog = 1

# Name resolution
name resolve order = wins hosts bcast

# misc
timeserver = No
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
use sendfile = yes
veto files = /*.eml/*.nws/*.{*}/
veto oplock files = /*.doc/*.xls/*.mdb/
deadtime = 120

# Dos-Attribute
map hidden = No
map system = No
map archive = No
map read only = No
store dos attributes = Yes

# printers - configured to use CUPS and automatically load them
load printers = No
printcap name =
printing =
cups options =
show add printer wizard = No

# scripts invoked by samba
add user script = /usr/local/sbin/smbldap-useradd -m %u
delete user script = /usr/local/sbin/smbldap-userdel %u
add group script = /usr/local/sbin/smbldap-groupadd -p %g
delete group script = /usr/local/sbin/smbldap-groupdel %g
add user to group script = /usr/local/sbin/smbldap-groupmod -m %u %g
delete user from group script = /usr/local/sbin/smbldap-groupmod -x %u %g
set primary group script = /usr/local/sbin/smbldap-usermod -g %g %u
add machine script = /usr/local/sbin/smbldap-useradd -w %m

# LDAP-iConfiguration
ldap delete dn = Yes
ldap ssl = off
ldap passwd sync = Yes
ldap suffix = dc=midominio,dc=dyndns,dc=org
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=Manager,dc=midominio,dc=dyndns,dc=org
idmap backend = ldap:ldap://192.168.49.2
idmap uid = 10000-20000
idmap gid = 10000-20000

# logon options
logon script =
logon path =
logon path =
logon home =
logon drive =

# setting up as domain controller
username map = /home/samba/usermap
preferred master = Yes
wins support = Yes
domain logons = Yes
domain master = Yes
local master = Yes
os level = 64
map acl inherit = Yes
unix charset = UTF8
password level = 6

#========== Share Definitions ==============================

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = yes
locking = no

[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No

[Profiles]
comment = Network Profiles Service
path = /home/samba/profiles
read only = No
profile acls = yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
profile acls = Yes

Parte de esto esta basado en el tutorial de freebsd para samba con algunas modificaciones hechas por mi.

FreeBSD-Samba

Creamos los folders:

/home
/home/samba
/home/samba/netlogon
/home/samba/profiles

Creamos el archivo usermap con esta informacion:

# Unix_name = SMB_name1 SMB_name2 ...
root = Manager administrator admin
nobody = guest pcguest smbguest

Si existen parametros que no entiendan de favor lean man smb.conf.

Este servidor aparecera como SMBPDC, cuando lo veamos con samba o windows dominio MIDOMINIO.

Probamos la configuracion de samba:

testparm
Load smb config files from /usr/local/etc/smb.conf
Processing section "[netlogon]"
Processing section "[homes]"
Processing section "[Profiles]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions

[global]
unix charset = UTF8
workgroup = PIPI
netbios name = SMBPDC
server string = Samba Server
interfaces = xl0
bind interfaces only = Yes
passdb backend = ldapsam:ldap://192.168.49.2/
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %nn *ReType*new*UNIX*password* %nn * passwd:*all*authentication*tokens*updated*successfully*
username map = /home/samba/usermap
password level = 6
unix password sync = Yes
log level = 1
log file = /var/log/samba/%m.log
max log size = 500
name resolve order = wins hosts bcast
deadtime = 120
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
load printers = No
show add printer wizard = No
add user script = /usr/local/sbin/smbldap-useradd -m %u
delete user script = /usr/local/sbin/smbldap-userdel %u
add group script = /usr/local/sbin/smbldap-groupadd -p %g
delete group script = /usr/local/sbin/smbldap-groupdel %g
add user to group script = /usr/local/sbin/smbldap-groupmod -m %u %g
delete user from group script = /usr/local/sbin/smbldap-groupmod -x %u %g
set primary group script = /usr/local/sbin/smbldap-usermod -g %g %u
add machine script = /usr/local/sbin/smbldap-useradd -w %m
logon path =
logon home =
domain logons = Yes
os level = 64
preferred master = Yes
domain master = Yes
wins support = Yes
ldap admin dn = cn=Manager,dc=midominio,dc=dyndns,dc=org
ldap delete dn = Yes
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Computers
ldap passwd sync = Yes
ldap suffix = dc=midominio,dc=dyndns,dc=org
ldap user suffix = ou=Users
idmap backend = ldap:ldap://192.168.49.2
idmap uid = 10000-20000
idmap gid = 10000-20000
hosts allow = 192.168.49., 127.
map acl inherit = Yes
use sendfile = Yes
veto files = /*.eml/*.nws/*.{*}/
veto oplock files = /*.doc/*.xls/*.mdb/
map archive = No
map readonly = no
store dos attributes = Yes

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = Yes
locking = No

[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No

[Profiles]
comment = Network Profiles Service
path = /home/samba/profiles
read only = No
profile acls = Yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/

Correcto no marco errores de ortografia o sintaxis.

Sigue darle a samba el password del administrator de ldap, por que tiene que presentarlo cuando accese informacion de LDAP.

Ejecutamos lo siguiente:

smbpasswd -W
Setting stored password for "cn=Manager,dc=midominio,dc=dyndns,dc=org" in secrets.tdb
New SMB password:
Retype new SMB password:

Este password es el mismo que usaron cuando estabamos configurando a LDAP.

El archivo es creado en /usr/local/etc/samba/:

ll
total 8
-rw------- 1 root wheel 8192 Apr 24 13:38 secrets.tdb
-rw-r--r-- 1 root wheel 0 Apr 23 14:15 smbpasswd

Bien ahora vamos a decirle a FreeBSD que arranque el servicio cada que el servidor reinicie:

Abrimo rc.conf y agregamos esto a el final:

#####################Samba#########################
nmbd_enable="YES"
smbd_enable="YES"
winbindd_enable="YES"

Reiniciamos el servicio y vemos si todo salio como debiera, debemos empezar por LDAP:

/usr/local/etc/rc.d/slapd start
Starting slapd.

Ahora si samba:

/usr/local/etc/rc.d/samba start
Removing stale Samba tdb files: ...... done
Starting nmbd.
Starting smbd.
Starting winbindd.

Checamos el status:

/usr/local/etc/rc.d/samba status
nmbd is running as pid 57468.
smbd is running as pid 57475.
winbindd is running as pid 57481.

Parece que todo esta funcionando sin problemas, vamos a revisar que los puertos esten escuchando:

sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root smbd 57485 9 tcp4 192.168.49.2:47739 192.168.49.2:389
root winbindd 57483 21 tcp4 192.168.49.2:61499 192.168.49.2:389
root winbindd 57483 22 tcp4 192.168.49.2:12092 192.168.49.2:389
root winbindd 57483 23 tcp4 192.168.49.2:17436 192.168.49.2:389
root smbd 57475 9 tcp4 192.168.49.2:47739 192.168.49.2:389
root nmbd 57468 9 udp4 192.168.49.2:137 *:*
root nmbd 57468 10 udp4 192.168.49.2:138 *:*
ldap slapd 23844 7 tcp4 192.168.49.2:389 *:*
ldap slapd 23844 11 tcp4 192.168.49.2:389 192.168.49.2:47739
ldap slapd 23844 16 tcp4 192.168.49.2:389 192.168.49.2:61499
ldap slapd 23844 19 tcp4 192.168.49.2:389 192.168.49.2:12092
ldap slapd 23844 20 tcp4 192.168.49.2:389 192.168.49.2:17436

Los que estan bold nos indica que samba+winbind estan comunicados con LDAP, parace que todo ha salido sin problemas.

Hasta aqui hemos configurado samba para que pueda comunicarse con LDAP, lo que sigue configurar smbldap-tools que son la interface que nos va a ayudar a crear, usuarios, grupos, modificar parametros de grupo, usuarios, etc.

smbldap-tools

Bien smbldap-tools se instala en: /usr/local/etc/smbldap-tools.

Ahi dentro tenemos los siguientes archivos:

-r--r--r-- 1 root wheel 7944 Apr 21 22:59 smbldap.conf
-r--r--r-- 1 root wheel 7944 Apr 21 22:59 smbldap.conf.sample
-r--r--r-- 1 root wheel 433 Apr 21 22:59 smbldap_bind.conf
-r--r--r-- 1 root wheel 433 Apr 21 22:59 smbldap_bind.conf.sample

smbldap.conf contiene la configuracion de nuestro dominio.
smbldap_bind.conf los parametros para accesar LDAP.

Vamos empezando por smbldap.conf, esta nos quedaria asi:

Existe una informacion que smbldap necesita de nuestro servidor, la cual se en el mundo Windows se llama el "SID", cada dominio tiene una, para obtenerla de nuestro dominio debemos ejecutar el siguiente comando:

net getlocalsid
[2010/04/25 21:21:45, 0] lib/interface.c:load_interfaces(229)
WARNING: no network interfaces found
SID for domain SMBPDC is: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY

Les quiero aclarar algo, esta informacion a veces tarda en salir, por alguna razon LDAP tarda en proporcionarla, les dice que no puede contactar el dominio, etc.

No se desesperen, a veces necesitamos esperar un poco 15-20 minutos, y decirle el nombre del dominio como:

net getlocalsid MIDOMINIO
[2010/04/25 21:24:13, 0] lib/interface.c:load_interfaces(229)
WARNING: no network interfaces found
SID for domain MIDOMINIO is: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY

El programa smbldap-tools es una serie de scripts diseñados para poder comunicarse con LDAP y hacernos la vida mas facil, tenemos 2 maneras de configurarlo:

1) Automaticamente:
Aqui necesitamos ejecutar el siguiente comando:

/usr/local/share/examples/smbldap-tools/configure.pl

Aqui nos va a empezar a hacer preguntas que debemos conocer, por default algunas si tenemos que proporcionarselas, el trata de obtener el SID, si no lo tiene no podra operar correctamente, ejecutenlo si asi lo desean

2) Manual: Cuando sabemos la informacion que debemos proporcionarle a smbldap-tools, podremos editar ambos archivos, al final el comando anterior es lo que hace.

Yo me voy por el lado manual, y mi archivo queda asi:

smbldap.conf

##############################################################################
#
# General Configuration
#
##############################################################################

# Put your own SID. To obtain this number do: "net getlocalsid".
# If not defined, parameter is taking from "net getlocalsid" return
SID="S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY"
# Domain name the Samba server is in charged.
# If not defined, parameter is taking from smb.conf configuration file
# Ex: sambaDomain="IDEALX-NT"
sambaDomain="MIDOMINIO"

##############################################################################
#
# LDAP Configuration
#
##############################################################################

# Notes: to use to dual ldap servers backend for Samba, you must patch
# Samba with the dual-head patch from IDEALX. If not using this patch
# just use the same server for slaveLDAP and masterLDAP.
# Those two servers declarations can also be used when you have
# . one master LDAP server where all writing operations must be done
# . one slave LDAP server where all reading operations must be done
# (typically a replication directory)

# Slave LDAP server
# Ex: slaveLDAP=127.0.0.1
# If not defined, parameter is set to "127.0.0.1"
slaveLDAP="192.168.49.2"

# Slave LDAP port
# If not defined, parameter is set to "389"
slavePort="389"

# Master LDAP server: needed for write operations
# Ex: masterLDAP=127.0.0.1
# If not defined, parameter is set to "127.0.0.1"
masterLDAP="192.168.49.2"

# Master LDAP port
# If not defined, parameter is set to "389"
#masterPort="389"
masterPort="389"

# Use TLS for LDAP
# If set to 1, this option will use start_tls for connection
# (you should also used the port 389)
# If not defined, parameter is set to "0"
ldapTLS="0"

# Use SSL for LDAP
# If set to 1, this option will use SSL for connection
# (standard port for ldaps is 636)
# If not defined, parameter is set to "0"
ldapSSL="0"

# How to verify the server's certificate (none, optional or require)
# see "man Net::LDAP" in start_tls section for more details
verify="require"

# CA certificate
# see "man Net::LDAP" in start_tls section for more details
cafile="/etc/smbldap-tools/ca.pem"

# certificate to use to connect to the ldap server
# see "man Net::LDAP" in start_tls section for more details
clientcert="/etc/smbldap-tools/smbldap-tools.iallanis.info.pem"

# key certificate to use to connect to the ldap server
# see "man Net::LDAP" in start_tls section for more details
clientkey="/etc/smbldap-tools/smbldap-tools.iallanis.info.key"

# LDAP Suffix
# Ex: suffix=dc=IDEALX,dc=ORG
suffix="dc=midominio,dc=dyndns,dc=org"

# Where are stored Users
# Ex: usersdn="ou=Users,dc=IDEALX,dc=ORG"
# Warning: if 'suffix' is not set here, you must set the full dn for usersdn
usersdn="ou=Users,${suffix}"

# Where are stored Computers
# Ex: computersdn="ou=Computers,dc=IDEALX,dc=ORG"
# Warning: if 'suffix' is not set here, you must set the full dn for computersdn
computersdn="ou=Computers,${suffix}"
# Where are stored Groups
# Ex: groupsdn="ou=Groups,dc=IDEALX,dc=ORG"
# Warning: if 'suffix' is not set here, you must set the full dn for groupsdn
groupsdn="ou=Groups,${suffix}"

# Where are stored Idmap entries (used if samba is a domain member server)
# Ex: groupsdn="ou=Idmap,dc=IDEALX,dc=ORG"
# Warning: if 'suffix' is not set here, you must set the full dn for idmapdn
idmapdn="ou=Idmap,${suffix}"

# Where to store next uidNumber and gidNumber available for new users and groups
# If not defined, entries are stored in sambaDomainName object.
# Ex: sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
# Ex: sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"

# Default scope Used
scope="sub"

# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)
hash_encrypt="SSHA"

# if hash_encrypt is set to CRYPT, you may set a salt format.
# default is "%s", but many systems will generate MD5 hashed
# passwords if you use "$1$%.8s". This parameter is optional!
crypt_salt_format="%s"

##############################################################################
#
# Unix Accounts Configuration
#
##############################################################################

# Login defs
# Default Login Shell
# Ex: userLoginShell="/bin/bash"
userLoginShell="/sbin/nologin"

# Home directory
# Ex: userHome="/home/%U"
userHome="/home/%U"

# Default mode used for user homeDirectory
userHomeDirectoryMode="700"
# Gecos
userGecos="System User"

# Default User (POSIX and Samba) GID
defaultUserGid="513"

# Default Computer (Samba) GID
defaultComputerGid="515"

# Skel dir
skeletonDir="/etc/skel"

# Default password validation time (time in days) Comment the next line if
# you don't want password to be enable for defaultMaxPasswordAge days (be
# careful to the sambaPwdMustChange attribute's value)
defaultMaxPasswordAge="10000"

##############################################################################
#
# SAMBA Configuration
#
##############################################################################

# The UNC path to home drives location (%U username substitution)
# Just set it to a null string if you want to use the smb.conf 'logon home'
# directive and/or disable roaming profiles
# Ex: userSmbHome="\\PDC-SMB3\%U"
userSmbHome="\\smbpdc\%U"

# The UNC path to profiles locations (%U username substitution)
# Just set it to a null string if you want to use the smb.conf 'logon path'
# directive and/or disable roaming profiles
# Ex: userProfile="\\PDC-SMB3\profiles\%U"
userProfile="\\smbpdc\profiles\%U"

# The default Home Drive Letter mapping
# (will be automatically mapped at logon time if home directory exist)
# Ex: userHomeDrive="H:"
userHomeDrive="H:"

# The default user netlogon script name (%U username substitution)
# if not used, will be automatically username.cmd
# make sure script file is edited under dos
# Ex: userScript="startup.cmd" # make sure script file is edited under dos
userScript=""
# Domain appended to the users "mail"-attribute
# when smbldap-useradd -M is used
# Ex: mailDomain="idealx.com"
mailDomain="midominio.dyndns.org"

##############################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
##############################################################################

# Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but
# prefer Crypt::SmbHash library
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"

# Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)
# but prefer Crypt:: libraries
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

# comment out the following line to get rid of the default banner
# no_banner="1"

Ahora el que sigue:

smbldap_bind.conf

############################
# Credential Configuration #
############################
# Notes: you can specify two differents configuration if you use a
# master ldap for writing access and a slave ldap server for reading access
# By default, we will use the same DN (so it will work for standard Samba
# release)
slaveDN="cn=Manager,dc=midominio,dc=dyndns,dc=org"
slavePw="LDAP-PASSWORD"
masterDN="cn=Manager,dc=midominio,dc=dyndns,dc=org"
masterPw="LDAP-PASSWORD"

Bien lo que sigue es de los ultimos pasos, ya tenemos todo lo necesario para operar nuestro dominio, pero aun no falta hacer el ultimo paso el cual consiste en agregar la informacion necesaria que nos ayudara a emular un dominio tipo "Windows NT4". Para esto smbldap-tools instala unos scripts, solo necesitamos 1 de ellos, y es lo que sigue:

smbldap-populate

smbldap-populate
Populating LDAP directory for domain MIDOMINIO (S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY)
(using builtin directory structure)

entry dc=midominio,dc=dyndns,dc=org already exist.
entry ou=Users,midominio,dc=dyndns,dc=org already exist.
entry ou=Groups,midominio,dc=dyndns,dc=org already exist.
entry ou=Computers,midominio,dc=dyndns,dc=org already exist.
entry ou=Idmap,midominio,dc=dyndns,dc=org already exist.
adding new entry: uid=root,ou=Users,midominio,dc=dyndns,dc=org
adding new entry: uid=nobody,ou=Users,midominio,dc=dyndns,dc=org
adding new entry: cn=Domain Admins,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Domain Users,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Domain Guests,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Domain Computers,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Administrators,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Account Operators,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Print Operators,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Backup Operators,ou=Groups,midominio,dc=dyndns,dc=org
adding new entry: cn=Replicators,ou=Groups,midominio,dc=dyndns,dc=org
entry sambaDomainName=MIDOMINIO,midominio,dc=dyndns,dc=org already exist. Updating it...

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:

El password es mismo que hemos estado usando desde que iniciamos, ese es el que tiene que usar siempre que necesiten hacer con el administrador de LDAP.

Bien, ya tenemos todo listo. Vamos probando.

Probando

net groupmap list
[2010/04/25 21:54:50, 0] lib/interface.c:load_interfaces(229)
WARNING: no network interfaces found
Administrators (S-1-5-32-544) -> 10000
Users (S-1-5-32-545) -> 10001
Domain Admins (S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY) -> 512
Domain Users (S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY) -> 513
Domain Guests (S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY) -> 514
Domain Computers (S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY) -> 515
Administrators (S-1-5-32-544) -> 544
Account Operators (S-1-5-32-548) -> 548
Print Operators (S-1-5-32-550) -> 550
Backup Operators (S-1-5-32-551) -> 551
Replicators (S-1-5-32-552) -> 552

Bien ahi tenemos los grupos creados, vamos viendo el comando pdbedit.

pdbedit -Lv root
Unix username: root
NT username: root
Account Flags: [U ]
User SID: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY
Primary Group SID: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY
Full Name: root
Home Directory: \\smbpdc\root
HomeDir Drive: H:
Logon Script:
Profile Path: \\smbpdc\profiles\root
Domain: MIDOMINIO
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Sun, 25 Apr 2010 21:50:36 UTC
Password can change: Sun, 25 Apr 2010 21:50:36 UTC
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Todo bien, ahora vamos probando smbldap-tools:

smbldap-usershow root
dn: uid=root,ou=Users,dc=midominio,dc=dyndns,dc=org
cn: root
sn: root
objectClass: top,person,organizationalPerson,inetOrgPerson,sambaSamAccount,posixAccount,shadowAccount
gidNumber: 0
uid: root
uidNumber: 0
homeDirectory: /home/root
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaHomePath: \\smbpdc\root
sambaHomeDrive: H:
sambaProfilePath: \\smbpdc\profiles\root
sambaPrimaryGroupSID: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY
sambaSID: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY
loginShell: /bin/false
gecos: Netbios Domain Administrator
sambaLMPassword: AS45DSA4D65AS4D654ASD654AS6D54ASD
sambaAcctFlags: [U]
sambaNTPassword: 4AASD54AS5D4AS6D46A5SD465AS4D
sambaPwdLastSet: 1272232236
sambaPwdMustChange: 2136232236
userPassword: {SSHA}A5SD4SA65D4SA65D46SA5D46SA5D4
shadowLastChange: 14724
shadowMax: 10000

Parece que todo ha salido correctamente, vamos agregando 1 usuario:

smbldap-useradd -a -m test1
smbldap-passwd test1
Changing UNIX and samba passwords for test1
New password:
Retype new password:

Vamos viendo su home folder:

pwd
/home
ll
total 4
drwxr-xr-x 4 root wheel 512 Apr 25 21:59 samba
drwx------ 2 root wheel 512 Apr 20 23:49 test1

Listo ahi esta su folder, ahora su informacion en el dominio:

smbldap-usershow test1
dn: uid=test1,ou=Users,dc=midominio,dc=dyndns,dc=org
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
cn: test1
sn: test1
givenName: test1
uid: test1
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/test1
loginShell: /sbin/nologin
gecos: System User
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: test1
sambaSID: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY
sambaPrimaryGroupSID: S-1-5-21-WWWWWWWW-XXXXXXXXXX-YYYYYYYYYY
sambaProfilePath: \\smbpdc\profiles\test1
sambaHomePath: \\smbpdc\test1
sambaHomeDrive: H:
sambaLMPassword: 01FC5A6BE7BC6929AAD3B435B51404EE
sambaAcctFlags: [U]
sambaNTPassword: 0CB6948805F797BF2A82807973B89537
sambaPwdLastSet: 1272232931
sambaPwdMustChange: 2136232931
userPassword: {SSHA}x648ex6ahBbvwBH3bZtOqlCRz51nb2xo
shadowLastChange: 14724
shadowMax: 10000

Ahi esta.

Hasta aqui ya tenemos todo para administrar un dominio con samba+ldap. Desde windows ya deben de poder ver el dominio y registrar los equipos., si no busquenle.

Lo que voy hacer a continuacion es configurar FreeBSD para que use los usuarios de LDAP. Para esto necesitamos configurar nss_ldap y pam_ldap.

Como va a funcionar, vean el siguiente ejemplo:

id test1
id: test1: no such user

Aqui FreeBSD no sabe que existe el usuario test1 por que no tiene manera de comunicarse con LDAP, cuando lo haga tendremos esto:

id test1
uid=10020(test1) gid=513(Domain Users) groups=513(Domain Users)

Si ven la diferencia?

Configurando nss_ldap

Este es mi archivo de configuracion de nss_ldap.conf, ya sabendo donde lo pone FreeBSD, correcto?

host 192.168.49.2
base dc=midominio,dc=dyndns,dc=org
ldap_version 3
port 389
scope one
bind_policy soft
nss_connect_policy persist
idle_timelimit 3600
nss_paged_results yes
pagesize 1000
pam_login_attribute uid
nss_base_passwd ou=Users,dc=midominio,dc=dyndns,dc=org?one
nss_base_passwd ou=Computers,dc=midominio,dc=dyndns,dc=org?one
nss_base_shadow ou=Users,dc=midominio,dc=dyndns,dc=org?one
nss_base_group ou=Groups,dc=midominio,dc=dyndns,dc=org?one
ssl off

El archivo esta muy extenso, asi que solo puse lo necesario.

Tambien instalamos pam_ldap este instala una archivo de configuracion llamado: ldap.conf, y openldap tiene otro del mismo nombre, tenemos que configurar ambos y aparte necesitan la misma informacion que nss_ldap.conf, asi que mejor hacemos los siguiente:

1; Si existen ambos archivos borrarlos, pam_ldap lo coloca en /usr/local/etc/ y openldap en su folder que es /usr/local/etc/openldap/

2;Crear un enlace soft hacia nss_ldap.conf
ln -s /usr/local/etc/nss_ldap.conf /usr/local/etc/ldap.conf
ln -s /usr/local/etc/nss_ldap.conf /usr/local/etc/openldap/ldap.conf

Bien ahora le toca a /etc/nsswitch.conf, este queda asi:

group: files ldap
group_compat: nis
hosts: files dns
networks: files
passwd: files ldap
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

*Recordar hacer siempre respaldos de los archivos del sistema: cp nsswitch.conf nsswitch.conf-default.

Ahora si prueben de nuevo:

id test1
uid=1000(test1) gid=513(Domain Users) groups=513(Domain Users)
mail# id root
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator),512(Domain Admins)

A esto es donde queria llegar, estamos listos para el siguiente paso, dovecot.

Dovecot

Bien ya tenemos todo listo para que dovecot haga uso de pam para poder proporcionar a los usuarios el servicio de correo usando Dovecot u proporcionando "imap", para esto vamos a hacer lo siguiente.

1; Instalar dovecot:

[X] KQUEUE
[X] SSL SSL support
[X] MANAGESIEVE ManageSieve support
[ ] GSSAPI GSSAPI support
[ ] VPOPMAIL VPopMail support
[ ] BDB BerkleyDB support
[X] LDAP OpenLDAP support
[ ] PGSQL PostgreSQL support
[X] MYSQL MySQL support
[ ] SQLITE SQLite support

Es lo que voy a usar.

2; Configurar dovecot:
Ya no necesito decirles donde esta dovecot.conf correcot?

dovecot.conf

protocol imap {
listen = 192.168.49.2:143
}
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot.log
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = local7
ssl = no
login_greeting = Listo My Lord.
login_trusted_networks = 192.168.49.0/24
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
mail_location = maildir:~/Maildir
namespace private {
separator = .
prefix = INBOX.
inbox = yes
}
mail_privileged_group = mail
mail_debug = yes
mail_log_prefix = "%Us(%u): "
dotlock_use_excl = yes
verbose_proctitle = yes
maildir_stat_dirs = yes
maildir_copy_with_hardlinks = yes
maildir_copy_preserve_filename = yes
protocol imap {
imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}
protocol lda {
postmaster_address = postmaster
sendmail_path = /usr/sbin/sendmail
}
auth_username_format = %Lu
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth_worker_max_count = 1000
auth default {
mechanisms = plain login
passdb pam {
args = session=yes imap
}
userdb passwd {
args = blocking=yes
}
user = root
socket listen {
path = /var/run/dovecot/auth-master
mode = 0600
}
client {
path = /var/run/dovecot/auth-client
mode = 0660
}
}
}

3; Imap de PAM:
Debemos configurar en PAM el archivo imap que es el que va a utilizar dovecot para sacar la informacion de usuarios, este se localiza en /etc/pam.d/ y se llama "imap"

imap
=====line 1 col 0 lines from top 1 ============================================
#
# $FreeBSD: src/etc/pam.d/imap,v 1.7.10.1.2.1 2009/10/25 01:10:29 kensmith Exp $
#
# PAM configuration for the "imap" service
#

# auth
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_ldap.so try_first_pass
auth required pam_unix.so no_warn try_first_pass

# account
#account required pam_nologin.so
account sufficient /usr/local/lib/pam_ldap.so
account required pam_unix.so

4; Syslog:
Como estamos usando local7 para dovecot, debemos configurar el servicio y ademas crear el archivo dovecot.log.

touch /var/log/dovecot.log

agregamos a syslog.conf esto a el final:

local7 /var/log/dovecot.log

Reiniciamos syslogd

5; Agregamos a dovecot para que arranque cada que reiniciemos el sistema:
agregamos esto a rc.conf.

dovecot_enable="yes"

6; Iniciamos el servicio:

/usr/local/etc/rc.d/dovecot start

7; Verificamos puertos abiertos:

sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
dovecot imap-login 49041 4 tcp4 192.168.49.2:143 *:*
dovecot imap-login 49016 4 tcp4 192.168.49.2:143 *:*
dovecot imap-login 49015 4 tcp4 192.168.49.2:143 *:*
root dovecot-au 49013 5 tcp4 192.168.49.2:27813 192.168.49.2:389
root dovecot-au 49012 8 tcp4 192.168.49.2:11954 192.168.49.2:389
root dovecot 49011 7 tcp4 192.168.49.2:143 *:*
root smbd 88886 9 tcp4 192.168.49.2:34457 192.168.49.2:389
root smbd 88880 9 tcp4 192.168.49.2:34457 192.168.49.2:389
root nmbd 88873 9 udp4 192.168.49.2:137 *:*
root nmbd 88873 10 udp4 192.168.49.2:138 *:*
ldap slapd 88590 7 tcp4 192.168.49.2:389 *:*
ldap slapd 88590 11 tcp4 192.168.49.2:389 192.168.49.2:34457
ldap slapd 88590 16 tcp4 192.168.49.2:389 192.168.49.2:11954
ldap slapd 88590 19 tcp4 192.168.49.2:389 192.168.49.2:27813
ldap slapd 88590 24 tcp4 192.168.49.2:389 192.168.49.2:46517

Ahi lo tenemos.

8; Probando login de usuarios:

Tenemos ya unos usuarios creados, para que dovecot pueda accesar a el folder de cada usuario, el verifica que los permisos esten correctamente creados, cada usuario debe ser el dueño de su directorio, si debemos arreglar esto.

Les comento esto, por que cuando se esta configurando ldap+samba, puede que uno de los directorios creados para algun usuario haya quedado con los permisos erroneos, una vez que hayamos configurado nss_ldap y nis todo queda arreglado.

Si algun folder del /home no tiene los permisos correctos se los podemos arreglar:

chown -R UsuarioX:"Domain Users" /home/UsuarioX

Todos son creados con el modo 700.

Ahora si, de otra maquina vamos probando el puerto de dovecot:

telnet 192.168.49.2 143
Trying 192.168.49.2...
Connected to mail.midominio.dyndns.org.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN AUTH=LOGIN] Listo My Lord.

*Ahora vamos a logearnos con algun usuario*

a login test2 123 ===>>> usuario:test2, password:123
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in

b select inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1272323541] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
b OK [READ-WRITE] Select completed.

Ctrl+]

Listo salimos, todo funciono sin problemas, vamos revisando el folder de ese usuario a ver si hay algo nuevo.

cd /home/test2
mail# ll
total 2
drwx------ 5 test2 Domain Users 512 Apr 26 23:12 Maildir
mail# cd Maildir/
mail# ll
total 12
drwx------ 2 test2 Domain Users 512 Apr 26 23:12 cur
-rw------- 1 test2 Domain Users 17 Apr 26 23:12 dovecot-uidlist
-rw------- 1 test2 Domain Users 8 Apr 26 23:12 dovecot-uidvalidity
-rw------- 1 test2 Domain Users 0 Apr 26 23:12 dovecot-uidvalidity.4bd61dd5
-rw------- 1 test2 Domain Users 156 Apr 26 23:12 dovecot.index.log
drwx------ 2 test2 Domain Users 512 Apr 26 23:12 new
drwx------ 2 test2 Domain Users 512 Apr 26 23:12 tmp

Como pueden ver todo funciono a la perfeccion, dovecot creo el folder Maildir para el usuario, vamos revisando el log, esto es importantisimo, por que yo a todos mis servidores les habilito el "debug" aqui no es la excepcion, asi que cuando todo este ya listo para entrar a produccion, o le bajan a el nivel de debug o lo deshabilitan, aunque esto ultimo no lo recomiendo, y mas por el tipo de servicio que esta proporcionando.

cat /var/log/dovecot.log

Apr 26 23:10:19 auth(default): Info: new auth connection: pid=49554
Apr 26 23:11:17 auth(default): Info: client in: AUTH 1 PLAIN service=imap secured lip=192.168.49.2 rip=192.168.49.2 lport=143 rport=20712 resp=AHRlc3QyADEyMw==
Apr 26 23:11:17 auth-worker(default): Info: pam(test2,192.168.49.2): lookup service=imap
Apr 26 23:11:17 auth-worker(default): Info: pam(test2,192.168.49.2): #1/1 style=1 msg=Password:
Apr 26 23:11:17 auth(default): Info: client out: OK 1 user=test2
Apr 26 23:11:17 auth(default): Info: master in: REQUEST 3 49015 1
Apr 26 23:11:17 auth-worker(default): Info: passwd(test2,192.168.49.2): lookup
Apr 26 23:11:17 auth(default): Info: master out: USER 3 test2 system_groups_user=test2 uid=1003 gid=513 home=/home/test2
Apr 26 23:11:17 imap-login: Info: Login: user=, method=PLAIN, rip=192.168.49.2, lip=192.168.49.2, secured
Apr 26 23:11:17 IMAP(test2): Info: Effective uid=1003, gid=513, home=/home/test2
Apr 26 23:11:17 IMAP(test2): Info: Namespace: type=private, prefix=INBOX., sep=., inbox=yes, hidden=no, list=yes, subscriptions=yes
Apr 26 23:11:17 IMAP(test2): Info: maildir: data=~/Maildir
Apr 26 23:11:17 IMAP(test2): Info: maildir++: root=/home/test2/Maildir, index=, control=, inbox=/home/test2/Maildir
Apr 26 23:12:21 IMAP(test2): Info: Namespace INBOX.: Permission lookup failed from /home/test2/Maildir
Apr 26 23:12:21 IMAP(test2): Info: Namespace INBOX.: Using permissions from /home/test2/Maildir: mode=0700 gid=-1
Apr 26 23:12:36 IMAP(test2): Info: Connection closed bytes=16/595

Listo, ya podemos configurar algun cliente de correo y accesar a nuestros correos, lo que sigue es configurar postfix.

Postfix
Ya sigue configurar postfix para ahora si poder enviar/recibir correos. Postfix es de los programa que ya por default viene listo para usarse, pero vamos a hacerle unas pequeñas modificaciones para adapatarlo a nuestra red, muy minimas, asi que vamos empezando.

1; Instalar Postfix: Estos son los parametros que yo uso cuando los instalo de los ports.

[X] PCRE Perl Compatible Regular Expressions
[X] TLS Enable SSL and TLS support
[X] MYSQL MySQL maps (choose version with WITH_MYSQL_VER)
[X] NIS NIS maps lookups
[X] VDA VDA (Virtual Delivery Agent 32Bit)
[X] INST_BASE Install into /usr and /etc/postfix

El ultimo parametro lo que hace es poner los archivos de configuracion en "/etc", ya ven que por default FreeBSD los pone en /usr/local/etc/, pero no importa ustedes pueden si gustan deshabilitar ese parametro sin problemas.

2; Configurar archivo principal de postfix:

main.conf
postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/db/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = /usr/share/doc/postfix
inet_interfaces = $myhostname
local_recipient_maps = unix:passwd.byname $alias_maps
mail_owner = postfix
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = midominio.dyndns.org
myhostname = mail.midominio.dyndns.org
mynetworks = 192.168.49.0/24, 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix
relay_domains = $mydomain
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = maildrop
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_non_fqdn_sender reject_unknown_sender_domain reject_unknown_recipient_domain permit_mynetworks reject_unauth_destination reject_non_fqdn_hostname reject_invalid_hostname permit
unknown_local_recipient_reject_code = 550

Como es una archivo extenso, con el comando "postconf -n" muestro los parametros que estoy usando, asi que solo busquenlos y cambienlos a su necesidad.

Existen algunos archivo que necesitamos crear, los que estab marcados en bold, para ello necesitamos hacer lo siguiente:

a) crear archivo en la ruta indicada.
touch /etc/aliases
b) crear db tipo bdb
postmap hash:/etc/aliases

Aqui encontran un nuevo archivo de nombre aliases.db en /etc.

3; Agregar a postfix para que arranque a el reiniciar el servidor:

postfix_enable="YES"

NOTA: Lo ponemos arriba de dovecot.

4; Iniciamos el servicio:

/etc/rc.d/postfix start

En mi caso ya no uso la ruta de los ports si la del sistema /etc/rc.d/ por que yo le dije a postfix que se instalar ahi, si ustedes no hicieron esto deben poner la ruta default:

/usr/local/etc/rc.d/postfix start

5; Verificamos puertos abiertos:

sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
dovecot imap-login 17451 4 tcp4 192.168.49.2:143 *:*
postfix qmgr 1870 8 tcp4 192.168.49.2:26455 192.168.49.2:389
postfix pickup 1869 8 tcp4 192.168.49.2:43595 192.168.49.2:389
root master 1858 12 tcp4 192.168.49.2:25 *:*
root sshd 56266 3 tcp4 192.168.49.2:4576 189.220.35.217:1938
root sshd 56266 4 tcp4 192.168.49.2:63718 192.168.49.2:389
dovecot imap-login 49554 4 tcp4 192.168.49.2:143 *:*
dovecot imap-login 49016 4 tcp4 192.168.49.2:143 *:*
root dovecot-au 49013 5 tcp4 192.168.49.2:56388 192.168.49.2:389
root dovecot-au 49012 8 tcp4 192.168.49.2:11954 192.168.49.2:389
root dovecot 49011 7 tcp4 192.168.49.2:143 *:*
root smbd 88886 9 tcp4 192.168.49.2:34457 192.168.49.2:389
root smbd 88880 9 tcp4 192.168.49.2:34457 192.168.49.2:389
root nmbd 88873 9 udp4 192.168.49.2:137 *:*
root nmbd 88873 10 udp4 192.168.49.2:138 *:*
ldap slapd 88590 7 tcp4 192.168.49.2:389 *:*
ldap slapd 88590 11 tcp4 192.168.49.2:389 192.168.49.2:34457
ldap slapd 88590 16 tcp4 192.168.49.2:389 192.168.49.2:11954
ldap slapd 88590 20 tcp4 192.168.49.2:389 192.168.49.2:63718
ldap slapd 88590 24 tcp4 192.168.49.2:389 192.168.49.2:43595
ldap slapd 88590 28 tcp4 192.168.49.2:389 192.168.49.2:26455
ldap slapd 88590 29 tcp4 192.168.49.2:389 192.168.49.2:56388

Listo, ahora revisamos el log de postfix /var/log/maillog

Apr 27 07:05:03 mail postfix/qmgr[1870]: 1755829C805: from=, size=589, nrcpt=1 (queue active)
Apr 27 07:05:03 mail postfix/pickup[1869]: 2198D29C806: uid=0 from=
Apr 27 07:05:03 mail postfix/cleanup[1890]: 2198D29C806: message-id=<20100427070503.2198d29c806@mail.midominio.dyndns.org>
Apr 27 07:05:03 mail postfix/local[1943]: 1755829C805: to=, orig_to=, relay=local, delay=7500, delays=7500/0.02/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Apr 27 07:05:03 mail postfix/qmgr[1870]: 1755829C805: removed
Apr 27 07:05:03 mail postfix/qmgr[1870]: 2198D29C806: from=, size=589, nrcpt=1 (queue active)
Apr 27 07:05:03 mail postfix/pickup[1869]: 2B59A29C807: uid=0 from=
Apr 27 07:05:03 mail postfix/cleanup[1998]: 2B59A29C807: message-id=<20100427070503.2b59a29c807@mail.midominio.dyndns.org>
Apr 27 07:05:03 mail postfix/local[1999]: 2198D29C806: to=, orig_to=, relay=local, delay=3896, delays=3896/0/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Apr 27 07:05:03 mail postfix/qmgr[1870]: 2198D29C806: removed
Apr 27 07:05:03 mail postfix/qmgr[1870]: 2B59A29C807: from=, size=589, nrcpt=1 (queue active)
Apr 27 07:05:03 mail postfix/local[1943]: 2B59A29C807: to=, orig_to=, relay=local, delay=299, delays=299/0/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Apr 27 07:05:03 mail postfix/qmgr[1870]: 2B59A29C807: removed

Como podran ver, por ahi teniamos correos en cola, como ya esta operando un smtp en el sistema, FreeBSD automaticamente lo empieza a utilizar, perece que todo esta operando correctamente.

6; Probando postfix desde otro equipo:

Telnet es un programa inseguro pero dentro de la red es un gran aliado para probar los programas, aqui vuelve a entrar en accion:

%telnet mail 25
Trying 192.168.49.2...
Connected to mail.midominio.dyndns.org.
Escape character is '^]'.
220 mail.midominio.dyndns.org ESMTP Postfix
helo mail.midominio.dyndns.org
250 mail.midominio.dyndns.org
mail from: test1@midominio.dyndns.org
250 2.1.0 Ok
rcpt to:test2@midominio.dyndns.org
250 2.1.5 Ok
data
354 End data with .
Hola.
.
250 2.0.0 Ok: queued as EDEA929B3E6
quit
221 2.0.0 Bye
Connection closed by foreign host.

Que bien todo trabajo sin problemas.

Lo que sigue es mailgraph para ver estadisticas en correos.

Mailgraph

NOTA: Ya deben tener a apache + php operando sin problemas.

Bien ya estamos recibiendo correos, ahora lo que sigue es ver cuantos recibimos, rechazamos etc.
Para ello necesitamos instalar mailgraph.

1; Instalar mailgraph

cd /usr/ports/mail/mailgraph
make install clean

2; Agregarlo para que arranque el reiniciar el servidor:

Para esto ya saben debemos agregar este parametro a /etc/rc.conf

mailgraph_enable="YES"

3; Mover el archivo de nombre mailgraph.cgi hacia /usr/local/www/apache22/cgi-bin

Lo buscan find /usr/local/www -name mailgraph.cgi -print

4; Agregar la bandera de ejecutable a el archivo mailgraph.cgi.

chmod +x mailgraph.cgi

5; Cambiar permiso a el archivo /var/log/maillog

chmod 664 /var/log/maillog

6; Iniciar el servicio.

/usr/local/etc/rc.d/mailgraph start

7; Probar desde el navegador.

http://midimonio.dyndns.org/cgi-bin/mailgraph.cgi

Vacation on squirrelmail

Tenemos un vacation ya en los ports:

mail/vacation

Necesitamos ftp/php5-ldap.










lunes, 15 de marzo de 2010

FreeBSD 8: dovecot postfix spamassassin

Error a el momento de instalar maia:

===> Compressing manual pages for p5-Mail-DomainKeys-1.0
===> Registering installation for p5-Mail-DomainKeys-1.0
===> Returning to build of maia-1.0.2a_3
===> maia-1.0.2a_3 depends on file: /usr/local/lib/perl5/site_perl/5.10.1/Mail /SPF/Query.pm - not found
===> Verifying install for /usr/local/lib/perl5/site_perl/5.10.1/Mail/SPF/Que ry.pm in /usr/ports/mail/p5-Mail-SPF-Query

===> p5-Mail-SPF-Query-1.999.1 conflicts with installed package(s):
p5-Mail-SPF-2.007

They install files into the same place.
Please remove them first with pkg_delete(1).
*** Error code 1

Stop in /usr/ports/mail/p5-Mail-SPF-Query.
*** Error code 1

Stop in /usr/ports/security/maia.
*** Error code 1

Stop in /usr/ports/security/maia.

sábado, 6 de marzo de 2010

FreeBSD 7/8: Firewall con pf

Hola, vamos aqui poniendo lo relacionado a pf, para iniciar como puedo ver los numeros de mis reglas, por que cuando me bloquean me dice que regla fue pero no se cual es:

pfctl -vvs rules | grep @

Gracias a: https://calomel.org/pf_config.html

FreeBSD 8: Configurando ssh con llaves publicas

ssh tiene muchas opciones para hacerlo aun mas seguro, cuando tienes abierto el puerto atraves de tu firewall y lo tienes configurado por default, esta abierta la opcion: usuario+passwd.

Esto hace que en los logs de tu firewall aparezcan varios intentos de acceso tratando con diccionarios y esto le quita CPU a tu firewall como servidor.

Por ello es mas conveniente crear tu llaves y autentificarse con ellas, asi ya puedes deshabilitar el usuario+password.

Para ello tienes que tener configurado el sshd_config asi:

# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
# $FreeBSD: src/crypto/openssh/sshd_config,v 1.49.2.1.2.1 2009/10/25 01:1

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.

# Note that some of FreeBSD's defaults differ from OpenBSD's, and
# FreeBSD has a few additional options.

#VersionAddendum FreeBSD-20090522

#Port 22
#Protocol 2
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# Change to yes to enable built-in password authentication.
PasswordAuthentication no
PermitEmptyPasswords no

# Change to no to disable PAM authentication
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'no' to disable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem sftp /usr/libexec/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server

#2010-03-04
AllowUsers root@192.168.50.120 root@192.168.50.100 root@192.168.50.3

La ultima linea marcado en bold, no viene en la configuracion original, con esto aun puedes darle mas seguridad a tu ssh, por que aqui solo le estas permitiendo a el usuario root poder accesar pero solo de las ip's ahi indicadas y puedes tambien hacerlo de la forma:

root@example.com

Si tienes un dns funcional.

Todo lo marcado en bold es lo que hago para tener un ssh mas seguro. Linux por default tiene habilitado el usuario root pero en FreeBSD no, es a veces un poco incomodo tener que estar haciendo el su o usar el sudo por ello yo prefiero tener el root abierto.

En el sistema donde estoy haciendo esto, necesito darle las llaves de los clientes que tienen permitido accesar.

Esos clientes tienen que tener ya listas sus llaves publicas, si no las tienen solo ejecutan este comando en cada uno de ellos(hablando de Linux/Unix):

ssh-keygen

Si gustan le dan una frase, pero luego se las va a estar solicitando, aqui solo denle enter hasta que termine la operacion, luego ya vamos a tener tiempo para investigar mas este parte.

Su sistema les va a poner las llevas en el home del usuario con el que las generaron, si fue root en /root/.ssh/

1; id_rsa
2; id_rsa.pub

2) es la llave publica la otra es la llave privada, esa se queda en su cliente a nadie se la tienen que dar, es su seguro.

En windows pueden hacer todo bajando el paquete completo de putty, ahi viene un modulo que se llama: PuTTYgen con el hacen todo graficamente.

Bien de lado del equipo que deseamos accesar debemos darle las llaves, estas se guardan en la misma ruta donde se guardan las llaves de cada usuario, en el archivo de nombre:

authorized_keys

es un archivo de texto, aqui vas las llaves asi:

ssh-rsa
7asdf87sdaf978dsa90f7s9da0f790ds7fdsaf980dsfn9sd87f09sd809sad8a78d709s7f9asd7f09sad7f9IUU=(=)(=)(JMN=(=)(=)MN==?=
%%$·"%khbyiubyUYBIUYyiy&786IUbuiinOYT0= pepito@example.com

es mi llave publica, es un listado grande que debe de ir en una sola linea de este archivo, aqui podemos poner cuantas llaves quieran, cada una es para cada usuario.

Y con esto listo, solo arrancamos el servicio y prueban.

/etc/rc.d/ssh start

Abren su cliente ssh y adentro, saludos!!!

miércoles, 3 de marzo de 2010

FreeBSD 8: Crear Jails.

Bien he estado viendo esto de las jails, que bonitas son, es una forma de virtualizar nativa. El handbook esta muy claro, nomas deseo aqui plasmar ciertas cosas que me ha sucedido.

Si por alguna razon ya que tenemos nuestro buildworld listo, y deseamos llevar a cabo el paso donde lo mandamos a el directorio de nuestro jail por ejemplo:

make installworld DESTDIR=$D

Pero si nuestro /tmp lo tenemos montado por seguridad con el parametro noexec, el comando anterior no funcionara y saldra con error.

Este es mi src.conf, quiero optmizarlo a el maximo para mis jails:

WITHOUT_APM="yes"
WITHOUT_ATM="yes"
WITHOUT_ASSERT_DEBUG="yes"
WITHOUT_AT="yes"
WITHOUT_AUTHPF="yes"
WITHOUT_BIND="yes"
WITHOUT_BLUETOOTH="yes"
WITHOUT_BOOT="yes"
WITHOUT_CALENDAR="yes"
WITHOUT_CDDL="yes"
WITHOUT_CVS="yes"
WITHOUT_DICT="yes"
WITHOUT_EXAMPLES="yes"
WITHOUT_FLOPPY="yes"
WITHOUT_FREEBSD_UPDATE="yes"
WITHOUT_GAMES="yes"
WITHOUT_GPIB="yes"
WITHOUT_GSSAPI="yes"
WITHOUT_INET6="yes"
WITHOUT_HTML="yes"
WITHOUT_IPFILTER="yes"
WITHOUT_IPFW="yes"
WITHOUT_IPX="yes"
WITHOUT_JAIL="yes"
WITHOUT_KERBEROS="yes"
WITHOUT_KVM="yes"
WITHOUT_LPR="yes"
WITHOUT_MAILWRAPPER="yes"
WITHOUT_MAN="yes"
WITHOUT_NDIS="yes"
WITHOUT_NIS="yes"
WITHOUT_PF="yes"
WITHOUT_PPP="yes"
WITHOUT_PMC="yes"
WITHOUT_PROFILE="yes"
WITHOUT_QUOTAS="yes"
WITHOUT_RCMDS="yes"
WITHOUT_RCS="yes"
WITHOUT_SENDMAIL="yes"
WITHOUT_SHAREDOCS="yes"
WITHOUT_SYSCONS="yes"
WITHOUT_SYSINSTALL="yes"
WITHOUT_TELNET="yes"
WITHOUT_USB="yes"
WITHOUT_WIRELESS="yes"
WITHOUT_WPA_SUPPLICANT_EAPOL="yes"

Hay muchas cosas aqui que se que no me sirven e investigando al respecto(googleando) de las que desconozco he llegado a este archivo, varios buildworld tronados, pero al fin tengo mi arhivo final.

Cuando estaba haciendo el buildworld, salio un error, desgraciadamente no alcance a plasmarlo aqui, pero este linea del src.conf me estaba causando el problema:

WITHOUT_INSTALLLIB="yes"

Enseguida me salio este otro error:

Error 2:===> usr.sbin/ifmcstat (all)

cc -O2 -pipe -DINET6 -DNDEBUG -std=gnu99 -fstack-protector -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -c /usr/src/usr.sbin/ifmcstat/ifmcstat.c
/usr/src/usr.sbin/ifmcstat/ifmcstat.c:170: warning: 'in6_ifinfo' used but never defined
cc -O2 -pipe -DINET6 -DNDEBUG -std=gnu99 -fstack-protector -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -c /usr/src/usr.sbin/ifmcstat/printb.c
cc -O2 -pipe -DINET6 -DNDEBUG -std=gnu99 -fstack-protector -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -o ifmcstat ifmcstat.o printb.o
ifmcstat.o(.text+0xb96): In function `main':
: undefined reference to `in6_ifinfo'
*** Error code 1

Stop in /usr/src/usr.sbin/ifmcstat.
*** Error code 1

Mismo error, aqui solo quitamos el WITHOUT_NCP=yes, vamos a regresarlo, necesitamos saber cual esta causando esto...

Stop in /usr/src/usr.sbin.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

Ya habia tenido este error antes, y no supe quien lo causo, pero ya por fin mi buildworld funciono y tengo mis jails listas.

Aun estoy esperando que alguien del foro de freebsd, vean my src.conf y comenten al respecto para ver si esta correcto, si puedo aun eliminar mas cosas y agregar algunas, si estoy siendo muy estricto con el, etc. En fin lo que necesito es el src.conf para todas mis jails.

Archivos en comun

Ahora vamos a ver tenemos un host y sus jails, las jails tiene la siguiente funcion:

jail1 --> apache+mysql
jail2 --> bind
jail3 -->spam
jail4 -->mail

El hosts tiene su archivo rc.conf para cada jail asi:

##############################################################
### Jail Configuration #######################################
##############################################################
jail_enable="YES" # Set to NO to disable starting of any jails
jail_list="jail1 jail2 jail3" # Space separated list of names of jails
jail1_set_hostname_allow="NO" # Allow root user in a jail to change its hostname
jail2_set_hostname_allow="NO"
jail3_set_hostname_allow="NO"
##############################################################
############### JAIL1 ######################
##############################################################
jail_jail1_rootdir="/jails/jail1" # Jail's root directory
jail_jail1_hostname="apache.example.com" # Jail's hostname
jail_jail1_interface="fxp0" # Jail's interface variable to c
jail_jail1_ip="192.168.50.2" # Jail's primary IPv4 and IPv6 a
jail_jail1_devfs_enable="YES" # mount devfs in the jail
jail1_sysvipc_allow="NO"
##############################################################
############### JAIL2 ######################
##############################################################
jail_jail2_rootdir="/jails/jail2" # Jail's root directory
jail_jail2_hostname="dns.example.com" # Jail's hostname
jail_jail2_interface="fxp0" # Jail's interface variable to c
jail_jail2_ip="192.168.50.3" # Jail's primary IPv4 and IPv6 a
jail_jail2_devfs_enable="YES" # mount devfs in the jail
jail2_sysvipc_allow="NO"
##############################################################
############### JAIL3 ######################
##############################################################
jail_jail3_rootdir="/jails/jails3" # Jail's root directory
jail_jail3_hostname="spam.example.com" # Jail's hostname
jail_jail3_interface="fxp0" # Jail's interface variable to c
jail_jail3_ip="192.168.50.4" # Jail's primary IPv4 and IPv6 a
jail_jail3_devfs_enable="YES" # mount devfs in the jail
jail3_sysvipc_allow="NO"

Con esto arrancan mis jails al reiniciar el equipo.

Bien ahora que archivos tienen en comun los jails:
rc.conf
hosts
resolv.conf
ports-supfile

rc.conf:

##############################################################
### Important initial Boot-time options ####################
##############################################################

cleanvar_enable="YES" # Clean the /var directory
root_rw_mount="YES" # Set to NO to inhibit remounting root read-write.
fsck_y_enable="YES" # Set to YES to do fsck -y if the initial preen fails.
fsck_y_flags="" # Additional flags for fsck -y
background_fsck="NO" # Attempt to run fsck in the background where possible
##############################################################
### Network configuration sub-section ######################
##############################################################
### Basic network and firewall/security options: ###
hostname="spam.example.com"
hostid_enable="YES" # Set host UUID.
hostid_file="/etc/hostid" # File with hostuuid.
icmp_log_redirect="NO" # Set to YES to log ICMP REDIRECT packets
network_interfaces="lo fxp0" # List of network interfaces (or "auto").
ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration.
ifconfig_fxp0="inet 192.168.50.4 netmask 255.255.255.0"
inetd_enable="NO"

### Network daemon (miscellaneous) ###
syslogd_enable="YES" # Run syslog daemon (or NO).
syslogd_program="/usr/sbin/syslogd" # path to syslogd, if you want a different
syslogd_flags="-ss" # Flags to syslogd (if enabled).
# kerberos. Do not run the admin daemons on slave servers
#
kerberos5_server_enable="NO" # Run a kerberos 5 master server (or NO).

### Network daemon (NFS): All need rpcbind_enable="YES" ###
amd_enable="NO" # Run amd service with $amd_flags (or NO).

### SNMP daemon ###
# Be sure to understand the security implications of running SNMP v1/v2
# in your network.
bsnmpd_enable="NO" # Run the SNMP daemon (or NO).
bsnmpd_flags="" # Flags for bsnmpd.

### Network routing options: ###
defaultrouter="192.168.50.1" # Set to default gateway (or NO).

### Miscellaneous network options: ###
icmp_bmcastecho="NO" # respond to broadcast ping packets

### IPv6 options: ###
ipv6_enable="NO" # Set to YES to set up for IPv6.

##############################################################
### System console options #################################
##############################################################

keyboard="" # keyboard device to use (default /dev/kbd0).
keymap="NO" # keymap in /usr/share/syscons/keymaps/* (or NO).
keyrate="fast" # keyboard rate to: slow, normal, fast (or NO).
keybell="NO" # See kbdcontrol(1) for options. Use "off" to disable.
keychange="NO" # function keys default values (or NO).
cursor="destructive" # cursor type {normal|blink|destructive} (or NO
scrnmap="NO" # screen map in /usr/share/syscons/scrnmaps/* (or NO).
blanktime="NO" # blank time (in seconds) or "NO" to turn it off.
saver="NO" # screen saver: Uses /boot/kernel/${saver}_saver.ko
moused_enable="NO" # Run the mouse daemon.

##############################################################
### Mail Transfer Agent (MTA) options ######################
##############################################################

mta_start_script="/etc/rc.sendmail"
# Script to start your chosen MTA, called by /etc/rc.
# Settings for /etc/rc.sendmail and /etc/rc.d/sendmail:
sendmail_enable="NONE" # Run the sendmail inbound daemon (YES/NO).

##############################################################
### Miscellaneous administrative options ###################
##############################################################

auditd_enable="NO" # Run the audit daemon.
auditd_program="/usr/sbin/auditd" # Path to the audit daemon.
auditd_flags="" # Which options to pass to the audit daemon.
cron_enable="YES" # Run the periodic job daemon.
cron_program="/usr/sbin/cron" # Which cron executable to run (if enabled).
cron_dst="YES" # Handle DST transitions intelligently (YES/NO)
cron_flags="" # Which options to pass to the cron daemon.
quota_enable="NO" # turn on quotas on startup (or NO).
check_quotas="NO" # Check quotas on startup (or NO).
quotaon_flags="-a" # Turn quotas on for all file systems (if enabled)
quotaoff_flags="-a" # Turn quotas off for all file systems at shutdown
quotacheck_flags="-a" # Check all file system quotas (if enabled)

# Emulation/compatibility services provided by /etc/rc.d/abi
kern_securelevel_enable="NO" # kernel security level (see security(7))
kern_securelevel="-1" # range: -1..3 ; `-1' is the most insecure
update_motd="NO" # update version info in /etc/motd (or NO)
dmesg_enable="NO" # Save dmesg(8) to /var/run/dmesg.boot
newsyslog_enable="YES" # Run newsyslog at startup.
newsyslog_flags="-CN" # Newsyslog flags to create marked files
mixer_enable="NO" # Run the sound mixer.
sshd_enable="YES" # Enable sshd
sshd_program="/usr/sbin/sshd" # path to sshd, if you want a different one.
sshd_flags="-4" # Additional flags for sshd.
rcpbind_enable="NO"
clear_tmp_enable="YES"

Marque en negritas las partes que cambian de jail a jail lo demas todo por default, la unica manera de accesar a las jails es por el mismo host o via ssh.

hosts:
aqui ya saben que tiene que llevar correcto?
resolv.conf:
nuestro dns
ports-supfile:
datos para actualizar los ports.

Paquetes Necesarios

Que paquetes necesito yo en mis jails:

screeen
cvsup-without-gui
portupgrade

Son los necesito como minimo para cada jail.

Archivo de Host

Aqui tengo el archivo que uso para el hosts, si lo observan ahi opciones que se deseo tenga el hosts, como PF, ZFS, entre ellas.

Este es:

WITHOUT_APM="yes"
WITHOUT_ATM="yes"
WITHOUT_ASSERT_DEBUG="yes"
WITHOUT_AT="yes"
WITHOUT_BIND="yes"
WITHOUT_BLUETOOTH="yes"
WITHOUT_BOOT="yes"
WITHOUT_CALENDAR="yes"
WITHOUT_CVS="yes"
WITHOUT_DICT="yes"
WITHOUT_EXAMPLES="yes"
WITHOUT_FLOPPY="yes"
WITHOUT_FREEBSD_UPDATE="yes"
WITHOUT_GAMES="yes"
WITHOUT_GPIB="yes"
WITHOUT_GSSAPI="yes"
WITHOUT_INET6="yes"
WITHOUT_HTML="yes"
WITHOUT_IPFILTER="yes"
WITHOUT_IPFW="yes"
WITHOUT_IPX="yes"
WITHOUT_KERBEROS="yes"
WITHOUT_KVM="yes"
WITHOUT_LPR="yes"
WITHOUT_MAILWRAPPER="yes"
WITHOUT_MAN="yes"
WITHOUT_NDIS="yes"
WITHOUT_NIS="yes"
WITHOUT_PPP="yes"
WITHOUT_PMC="yes"
WITHOUT_PROFILE="yes"
WITHOUT_QUOTAS="yes"
WITHOUT_RCMDS="yes"
WITHOUT_RCS="yes"
WITHOUT_SENDMAIL="yes"
WITHOUT_SHAREDOCS="yes"
WITHOUT_SYSCONS="yes"
WITHOUT_SYSINSTALL="yes"
WITHOUT_TELNET="yes"
WITHOUT_WIRELESS="yes"
WITHOUT_WPA_SUPPLICANT_EAPOL="yes"

Con este quiero trabajar.

martes, 9 de febrero de 2010

Freebsd 7/8: src.conf

Estas son:

WITHOUT_ACPI
WITHOUT_ASSERT_DEBUG
WITHOUT_ATM
WITHOUT_AUDIT
WITHOUT_AUTHPF
WITHOUT_BIND
WITHOUT_BIND_DNSSEC
WITHOUT_BIND_ETC
WITHOUT_BIND_LIBS_LWRES
WITHOUT_BIND_MTREE
WITHOUT_BIND_NAMED
WITHOUT_BIND_UTILS
WITHOUT_BLUETOOTH
WITHOUT_BOOT
WITHOUT_BZIP2
WITHOUT_BZIP2_SUPPORT
WITHOUT_BZIP2_SUPPORT
WITHOUT_CALENDAR
WITHOUT_CDDL
WITHOUT_ZFS
WITHOUT_CPP
WITHOUT_CRYPT
WITHOUT_CVS
WITHOUT_CXX
WITHOUT_DICT
WITHOUT_DYNAMICROOT
WITHOUT_EXAMPLES
WITHOUT_FORTH
WITHOUT_FP_LIBC
WITHOUT_GAMES
WITHOUT_GCOV
WITHOUT_GDB
WITHOUT_GNU
WITHOUT_GNU_SUPPORT
WITHOUT_GPIB
WITHOUT_GROFF
WITHOUT_GSSAPI
WITH_HESIOD
WITHOUT_HTML
WITHOUT_I4B
WITH_IDEA
WITHOUT_INFO
WITHOUT_INSTALLLIB
WITHOUT_IPFILTER
WITHOUT_IPX
WITHOUT_KERBEROS
WITHOUT_KERBEROS_SUPPORT
WITHOUT_KVM
WITHOUT_LIB32
WITHOUT_LIBKSE
WITHOUT_LIBPTHREAD
WITHOUT_LPR
WITHOUT_MAILWRAPPER
WITHOUT_MAN
WITHOUT_NCP
WITHOUT_NETCAT
WITHOUT_NIS
WITHOUT_NLS
WITHOUT_NLS_CATALOGS
WITHOUT_NS_CACHING
WITHOUT_OBJC
WITHOUT_OPENSSH
WITHOUT_OPENSSL
WITHOUT_PF
WITHOUT_PROFILE
WITHOUT_RCMDS
WITHOUT_RCS
WITHOUT_RESCUE
WITHOUT_SENDMAIL
WITHOUT_SETUID_LOGIN
WITHOUT_SHAREDOCS
WITHOUT_SSP
WITHOUT_SYMVER
WITHOUT_SYSCONS
WITHOUT_TCSH
WITHOUT_TOOLCHAIN
WITHOUT_USB
WITHOUT_WPA_SUPPLICANT_EAPOL
WITHOUT_ZFS

lunes, 25 de enero de 2010

Freebsd 7/8: Deshabilitar log-bin en mysql 5.1.

Si no estamos ejecutando mysql en modo cluster, estos logs empiezan a llenar nuestro disco sin darnos cuenta, ademas que quitan preciado CPU.

Me ha tocado ver estos logs de mas 1GB x archivo. Pero podemos deshabilitarlos, para ello debemos abri nuestro archivo my.cnf y comentar estos 2 parametros:

# Replication Master Server (default)
# binary logging is required for replication
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

Ya hecho esto, reiniciamos el servidor mysql y listo no mas logeara esto, saludos!!!