Monthly Archives: September 2010

Preparando LPIC-1 Tema 104 Dispositivos, Sistemas de archivos Linux, Estándar de jerarquía del Sistemas de Archivos

*.Aqui vamos a desarrollar el topico 104 por cada objetivo.*

104.1 Crear particiones y sistemas de archivos (EN CONSTRUCCION) 
 104.2 Mantener la integridad de los sistemas de archivos (EN CONSTRUCCION) 
 104.3 Controlar el montaje y desmontaje de sistemas de archivos  (EN CONSTRUCCION) 
104.4 Administrar cuotas de disco
104.5 Administrar propietarios y permisos de archivos (EN CONSTRUCCION) 
104.6 Crear y cambiar enlaces duros y simbolicos (EN CONSTRUCCION)
104.7 Encontrar archivos de sistema y colocar archivos en su correcta ubicación 

Preparando LPIC-1 104.4 Administrar cuotas de disco

*.En este topico vamos a ver que es una cuota de disco.*

Para poder controlar el uso del espacio del disco tenemos lo que se llaman “quotas” en donde vamos a limitar el uso teniendo cada usuario o grupo su porcion de espacio para utilizar.
La administracion la vamos a realizar con determinados comandos que iremos viendo. Algunos de los archivos que vamos a tocar y otros que usa , /etc/fstab, /etc/passwd,/etc/group.
Si no tenemos instalados los paquetes hay que instalarlos (quota,quotatools) en un debian based.

Limites de Cuotas:

Algunos conceptos a tener en cuenta:

Per-user hard limit:
Se establece el limite mayor por el cual el usuario ya no puede escribir mas en el disco.Cuando supera este limite ya no puede escribir mas.

Per-user soft limit:
Es una zona de alarma que mientras este limite es superado vamos a recibir alertas de que estamos por llegar al hard limit. Se tienen que tomar medidas para empezar a liberar espacio.

Per-group hard limit:
El mismo concepto que para el usuario pero este es para el grupo.


Per-group soft limit:

El mismo concepto que para el usuario pero este es para el grupo.

Grace period:

Es un periodo de gracia en donde se nos da un tiempo una vez que entramos en el periodo soft limit pero cuando este periodo expira ya entrariamos en el periodo hard limit. El periodo de gracia por lo general es de 7 dias.

Vamos a habilitar las cuotas, pero para eso antes vamos a formatear dos discos.

Veamos que tengo dos discos sin usar sdb y sdc

[root@localhost ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Disk /dev/sdb doesn’t contain a valid partition table

Disk /dev/sdc: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Disk /dev/sdc doesn’t contain a valid partition table
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-102, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-102, default 102): w
Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):
Using default value 102

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-102, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):
Using default value 102

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#

Ahora vamos a formatearlo como ext3

[root@localhost ~]# mkfs.ext3 -L home /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=home
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
26208 inodes, 104432 blocks
5221 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
2016 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mkfs.ext3 -L share /dev/sdc1
mke2fs 1.39 (29-May-2006)
Filesystem label=share
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
26208 inodes, 104432 blocks
5221 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
2016 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]#

Y quedo asi..
Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 102 104432 83 Linux

Disk /dev/sdc: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 102 104432 83 Linux
[root@localhost ~]#

Ahora editamos /etc/fstab para poder usarlo las nuevas particiones con quotas

[root@localhost ~]# vi /etc/fstab
Fijense esas son las dos lineas que agregamos.
[root@localhost ~]# tail -n 2 /etc/fstab
LABEL=share /mnt/share ext3 defaults,usrquota,grpquota 1 2
LABEL=home /home ext3 defaults,usrquota,grpquota 1 2

Aca es importante agregar lo que esta en negrita dado que es lo que me permite que use quotas
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# mount /home
[root@localhost ~]# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 99M 5.6M 89M 6% /home
[root@localhost ~]#

Agregamos un par de usuarios al sistema y sus passwords.
[root@localhost ~]# adduser pepe
[root@localhost ~]# adduser juan
[root@localhost ~]# adduser pedro
[root@localhost ~]# adduser maria
[root@localhost ~]# passwd pepe
Changing password for user pepe.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd juan
Changing password for user juan.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd pedro
Changing password for user pedro.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd maria
Changing password for user maria.
New UNIX password:
BAD PASSWORD: it does not contain enough DIFFERENT characters
Retype new UNIX password:
Sorry, passwords do not match.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#

Fijense que maria ya tiene su home en el nuevo home
[root@localhost ~]# su – maria
[maria@localhost ~]$ df -k .
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 101117 5682 90214 6% /home
[maria@localhost ~]$


Ahora nos queda por crear unos archivos en los directorios que queremos usar quotas.

[root@localhost ~]# touch /home/quota.user /home/quota.group
[root@localhost ~]# chmod 600 /home/quota.user /home/quota.group

Luego nos fijamos si esta bien montado:
[root@localhost ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /home type ext3 (rw,usrquota,grpquota)
[root@localhost ~]#

Vemos que tiene las opciones para cuota de discos.

Ahora si corremos el comando quotacheck para inicializar la base de datos de nuestra cuota que definimos cuando creamos arriba los archivos.


[root@localhost ~]# quotacheck -auvg
quotacheck: Scanning /dev/sdb1 [/home] done
quotacheck: Checked 7 directories and 19 files
[root@localhost ~]# 


Luego hacemos un quotaon -a para que active todas las cuotas.

[root@localhost share]# quotaon -av
/dev/sdb1 [/home]: group quotas turned on
/dev/sdb1 [/home]: user quotas turned on
[root@localhost share]# 

Ahora podriamos agregar un grupo sistemas y agregar a el a todos los usuarios.

[root@localhost ~]# groupadd sistemas
[root@localhost ~]# usermod -G sistemas pepe
[root@localhost ~]# usermod -G sistemas juan
[root@localhost ~]# usermod -G sistemas pedro
[root@localhost ~]# usermod -G sistemas maria
[root@localhost ~]#

Seguidamente podemos chequear..


[root@localhost share]# repquota -av
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    5666       0       0              6     0     0       
pepe      --       8       0       0              4     0     0       
juan      --       8       0       0              4     0     0       
pedro     --       8       0       0              4     0     0       
maria     --      10       0       0              5     0     0       

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 5
Used average: 5.000000

[root@localhost share]#

Bueno hasta aca tenemos lo basico para habilitar las quotas ahora lo que sigue es ver todos los comandos que puedo usar para administrarlo.

Comandos:

edquota
Syntax

edquota [-p proto-user] [options] names

edquota [options] -t

Con este comandos vamos a editar el perfil de los usuarios o grupos para poder indicar su cuota y demas configuraciones.

Aca podriamos usarlo de diferentes maneras:

con edquota -ut -> cambiamos los periodos de gracia de los usuarios
con edquota -gt -> cambiamos los periodos de gracia de los grupos.
con edquota -u user -> cambiamos los limites hard y soft de cada usuario.

Sino podriamo usar este comando:
[root@localhost home]# setquota -g sistemas 5 100 6 10 -a /dev/sdb1
[root@localhost share]# setquota -u maria 100 200 10 15 -a /home/

soft limit –> 100
hard limit -> 200
soft inode -> 10
hard inode -> 15

Si luego hago edquota -a

Disk quotas for user maria (uid 503):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                        10        100        200          5       10       15
~                                                                                                                          
~      

Contiene los datos que puse anteriormente.

Fijense como el usuario maria supero su cuota de inodos:
maria@debian:/mnt/share$ touch gaas
sdc1: warning, user file quota exceeded.
–> supero el soft limit
maria@debian:/mnt/share$ touch gaa}asdasdasdasda
maria@debian:/mnt/share$ touch gaa}asdasdasdasdaa
maria@debian:/mnt/share$ touch gaa}asdasdasdasdaaaa
maria@debian:/mnt/share$ touch gaa}asdasdasdasdaaaaaa
sdc1: write failed, user file limit reached.
touch: cannot touch `gaa}asdasdasdasdaaaaaa’: Disk quota exceeded
maria@debian:/mnt/share$ touch gaa}asdasdasdasdaaaaaaa
touch: cannot touch `gaa}asdasdasdasdaaaaaaa’: Disk quota exceeded

Aca ya no puede escribir mas porque supero el hard limit.

Ahora vamos a ver el comando repquota

repquota [options] filesystems

repquota -a [options]

-a
muestra todas las cuotas activas

-g
solo muestra cuotas de los grupos
Report quotas for groups.

-u
Muestra las cuotas de los usuarios que le indiquen

-v
habilita el modo verbose para mostrar mas info

Con este comando vamos a poder ver como estan formadas las cuotas.

[root@localhost share]# repquota -a
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
———————————————————————-
root — 5666 0 0 6 0 0
pepe — 8 0 0 4 0 0
juan — 8 0 0 4 0 0
pedro — 8 0 0 4 0 0
maria — 10 100 200 5 10 15

[root@localhost share]#

Fijesen aca con el usuario pepe como supera su cuota de espacio.
pepe@debian:~$ dd if=/dev/zero of=pepe.iso bs=50MB count=2
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: writing `pepe.iso’: Disk quota exceeded
1+0 records in
0+0 records out
196608 bytes (197 kB) copied, 0.0668097 s, 2.9 MB/s
pepe@debian:~$ ls -lh pepe.iso
-rw-r–r– 1 pepe pepe 192K 2011-03-04 18:45 pepe.iso
pepe@debian:~$

[root@localhost home]# repquota -g /home
*** Report for group quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
———————————————————————-
root — 5651 0 0 2 0 0
sistemas ++ 49 5 100 6days 21 6 10 6days

[root@localhost home]#

Vamos aver el comando quotacheck que me sirve para chequear las cuotas.

quotacheck [options] filesystems

quotacheck [options] -a

Opciones:
-a para que controle todas las cuotas
-g para chequear solo de un grupo
-u para chequear solo de un usuario
-v habilita modo verboso para tener mas info
Esto que sigue es lo que no debian hacer dado que estamos chequeando una cuota que esta activa por eso use -f para que lo fuerze

[root@localhost share]# quotacheck -f -av 
quotacheck: Scanning /dev/sdb1 [/home] done
quotacheck: Checked 7 directories and 19 files
[root@localhost share]# 

Ahora la forma correcta:

[root@localhost share]# quotaoff -a
[root@localhost share]# quotacheck  -aguv 
quotacheck: Scanning /dev/sdb1 [/home] done
quotacheck: Checked 7 directories and 19 files
[root@localhost share]# quotaon -a
[root@localhost share]# 

Ahora dos comandos que van si o si.
quotaon y quotaoff
Creo que demas esta explicarlo para que sirven..
Sintaxis:
quotaon [options] [filesystems]

quotaon [options] -a

quotaoff [options] [filesystems]

quotaoff [options] -a

Ambos tienen las mismas opciones a,v,u,g que cumplen las mismas funciones que las anteriores.

El ultimo que nos queda para terminar los temas que se ven en lpic es el comando quota

quota [-u] [options] user

quota -g [options] group

[root@localhost home]# quota -uv maria
Disk quotas for user maria (uid 503): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1      10     100     200               5      10      15        
[root@localhost share]#
[root@localhost home]# quota -g sistemas
Disk quotas for group sistemas (gid 504): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1      49*      5     100   6days      21*      6      10        
[root@localhost home]# 

Bueno con esto ya estariamos.. el tema es mas complejo pero con esto es suficiente.

LABORATORIO TOPICO 104.4 (EN CONSTRUCCION)

Fuentes:
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch28_:_Managing_Disk_Usage_with_Quotas
http://souptonuts.sourceforge.net/quota_tutorial.html
http://tldp.org/HOWTO/Quota.html

Laboratorio Topico 103.4

*.Laboratorio Topico 103.4.*

1)Nombrar todos los tipos estandar de salida y entrada
2)Definir cada uno de los tipos estandar de salida y entrada
3)Dar un ejemplo de cada uno de ellos.
4)¿Para que sirve redireccionar?
5)Listar el contendio de etc y redireccionarlo hacia el home directory.
6)Listar nuevamente lo mismo pero que conserve la salida anterior.
7)Siendo un usuario normal de sistema hacer un ls recursivo a /etc redireccionando la salida de error y la estandar a un unico archivo.
8)Hacer lo mismo que el anterior pero que lo haga en archivos diferentes.
9)Realizar un ls desde nuestro home directory redireccinando la salida hacia salida.home.
10)Con ese archivo generado en el paso anterior y estando en nuestro home directory utilizar un ls -la pero pasandole como entrada estandar el archivo de salida anterior (salida.home)
11)Realizar un cat a /etc/passwd y buscar el usuario root con grep. (utilizar tuverias)
12)Realizar un ls, luego con esa salida un ls -la y como ultimo contar las lineas con wc -l
13) con los dos pasos anteriores utilizar el comando tee para obtener la salida de cada archivo en un archivo diferente.
14) Crear 10 archivos (abc1 a abc10)
15)Utilizar xargas para generar un script que borre los diez archivos creados.

SOLUCIONES TOPICO 103.4

Preparando LPIC-1 103.4 Usar flujos, tuberias y redirecciones

*. En este topico vamos a ver un par de cosas interesantes.*

Empezemos a ver un poco lo que significan estas siglas.

STIN (0)  -> Entrada  Estandar
STOUT (1) -> Salida Estandar
STERR (2) -> Salida Estandar de error

Para sacarse la duda miren que pasa si le anexamos el parametro -p

[rino@restauracion testing]$ ls | xargs -n 1 -p
/bin/echo ambos ?...
/bin/echo cinco ?...
/bin/echo cuatro ?...
...
...

Como ven entramos en modo interactivo y vemos que esta usando el echo como comando.

Estas ultimas dos van separadas para poder diferenciar una de la otra.

Para poder ver como funcionan vamos a realizar unos ejemplos.

Cuando nostros ejecutamos un comando este sale por la salida estandar que es el monitor:
ej:

[rino@restauracion scripts]$ ls
+                            educacionit              sakis3g
117-101.pdf                  file                     scritps
117-101.txt                  filescripts              ssh2
agregarurl                   filescripts~             test.html
automatic                    go~                      tunel.sh
AventailConnect-Linux64.tar  irssi_notify.sh          tunel.sh.bkp
AventailConnect-Linux.tar    jre-6u11-linux-i586.bin  url.sh
cutover                      logs                     vpn.sh
disops3                      rino.sh
[rino@restauracion scripts]$ 

Como ven sale todo en la pantalla, ahora si quiero enviar la salida hacia otro lado:

[rino@restauracion scripts]$ ls > salida
[rino@restauracion scripts]$ ls salida
salida
[rino@restauracion scripts]$ 

Si hacen un cat al archivo que se genera van a ver que tienen lo mismo que si hacen un ls dado que manda la salida hacia otro lado en este casa un archivo.
El signo > hace que se redireccione creando un archivo si exte no existe y si existe lo pone en blanco y deriva la salida hacia el.

Si utilizamos >> lo que hace es hacer un append entonces el archivo que ya existia ahora se le va agregar al final de este la salida que le pasemos.

[rino@restauracion scripts]$ ls >> salida
[rino@restauracion scripts]$ ls -la salida
-rw-rw-r-- 1 rino rino 580 Sep 27 21:38 salida
[rino@restauracion scripts]$ ls >> salida
[rino@restauracion scripts]$ ls -la salida
-rw-rw-r-- 1 rino rino 870 Sep 27 21:39 salida
[rino@restauracion scripts]$ 

Fijense que el archivo ahora crecio dado que corrimos dos veces el comando con >>, donde redireccionamos dos veces y el archivo crecio dado que se hizo un append.

*.Salida de error.*
Aca vamos a ver como redireccionamos la salida error con 2>

[rino@restauracion testing]$ ls -z
ls: invalid option -- z
Try `ls --help' for more information.
[rino@restauracion testing]$ ls -z 2> error
[rino@restauracion testing]$ cat error
ls: invalid option -- z
Try `ls --help' for more information.
[rino@restauracion testing]$ 

Como vemos el error lo envia al archivo, si usariamos >> lo agregaria al archivo existente.

Ahora si quisiera mandar las dos salidas juntas (error, salida estandar) a un archivo haria.

[rino@restauracion testing]$ grep hola *
grep: cinco: Permission denied
dos:hola
grep: ocho: Permission denied
grep: seis: Permission denied
grep: siete: Permission denied
uno:hola
[rino@restauracion testing]$ grep hola * > ambos 2>&1
[rino@restauracion testing]$ cat ambos
grep: cinco: Permission denied
dos:hola
grep: ocho: Permission denied
grep: seis: Permission denied
grep: siete: Permission denied
uno:hola
[rino@restauracion testing]$

Como vemos aca lo primero que hicimos fue buscar con grep algun archivo que contenga la palabra hola pero hay algunos archivos de los cuales no tenemos permisos y vemos errores, entonces lo que hicimos luego fue redireccionar ambas salidas a un archivo (ambos)

Ahora vamos a separarlo en dos archivos:

[rino@restauracion testing]$ grep hola * 1> salida 2> error
[rino@restauracion testing]$ cat salida
ambos:dos:hola
ambos:uno:hola
dos:hola
uno:hola
[rino@restauracion testing]$ cat error 
grep: cinco: Permission denied
grep: ocho: Permission denied
grep: seis: Permission denied
grep: siete: Permission denied
[rino@restauracion testing]$ 

*.Ahora nos quedaria ver el tema de usar la entrada estadar.*

Vamos a usar la entrada estar para pasarle a un comando lo que necesite para ejecutarse.

Primero mandamos todo a un archivo
[rino@restauracion testing]$ ls > testing

Luego vamos a usar esa salida para hacer un ls -la.

Aca vamos a pasarle por medio de la entra estandar el contenido del archivo (contiene los nombres de los archivos)
[rino@restauracion testing]$ ls -la < testing
total 40
drwxrwxr-x 2 rino rino 4096 Sep 28 21:20 .
drwxrwxr-x 5 rino rino 4096 Sep 28 21:06 ..
-rw-rw-r-- 1 rino rino  140 Sep 28 21:10 ambos
-rw------- 1 root root    5 Sep 28 21:10 cinco
-rw-rw-r-- 1 rino rino    0 Sep 28 21:06 cuatro
-rw-rw-r-- 1 rino rino    5 Sep 28 21:09 dos
-rw-rw-r-- 1 rino rino  122 Sep 28 21:12 error
-rw------- 1 root root    0 Sep 28 21:08 ocho
-rw-rw-r-- 1 rino rino   48 Sep 28 21:12 salida
-rw------- 1 root root    5 Sep 28 21:10 seis
-rw------- 1 root root    0 Sep 28 21:08 siete
-rw-rw-r-- 1 rino rino   69 Sep 28 21:20 testing
-rw-rw-r-- 1 rino rino    0 Sep 28 21:06 tres
-rw-rw-r-- 1 rino rino    5 Sep 28 21:09 uno
[rino@restauracion testing]$

*.Tuberias .*

Aca vamos a ver unos ejemplos de para que se usa.
Anteriormente vimos como podiamos hacer que las entradas se redirecciones hacia archivos tanto la salida como la entrada, ahora podriamos utilizar la tuberia para poder hacer que la salida de un programa sea la entrada del otro y asi es como atamos los programas para encadenarlos.

Vamos a ver un ejemplo:

[rino@restauracion testing]$ ls | wc -l
12
[rino@restauracion testing]$

Aca estamos listando el contenido del directorio en donde le pasamos la salida a la entrada estandar del comando wc -l que nos devuelve la cantidad de lineas encontradas.

Otro ejemplo:

[rino@restauracion testing]$ cat /etc/passwd| grep -i rino
rino:x:500:500::/home/rino:/bin/bash
[rino@restauracion testing]$ 

Un ultimo ejemplo ...

[rino@restauracion testing]$ cat /etc/samba/smb.conf | more
[global]
workgroup = MYWORKGROUP
netbios name = SERVERDEBIAN
server string = %h server (Samba, Ubuntu)
passdb backend = tdbsam
...
...
aca seguiria..

Entonces vimos como podemos anidar los procesos.. y retroalimentarlos.

La yapa:

[rino@restauracion testing]$ ls -l | awk '{print  "tamaño:" " "$5 " --> " $9  } ' |sort -k 2 -nr
tamaño: 140 --> ambos
tamaño: 122 --> error
tamaño: 69 --> testing
tamaño: 48 --> salida
tamaño: 5 --> uno
tamaño: 5 --> seis
tamaño: 5 --> dos
tamaño: 5 --> cinco
tamaño: 0 --> tres
tamaño: 0 --> siete
tamaño: 0 --> ocho
tamaño: 0 --> cuatro
tamaño:  --> 
[rino@restauracion testing]$

Aca listamos, agarramos solamente algunos campos que nos interesan y luego lo ordenamos por tamaño.

*.Ahora vamos a retomar un poco el tema de redirecciones.*

Como vemos en este comando volvimos a utilizar el anterior pero pusimos la salida en un archivo, luego le hizimos un append y vimos que el archivo crecio.

[rino@restauracion testing]$ ls -l | awk '{print  "tamaño:" " "$5 " --> " $9  } ' |sort -k 2 -nr
tamaño: 140 --> ambos
tamaño: 122 --> error
tamaño: 69 --> testing
tamaño: 48 --> salida
tamaño: 5 --> uno
tamaño: 5 --> seis
tamaño: 5 --> dos
tamaño: 5 --> cinco
tamaño: 0 --> tres
tamaño: 0 --> siete
tamaño: 0 --> ocho
tamaño: 0 --> cuatro
tamaño:  --> 
[rino@restauracion testing]$

Ahora uds no se preguntan que pasa con la salida del awk quien la captura ???
Como ven la unica salida que tenemos es la ultima que capturamos.

Si yo haria esto..

[rino@restauracion testing]$ ls -l | awk '{print  "tamaño:" " "$5 " --> " $9  } '> rino |sort -k 2 -nr >> salida.1
[rino@restauracion testing]$ ls -la salida.1 
-rw-rw-r-- 1 rino rino 590 Sep 29 15:12 salida.1
[rino@restauracion testing]$ ls -la rino 
-rw-rw-r-- 1 rino rino 316 Sep 29 15:14 rino
[rino@restauracion testing]$ 

Pasaria que al redireccionar la salida del awk este ya no le estaria pasando la salida al comando sort y entonces la salida del sort no devuelve nada por eso si se fijan el archivo sigue pesando lo mismo.

Para solucionar esto vamos a utilizar el comando tee

Ahora fijense:

[rino@restauracion testing]$ ls -l | awk '{print  "tamaño:" " "$5 " --> " $9  } ' |tee  filetee |sort -k 2 -nr >> salida.1
[rino@restauracion testing]$ ls -la salida.1 
-rw-rw-r-- 1 rino rino 908 Sep 29 15:19 salida.1
[rino@restauracion testing]$ ls -la filetee 
-rw-rw-r-- 1 rino rino 318 Sep 29 15:19 filetee
[rino@restauracion testing]$

Miren lo que guardo el comando tee en el archivo filetee

[rino@restauracion testing]$ cat filetee 
tamaño:  --> 
tamaño: 140 --> ambos
tamaño: 5 --> cinco
tamaño: 0 --> cuatro
tamaño: 5 --> dos
tamaño: 122 --> error
tamaño: 0 --> ocho
tamaño: 316 --> rino
tamaño: 48 --> salida
tamaño: 590 --> salida.1
tamaño: 5 --> seis
tamaño: 0 --> siete
tamaño: 69 --> testing
tamaño: 0 --> tres
tamaño: 5 --> uno
[rino@restauracion testing]$ 

Como ven utilizo los parametros que definimos en awk pero no los ordeno por tamaño porque esta es la salida del awk que va a alimentar al comando sort .

Ahora ya sabemos si queremos saber la salida de algun comando que se ejecuta entre las tuberias vamos a tener que usar tee.

Vamos a ver ahora el comando xargs.

Syntax

xargs [options] [command] [initial-arguments]
Este comando toma como entrada la salida de otro comando y lo pasa como argumento siendo echo el comando por defecto que usa xargs.

Si ejecutamos el xargs sin nada lo toma como si haria un echo

[rino@restauracion testing]$ ls | xargs
ambos cinco cuatro dos error filetee ocho rino salida salida.1 seis siete testing tres uno
[rino@restauracion testing]$

Fijense si utilizo el parametro -n seguido de un numero, que me indica de a cuanto parametros va a tomar.

[rino@restauracion testing]$ ls | xargs -n 1
ambos
cinco
cuatro
dos
error
filetee
ocho
rino
salida
salida.1
seis
siete
testing
tres
uno
[rino@restauracion testing]$ 

como ven cada salida de ls devuelve una palabra que va a tomar cada una como un parametro y como dijimos que si al xargs no le ponemos ningun comando el comando por defecto es echo.

Ahora vamos a utilizar un comando basta de usar el estandar que es el echo:

[rino@restauracion testing]$ ls | xargs -n 1  ls -la
-rw-rw-r-- 1 rino rino 140 Sep 28 21:10 ambos
-rw------- 1 root root 5 Sep 28 21:10 cinco
-rw-rw-r-- 1 rino rino 0 Sep 28 21:06 cuatro
-rw-rw-r-- 1 rino rino 5 Sep 28 21:09 dos
-rw-rw-r-- 1 rino rino 122 Sep 28 21:12 error
-rw-rw-r-- 1 rino rino 318 Sep 29 15:19 filetee
-rw------- 1 root root 0 Sep 28 21:08 ocho
-rw-rw-r-- 1 rino rino 316 Sep 29 15:14 rino
-rw-rw-r-- 1 rino rino 48 Sep 28 21:12 salida
-rw-rw-r-- 1 rino rino 908 Sep 29 15:19 salida.1
-rw------- 1 root root 5 Sep 28 21:10 seis
-rw------- 1 root root 0 Sep 28 21:08 siete
-rw-rw-r-- 1 rino rino 69 Sep 28 21:20 testing
-rw-rw-r-- 1 rino rino 0 Sep 28 21:06 tres
-rw-rw-r-- 1 rino rino 5 Sep 28 21:09 uno
[rino@restauracion testing]$ 

Como ven utilizamos ls -la y toma la salida del ls y se las pasa al ls -la en donde ejecuta el comando, si quieren ver como queda mejor podemos usarlo con -p.

Asi podriamos ver como queda el comando

[rino@restauracion testing]$ ls | xargs -n 1 -p ls -la
ls -la ambos ?...
ls -la cinco ?...

Pero que pasa si yo quisiera armarme un archivo con todos los comandos sin necesidad que este se ejecute ?

Fijense esto :

[rino@restauracion testing]$ ls | xargs -n 1 echo  ls -la 
ls -la ambos
ls -la cinco
ls -la cuatro
ls -la dos
ls -la error
ls -la filetee
ls -la ocho
ls -la rino
ls -la salida
ls -la salida.1
ls -la seis
ls -la siete
ls -la testing
ls -la tres
ls -la uno
[rino@restauracion testing]$ 

Tenemos armado los comandos pero no lo podemos ejecutar..
¿que podriamos hacer?
Bueno aplicamos lo que ya vimos antes..
Aca lo que vamos hacer es redireccionar, luego dar permiso de ejecucion al archivo que redireccinamos que contiene todos los comandos y luego ejecutarlo.

[rino@restauracion testing]$ ls | xargs -n 1 echo  ls -la > comandos_locos
[rino@restauracion testing]$ chmod u+x comandos_locos 
[rino@restauracion testing]$ ./comandos_locos 
-rw-rw-r-- 1 rino rino 140 Sep 28 21:10 ambos
-rw------- 1 root root 5 Sep 28 21:10 cinco
-rwxrw-r-- 1 rino rino 218 Sep 29 15:56 comandos_locos
-rw-rw-r-- 1 rino rino 0 Sep 28 21:06 cuatro
-rw-rw-r-- 1 rino rino 5 Sep 28 21:09 dos
-rw-rw-r-- 1 rino rino 122 Sep 28 21:12 error
-rw-rw-r-- 1 rino rino 318 Sep 29 15:19 filetee
-rw------- 1 root root 0 Sep 28 21:08 ocho
-rw-rw-r-- 1 rino rino 316 Sep 29 15:14 rino
-rw-rw-r-- 1 rino rino 48 Sep 28 21:12 salida
-rw-rw-r-- 1 rino rino 908 Sep 29 15:19 salida.1
-rw------- 1 root root 5 Sep 28 21:10 seis
-rw------- 1 root root 0 Sep 28 21:08 siete
-rw-rw-r-- 1 rino rino 69 Sep 28 21:20 testing
-rw-rw-r-- 1 rino rino 0 Sep 28 21:06 tres
-rw-rw-r-- 1 rino rino 5 Sep 28 21:09 uno
[rino@restauracion testing]$

Bueno esto es todo..

LABORATORIO TOPICO 103.4

Probando postfix en Centos 5.5 Parte 4 + webmail

*.Vamos a ver como hacer para utilizar un MUA.*

Antes de comenzar tendremos que elegir entre IMAP y POP3
En nuestro caso voy a elegir IMAP.

Como ya teniamos toda la parte de la encriptacion configurada no tenemos que tocar demasiado en nuestros archivos de configuracion dovecot y main.cf.

Primero vamos a editar /etc/dovecot.conf

# Protocols we want to be serving: imap imaps pop3 pop3s
# If you only want to use dovecot-auth, you can set this to "none".
#protocols = imap imaps pop3 pop3s
protocols = imaps

Habilitamos protocols con imap

Luego Habilitamos las llaves que ya habiamos creado antes o creamos unas nuevas:

[root@mail private]# openssl req -x509 -nodes -newkey rsa:1024 -days 3650 -out dovecot.cert -keyout dovecot.key
Generating a 1024 bit RSA private key
...................++++++
..++++++
writing new private key to 'dovecot.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:AR
State or Province Name (full name) [Berkshire]:BS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com
[root@mail private]#
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
ssl_cert_file = /etc/pki/dovecot/private/mail.villadalmine.cert
ssl_key_file = /etc/pki/dovecot/private/mail.villadalmine.key
#ssl_key_file = /etc/pki/dovecot/private/dovecot.pem

Luego esta otra

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
#disable_plaintext_auth = no
disable_plaintext_auth = yes

Ahora lo referido a nuestro mailbox

#
# See doc/wiki/Variables.txt for full list. Some examples:
#
   mail_location = maildir:~/Maildir

Luego restarteamos

[root@mail private]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
[root@mail private]#

Ahora tendriamos que probarlo con nuestro MUA thunderbird o evolution o el que quieran.

Bueno ahora una imagen vale mas que mil palabras 🙂

Bueno con esto ya tenemos nuestro correo andando ..
Ahora probemos instalar squirrelmail para que chequen su mail por la web.

http://www.linuxmail.info/squirrelmail-webmail-setup-howto-in-centos-5/

Ahora:
[root@mail opt]# cd /usr/share/squirrelmail/config/
[root@mail config]# ./conf.pl

Luego hay que completar los datos con los campos que requerimos e ir la navegador con el link que nos indica cuanod termina.

Presten atencion como se configura :
SquirrelMail Configuration : Read: config.php (1.4.0)
———————————————————
Server Settings

General
——-
1. Domain : villadalmine.com
2. Invert Time : false
3. Sendmail or SMTP : SMTP

IMAP Settings
————–
4. IMAP Server : mail.villadalmine.com
5. IMAP Port : 993
6. Authentication type : login
7. Secure IMAP (TLS) : true
8. Server software : uw
9. Delimiter : /

B. Update SMTP Settings : mail.villadalmine.com:25
H. Hide IMAP Server Settings

R Return to Main Menu
C Turn color off
S Save data
Q Quit

Command >> B

SquirrelMail Configuration : Read: config.php (1.4.0)
———————————————————
Server Settings

General
——-
1. Domain : villadalmine.com
2. Invert Time : false
3. Sendmail or SMTP : SMTP

SMTP Settings
————-
4. SMTP Server : mail.villadalmine.com
5. SMTP Port : 25
6. POP before SMTP : false
7. SMTP Authentication : none
8. Secure SMTP (TLS) : false
9. Header encryption key :

A. Update IMAP Settings : mail.villadalmine.com:993 (uw)
H. Hide SMTP Settings

R Return to Main Menu
C Turn color off
S Save data
Q Quit

Command >>

Reinicien el servicio de httpd.
Entren a la pagina pero por https –> https://mail.villadalmine.com/webmail

Acepten el certificado.

Luego tenemos que configurar nuestro apache para que no tenga que poner /webmail

[root@mail squirrelmail]# tail -n 30 /etc/httpd/conf/httpd.conf

NameVirtualHost *:443
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#

<VirtualHost *:443>
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /usr/share/squirrelmail
ServerName mail.villadalmine.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

Miren como quedaria:

Nos quedaria ver antispam y un antivirus en la proxima entrega.

Saludos

Probando postfix en Centos 5.5 Parte 3

*.Vamos a dar el siguiente paso que es configurar TLS para postfix.*

En la parte 2 configuramos nuestra CA y nuestros certificados en donde ya lo firmamos para poder empezar a trabajar.

Nuestro certificado de CA quedo en /etc/CA/cacert.pem

Vamos a crear un directorio para poner nuestros certificados firmados.

[root@mail CA]# mkdir /etc/postfix/tls
[root@mail CA]# cp /root/mail.villadalmine.com.cert /etc/postfix/tls/
[root@mail CA]# cp /root/mail.villadalmine.com.key /etc/postfix/tls/
[root@mail CA]# cp /etc/CA/cacert.pem /etc/postfix/tls/
[root@mail CA]#

Ahora que ya configuramos nuestras rutas de certificados, vamos a configurar el postfix para que haga uso de ellos y active TLS.

[root@mail CA]# mkdir /etc/postfix/tls
[root@mail CA]# cp /root/mail.villadalmine.com.cert /etc/postfix/tls/
[root@mail CA]# cp /root/mail.villadalmine.com.key /etc/postfix/tls/
[root@mail CA]# cp /etc/CA/cacert.pem /etc/postfix/tls/
[root@mail CA]# postconf -e "smtp_tls_security_level=may"
[root@mail CA]# postconf -e "smtpd_tls_security_level=may"
[root@mail CA]# postconf -e "smtpd_tls_key_file=/etc/postfix/tls/mail.villadalmine.com.key"
[root@mail CA]# postconf -e "smtpd_tls_cert_file=/etc/postfix/tls/mail.villadalmine.com.cert"
[root@mail CA]# postconf -e "smtpd_tls_CAfile=/etc/postfix/tls/cacert.pem"
[root@mail CA]# postconf -e "smtpd_tls_loglevel=1"
[root@mail CA]# postconf -e "smtpd_tls_received_header=yes"
[root@mail CA]# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]
[root@mail CA]#

Ahora veamos si TLS esta andando en nuestro server

[root@mail CA]# nc mail.villadalmine.com 25
220 mail.villadalmine.com ESMTP Postfix
ehlo villadalmine.com
250-mail.villadalmine.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
STARTTLS # escribimos eso y vemos que nos responde.
220 2.0.0 Ready to start TLS

Como vemos postfix nos responde que ya tenemos TLS para iniciar una conexion encriptada.
Tengan encuenta solo se van a encriptar cuando el servidor destino tambien soporta encriptacion.

Ahora tendriamos que configurar nuestro parametro mynetworks en /etc/postfix/main.cf para que solo acepte conexiones desde nuestra red para que no funcione como un open-relay.(retransmision abierta)
Un open relay permite a cualquiera enviarle un correo y a la inversa. Los spammers hacen un amplio uso de los open-relays para contaminar internet con correos no deseados..y lo demas ya lo saben ..

Hay que tener cuidado con los open relay porque sino lo configuramos como se debe podemos entrar en una lista negra en donde añaden nuestra ip para que nadie mas pueda aceptar mails desde ese origen.
Para verificar esto pueden usar www.abuse.net/relay.html

La configuracion por defecto que viene con postfix nos evita que funcione de esta manera pero nos va a traer otras complicaciones. Dado que cualquier que este dentro de la red nuestra o tome una ip del rago dado puede utilizar nuestro servidor como open relay.
Tambien genera un problema para aquellas personas que se conectan desde afuera de nuestra red ya sea por celulares o porque trabajan de sus casas y es por eso que tendran que usar un servidor de su proveedor que le permita retransmisiones o sino entrar por medio de la vpn a su trabajo.
Ahora gracias a la auntentificacion los usuarios podran enviar correo desde cualquier parte siempre que esten autentificados.

SMTL AUTH Y SASL

La autentificacion para los servidores de correo la proporciona un mecanismo llamado SMTP AUTH en donde otro comando STMP solicita a los usuarios una clave y usuario.
Estos usuarios y claves se pueden pasar de varias formas ya sea encriptado o en texto plano o tambien pueden ser tokens.
Para corrobrar que las credenciales son validas el comando AUTH emplea un entorno de autentificacion llamado SASL (SImple AUthentication and Security Layer).
Es muy parecio a PAM en el sentido que abstrae la autentificacion dado que nos permite ocultar varios tipos de autentificacion detras de SASL.
Lo que querra decir que el servidor de correo puede verificar varios servicios de administracion para validar que el usuario tiene permiso para enviar correo sin necesidad de entender como se autentican dichos servicios.
Estos servicios pueden incluir PAM (lo quehace que se auntentiquen con los usuarios del sistema), u otro metodo .
Postfix no tiene SASL incorporado por lo cual va a hacer uso de otras aplicaciones para integrarlo y es por eso que vamos a utilizar dovecot.
Para corroborar que postfix lo soporte.

[root@mail ~]# postconf -a
cyrus
dovecot
[root@mail ~]#

*.Vamos a a configurar nuestro dovecot para que soporte SASL.*

Editamos el archivo /etc/dovecot.conf

Para eso vamos a configurar la parte de auth default.

esta es la seccion que tendriamos que llenar

[root@mail ~]# sed '/#/d' /etc/dovecot.conf |sed '/^$/d'
protocol imap {
}

protocol pop3 {
}
protocol lda {
  postmaster_address = postmaster@example.com
}
auth default {
  mechanisms = plain
  passdb pam {
  }
  userdb passwd {
  }
  user = root
}
dict {
}
plugin {
}
[root@mail ~]#

Esa seccion la tienen vacia y la tenemos que llenar con esta config quedandole todo el archivo de configuracion asi:

[root@mail ~]# sed '/#/d' /etc/dovecot.conf |sed '/^$/d'
protocol imap {
}

protocol pop3 {
}
protocol lda {
  postmaster_address = postmaster@example.com
}
auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
       }
    }
}
dict {
}
plugin {
}
[root@mail ~]#

Ahora describamos un poco que fue lo que hicimos..

El servicio auth va a contener una coleccion de directivas que van entre {}.

La directiva mechanisms indica los mecanismos de autentificacion que acepta.
Por defecto siempre viene PLAIN (usuarios y claves texto plano)
LOGIN es uno de los tantos mecanimos que existen para autentificacion ( CRAM-MD5,DIGEST-MDG,NTLM,GSSAPI,ANONYMOUS,OTP,SKEY).
Para mas info –> http://en.wikipedia.org/wiki/Comparison_of_e-mail_clients#Authentication_support
La siguente passdb pam es la que me permite aunteticar los usuarios contra mi sistema operativo y para eso utiliza un archivo especial en /etc/pam.d/dovecot.

[root@mail ~]# cat /etc/pam.d/dovecot
#%PAM-1.0
auth       required     pam_nologin.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
[root@mail ~]#

Para mas info acerca como funciona dovecto con Pam
http://wiki.dovecot.org/PasswordDatabase y httpd://wiki.dovecot.org/PasswordDatabase/PAM

La que sigue userdb passwd realiza una busqueda en mis archivos de sistema para poder tener el UID y GID. Para mas info
http://wiki.dovecot.org/UserDatabase

La ultima que nos queda es socket que esta relacionada a la conexion que se realiza entre postfix y dovecot.Este escucha las peticiones de autentificacion de postfix y luego devuele los resultados.
El parametro path me indica donde va estar el archivo que va a ser de tipo socket que permite la comunicacion entre las dos aplicaciones.
Las ultimas que siguen son los permisos que va a manejar la conexion socket.

Luego reiniciamos el servicio dovecot:

[root@mail ~]# service dovecot restart
Stopping Dovecot Imap:                                     [FAILED]
Starting Dovecot Imap:                                     [  OK  ]
[root@mail ~]# ls  -l /var/spool/postfix/private/auth
srw-rw---- 1 postfix postfix 0 Sep 24 18:47 /var/spool/postfix/private/auth
[root@mail ~]#
[root@mail ~]# ps -A |grep 'dovecot'
 4323 ?        00:00:00 dovecot
 4325 ?        00:00:00 dovecot-auth
[root@mail ~]# tail -f /var/log/maillog
Sep 24 18:47:43 mail dovecot: Dovecot v1.0.7 starting up

Ya podemos ver que esta andando, tenemos le archivo con el socket, tenemos el proceso de auth corriendo y en el log vemos que esta arriba dovecot.

*.Configuremos Postfix para SASL.*
Vamos agregar estas lineas a nuestro main.cf

[root@mail ~]# postconf -e “smtpd_sasl_type=dovecot”
[root@mail ~]# postconf -e “smtpd_sasl_path=private/auth”
[root@mail ~]# postconf -e “smtpd_sasl_auth_enable=yes”
[root@mail ~]# postconf -e “smtpd_tls_auth_only=yes”
[root@mail ~]# postconf -e “smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination”
[root@mail ~]#

Veamos cada uno de estos:
smtpd_sasl_type=dovecot: especifica que estamos usando dovecot para autenticar con SASL.
smtpd_sasl_path=private/auth : la ubicacion de donde va estar nuestro socket (path relativo al spool de postfix)
smtpd_sasl_auth_enable=yes : activa la autenticacion SASL
smtpd_tls_auth_only=yes : solo activa autenticacion si TLS esta activo y en ejecucion. (se activo mediante STARTTLS)
smptd_recipient_restrictions : es una lista de restricciones de postfix quees lo que tiene que denegar o aceptar en una conexion.
permit_mynetworks : solo aquellos de mi red
permit_sasl_authenticated : acepta correo de usuarios autenticados por SASL
reject_unauth_destination: esta ultima rechaza todo lo que no cumpla con lo anterior.
Si quieren ver mas acerca de las restricciones:
http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions

Reiniciamos :

[root@mail ~]# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]
[root@mail ~]#

Ahora tendriamos que probar nuestro servidor de correo para ver si puede realizar una conexion cifrada, para eso vamos a utilizar otra herramienta que se llama swaks.

[root@mail opt]# wget http://jetmore.org/john/code/swaks/latest/swaks
--2010-09-25 00:05:18--  http://jetmore.org/john/code/swaks/latest/swaks
Resolving jetmore.org... 208.97.177.64
Connecting to jetmore.org|208.97.177.64|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 111264 (109K) [text/plain]
Saving to: `swaks'

100%[========================================================>] 111,264     16.0K/s   in 6.8s    

2010-09-25 00:05:31 (16.0 KB/s) - `swaks' saved [111264/111264]

[root@mail opt]# chmod u+x swaks
[root@mail opt]#

Tambien tenemos que instalar estos paquetes:
[root@mail opt]# yum install perl-Digest-SHA1 perl-Digest-HMAC perl-Net-IP perl-Net-DNS perl-Net-SSLeay

Ahora vamos a ver como enviamos un mail :

[root@mail opt]# ./swaks  -tls -a -au juan -ap juan -t pepe@dalmine.com -f juan@dalmine.com
=== Trying mx1.interac.it:25...

[root@mail opt]# ./swaks  -tls -a -au juan -ap juan -t pepe@villadalmine.com -f juan@villadalmine.com
=== Trying mail.villadalmine.com:25...
=== Connected to mail.villadalmine.com.
<-  220 mail.villadalmine.com ESMTP Postfix
 -> EHLO mail.villadalmine.com
<-  250-mail.villadalmine.com
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250 DSN
 -> STARTTLS
<-  220 2.0.0 Ready to start TLS
=== TLS started w/ cipher DHE-RSA-AES256-SHA
=== TLS peer subject DN="/C=AR/ST=BSAS/O=ITRESTAURACION/CN=mail.villadalmine.com/emailAddress=postmaster@villadalmine.com"
 ~> EHLO mail.villadalmine.com
<~  250-mail.villadalmine.com
<~  250-PIPELINING
<~  250-SIZE 10240000
<~  250-VRFY
<~  250-ETRN
<~  250-AUTH PLAIN LOGIN
<~  250-ENHANCEDSTATUSCODES
<~  250-8BITMIME
<~  250 DSN
 ~> AUTH LOGIN
<~  334 VXNlcm5hbWU6
 ~> anVhbg==
<~  334 UGFzc3dvcmQ6
 ~> anVhbg==
<~  235 2.0.0 Authentication successful
 ~> MAIL FROM:
<~  250 2.1.0 Ok
 ~> RCPT TO:

<~  250 2.1.5 Ok
 ~> DATA
<~  354 End data with .
 ~> Date: Sat, 25 Sep 2010 00:27:35 -0300
 ~> To: pepe@villadalmine.com
 ~> From: juan@villadalmine.com
 ~> Subject: test Sat, 25 Sep 2010 00:27:35 -0300
 ~> X-Mailer: swaks v20100211.0 jetmore.org/john/code/swaks/
 ~>
 ~> This is a test mailing
 ~>
 ~> .
<~  250 2.0.0 Ok: queued as 5040158551
 ~> QUIT
<~  221 2.0.0 Bye
=== Connection closed with remote host.
[root@mail opt]#

Ahora vemos como pepe ya tiene su email:

[root@mail new]# ls -la
total 32
drwx—— 2 pepe pepe 4096 Sep 25 00:27 .
drwx—— 9 pepe pepe 4096 Sep 18 22:52 ..
-rw——- 1 pepe pepe 587 Sep 18 23:03 1284861837.Vfd00I112aaM55067.mail
-rw——- 1 pepe pepe 597 Sep 25 00:27 1285385256.Vfd00I112adM446416.mail.villadalmine.com
[root@mail new]#
Las opciones que usamos fueron -tls para que active la encriptacion.
-a activa autenticacion.
-au usuario
-ap password
-t y -f quien recibe y quien envia.
Si analizan lo que hizo el comando van a ver que se inicia una conexion cifrada y se invoca al comando AUTH.

Si miramos los logs

Sep 25 00:32:11 mail postfix/smtpd[3921]: connect from ns1.villadalmine.com[172.16.31.140]
Sep 25 00:32:11 mail postfix/smtpd[3921]: setting up TLS connection from ns1.villadalmine.com[172.16.31.140]
Sep 25 00:32:11 mail postfix/smtpd[3921]: TLS connection established from ns1.villadalmine.com[172.16.31.140]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
Sep 25 00:32:11 mail postfix/smtpd[3921]: 5862C58551: client=ns1.villadalmine.com[172.16.31.140], sasl_method=LOGIN, sasl_username=juan
Sep 25 00:32:11 mail postfix/cleanup[3928]: 5862C58551: message-id=<20100925033211.5862C58551@mail.villadalmine.com>
Sep 25 00:32:11 mail postfix/qmgr[3918]: 5862C58551: from=, size=499, nrcpt=1 (queue active)
Sep 25 00:32:11 mail postfix/smtpd[3921]: disconnect from ns1.villadalmine.com[172.16.31.140]
Sep 25 00:32:11 mail postfix/local[3929]: 5862C58551: to= , relay=local, delay=0.11, delays=0.08/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
Sep 25 00:32:11 mail postfix/qmgr[3918]: 5862C58551: removed

No se olviden de especificar esto en su main.cf
mynetworks = 127.0.0.0/8, 172.16.31.0/24, 192.168.0.0/24
para decirle de que red pueden recibir y enviar mails.

Con esto terminamos ya esta parte, la que sigue vamos a explicar como configurar postfix con imap con squirrel.

Compilando Apache y configurando VirtualHost con clave

*.Vamos a ver como instalar apache desde sus fuentes.*

Primero vamos a esta pagina:
http://httpd.apache.org/download.cgi#apache22

Luego tenemos que bajar apache en nuestro equipo.

[root@mail opt]# http://apache.xmundo.com.ar//httpd/httpd-2.2.16.tar.gz

Siguiente paso es descomprimirlo

[root@mail opt]# tar xvzf httpd-2.2.16.tar.gz

Una vez que se descomprio tenemos que proceder a la compilacion.
Pero vamos a elegir compilar sus modulos como DSO (Libreria de objetos dinamicas)
[root@mail httpd-2.2.16]# ./configure -prefix=/opt/apache -enable-so -enable-http -enable-mods-shared=”headers proxy ssl dav cgi rewrite”

-prefix=/opt/apache –> donde va a instalarse apache
-enable-so –> habilita que se cargue las DSOs en apache
-enable-http –> habilita http para que apache pueda utilizar el protocolo
las demas –>headers proxy ssl dav cgi rewrite , son distintos modulos cada uno hace algo en especial.
headers –> voy a poder manipular las cabeceras de http en la configuraicon de apache.
proxy –> para utilizar apache como proxy (igual recomiendo squid)
ssl –> habilita a apache para utilizar conexiones seguras.
dav –> habilita WebDav con todas sus features.
cgi –> habilita la ejeuccion de cgi, generalmente escrito en perl o shell.
rewrite –> habilita el motor de rewrite. Mediante patrones con expresiones regulares voy a poder redireccionar peticiones http.

Bueno luego viene la parte dificil..
cuando le dan enter va empezar a realizar chequeo de todo lo que necesita.. si algo falla seguro vamos a tener que ver que es e instalar los paquetes que involucren lo que haga falta.
En mi caso tuve que instalar openssl-dev,gcc (aclaro lo instala con yum, pero pueden probar tambien de las fuentes 🙂

Una ves que termina sin error.

Ejecutan
make
Si todo sale bien
make install

Luego ya tienen apache instalado 🙂
[root@mail httpd-2.2.16]# cd /opt/apache/bin/
[root@mail bin]# file httpd
httpd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
[root@mail bin]#

[root@mail bin]# ./httpd -H
httpd: illegal option — H
Usage: ./httpd [-D name] [-d directory] [-f file]
[-C “directive”] [-c “directive”]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
-D name : define a name for use in directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C “directive” : process directive before reading config files
-c “directive” : process directive after reading config files
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
-S : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
[root@mail bin]#

Listamos los Modulos:

[root@mail bin]# cd /opt/apache/modules/
[root@mail modules]# ls -la
total 1868
drwxr-xr-x 2 root root 4096 Sep 23 03:52 .
drwxr-xr-x 17 root root 4096 Sep 23 04:36 ..
-rw-r–r– 1 root root 9083 Sep 23 03:47 httpd.exp
-rwxr-xr-x 1 root root 57381 Sep 23 03:52 mod_cgi.so
-rwxr-xr-x 1 root root 280210 Sep 23 03:52 mod_dav.so
-rwxr-xr-x 1 root root 42456 Sep 23 03:52 mod_headers.so
-rwxr-xr-x 1 root root 100816 Sep 23 03:52 mod_proxy_ajp.so
-rwxr-xr-x 1 root root 56465 Sep 23 03:52 mod_proxy_balancer.so
-rwxr-xr-x 1 root root 29799 Sep 23 03:52 mod_proxy_connect.so
-rwxr-xr-x 1 root root 72855 Sep 23 03:52 mod_proxy_ftp.so
-rwxr-xr-x 1 root root 75259 Sep 23 03:52 mod_proxy_http.so
-rwxr-xr-x 1 root root 41180 Sep 23 03:52 mod_proxy_scgi.so
-rwxr-xr-x 1 root root 178037 Sep 23 03:52 mod_proxy.so
-rwxr-xr-x 1 root root 131370 Sep 23 03:52 mod_rewrite.so
-rwxr-xr-x 1 root root 697810 Sep 23 03:52 mod_ssl.so
[root@mail modules]#
Lo Iniciamos

[root@mail modules]# /opt/apache/bin/apachectl start
[root@mail modules]# tail /opt/apache/logs/error_log
[Thu Sep 23 04:45:40 2010] [notice] Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 DAV/2 configured — resuming normal operations

Testeamos que este escuchando

[root@mail modules]# netstat -anp |grep -i httpd
tcp 0 0 :::80 :::* LISTEN 3442/httpd
[root@mail modules]#

Nos queda ver un poco la configuracion:
Le voy a sacar los comentarios
[root@mail conf]# sed ‘/#/d’ httpd.conf |sed ‘/^$/d’
ServerRoot “/opt/apache”
Listen 80
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_module modules/mod_dav.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule rewrite_module modules/mod_rewrite.so

User daemon
Group daemon

ServerAdmin you@example.com
DocumentRoot “/opt/apache/htdocs”

Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all

Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

DirectoryIndex index.html

Order allow,deny
Deny from all
Satisfy All

ErrorLog “logs/error_log”
LogLevel warn

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” %I %O” combinedio

CustomLog “logs/access_log” common

ScriptAlias /cgi-bin/ “/opt/apache/cgi-bin/”

AllowOverride None
Options None
Order allow,deny
Allow from all

DefaultType text/plain

TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

[root@mail conf]#

Bueno, aca despues mas adelante vamos a ver como se configura, por ahora sepamos donde esta y que tiene.
Acuerdense que los comentarios que filtre son muy importantes dado que contienen informacion que explica muy bien cada item del apache.

Lo siguiente que vamos hacer es configurar una placa de red virtual.

[root@mail conf]# ifconfig eth0:1 172.16.31.140 netmask 255.255.255.0

Chequeamos
[root@mail conf]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:76:43:02
inet addr:172.16.31.138 Bcast:172.16.31.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe76:4302/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45317 errors:0 dropped:0 overruns:0 frame:0
TX packets:33314 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:38621015 (36.8 MiB) TX bytes:3993957 (3.8 MiB)
Interrupt:67 Base address:0x2000

eth0:1 Link encap:Ethernet HWaddr 00:0C:29:76:43:02
inet addr:172.16.31.140 Bcast:172.16.31.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000

Ahora que tenemos dos ip, vamos a configurar dos paginas de internet.

Configuracion de Virtualhost asignada por ip:

Obviamente aca tendriamos que tener configurada nuestra zona para la pagina, pero supongamos que resolvemos por ip a fines practicos.
<VirtualHost 172.16.31.138>
DocumentRoot /opt/apache/estelito
ServerName www.estelito.com
ErrorLog “/opt/apache/logs/estelito.com/error.log”
CustomLog “/opt/apache/logs/estelito.com/access.log” combined
ScriptAlias /cgi-bin/ “/opt/apache/estelito/cgi-bin/”
<Directory “/opt/apache/estelito”>
Options -Indexes FollowSymLinks
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost 172.16.31.140>
DocumentRoot /opt/apache/dalmine
ServerName www.dalmine.com
ErrorLog “/opt/apache/logs/dalmine.com/error.log”
CustomLog “/opt/apache/logs/dalmine.com/access.log” combined
ScriptAlias /cgi-bin/ “/opt/apache/dalmine/cgi-bin/”
<Directory “/opt/apache/dalmine”>
Options -Indexes FollowSymLinks
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Agreguen lo de arriba en su archivo httpd.conf.
Reinicien apache –> /opt/apache/bin/httpd stop, luego start.

No se olviden de crear las siguentes rutas
/opt/apache/dalmine
/opt/apache/estelito
/opt/apache/dalmine/cgi-bin
/opt/apache/estelito/cgi-bin
/opt/apache/logs/dalmine.com
/opt/apache/logs/estelito.com
Importantisimo crear un archivo adentro de cada sitio que sea el index.html
/opt/apache/dalmine/index.html
/opt/apache/estelito/index.html

luego con el programa links o desde su navegador prueben las paginas

Miremos los logs:
[root@mail estelito.com]# cat access.log
172.16.31.140 – – [23/Sep/2010:05:32:41 -0300] “GET / HTTP/1.1” 304 – “-” “Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.9) Gecko/20100908 CentOS/3.6-2.el5.centos Firefox/3.6.9”
[root@mail estelito.com]#

Como ven ya tenemos ahora andando nuestros dos sitios.

Ahora supongamos que queremos escuchar en una ip dos dominios diferentes.

Aca ya tenemos configurada dos zona –>mail.villadalmine.com y www.villadalmine.com asi que vamos a usar esas.

Ahora editamos nuestro archivo httpd.conf

y sacamos los virtualhost anteriors (si queiren hagan backup de httpd.conf)
y ponemos lo siguiente

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /opt/apache/estelito
ServerName mail.villadalmine.com
<Directory "/opt/apache/dalmine">
        Options -Indexes FollowSymLinks
        AllowOverride AuthConfig FileInfo
        Order allow,deny
        Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName www.villadalmine.com
DocumentRoot /opt/apache/dalmine
<Directory "/opt/apache/dalmine">
        Order allow,deny
        AuthType Basic
        AuthName "Solo personal autorizado"
        AuthType Basic
        AuthUserFile /opt/apache/password.list
        Require valid-user
        Allow from all
</Directory>
</VirtualHost>

Reinician apache..

y luego prueban en el navegador.

Ahora ya lo hicimos andar por ip y por nombre de dominio..
Vamos aver ahora como ponerle un password para cuando alguien quiere acceder a nuestra pagina.

Esto es a modo educativo. a nadie se le va ocurrio hacerlo con root en la vida real.
Pueden usar algun usuario que existe en su sistema asi no usan root, pero ami me gusta ser root en las vm 🙂

<
[root@mail dalmine]# /opt/apache/bin/htpasswd -c /opt/apache/password.list root
New password:
Re-type new password:
Adding password for user root
[root@mail dalmine]# cat /opt/apache/password.list
root:s.LrZtlExGY96
[root@mail dalmine]#

COmo ven en ese archivo tengo la clave y el usurio.

Ahora veamos que tenemos que cambiar en nuestra directiva de virtualhost.

Fijsen que vamos a cambiar el ultimo virtualhost, lo unico que hicimos fue agregar los comentarios a las lineas existentes y poner lo que sigue abajo.

DocumentRoot /opt/apache/dalmine
ServerName www.villadalmine.com
ErrorLog "/opt/apache/logs/dalmine.com/error.log"
CustomLog "/opt/apache/logs/dalmine.com/access.log" combined
ScriptAlias /cgi-bin/ "/opt/apache/dalmine/cgi-bin/"

#        Options -Indexes FollowSymLinks
#        AllowOverride AuthConfig FileInfo
#        Order allow,deny
#        Allow from all
 Order allow,deny
        AuthType Basic
        AuthName "Solo personal autorizado"
        AuthType Basic
        AuthUserFile /opt/apache/password.list
        Require valid-user
        Allow from all

Reiniciamos nuestro apache

Ahora vemos en nuestro navegador como nos pide clave

Ahora vemos que despues de poner la clave podemos ver la pagina

Y ahora si.. creo que fue mucho por hoy!!

Saludos ..!!
VIVA LA SANTA FEDERACION!

Fuente:
[1]http://www.askapache.com/htaccess/apache-authentication-in-htaccess.html
[2]http://www.informit.com/articles/article.aspx?p=29967&seqNum=3
[3]http://httpd.apache.org/docs/2.0/howto/auth.html
[4]http://httpd.apache.org/docs/2.0/es/howto/auth.html

Laboratorio Topico 103.1

Laboratorio Topico 103.1

1)¿Que comando me sirve para listar archivos y directorios?
2)¿Que diferencia hay entre env y set?
3)Como harias para exportar una variable localmente
4)Como harias para exportar una variable globalmente
5)¿Con que comando puedo ver el historial de lo que escribi?
6)Cambien su variable $PS1 para que les muestre tambien la hora.
7)Listar en forma completa todo lo que hay en /etc
8)Ejecutar el ultimo comando mediante !
9)Utilizar el comando que me permite editar lo ultimo que ejecute.
10)Mostar la ruta de de un manpage
11)Buscar una cadena especifica para que me devuelva el man de esta.
12)Hacer que el man se comporte como apropos
13)Diferencia entre apropos y man
14)Mostrar con man todas las coincidencias de entradas.
15)Listar las secciones del man y listar algun comando que use alguna de ellas.
16)Utilizar apropos o whatis para buscar alguna entrada de un comando.
17)Agregar al man una ruta de manuales para que pueda encontrarla.

Soluciones Laboratorio Topico 103 EN CONSTRUCCION

Probando postfix en Centos 5.5 Parte 2

*.Vamos a ver un poco algunas configuraciones extras.*
Hasta ahora solo vimos alguna parte de las configuraciones basicas de Postfix que permiten a nuestros usuarios locales enviar y recibir correos electronicos, sin embargo tambien tenemos otras facetas que hacen un entorno mas seguro:

* Encriptacionn: aumenta la seguridad de la transmision del correo
* Autentificacion: nos garantiza que solo aquellos usuarios apropiados y autenticados son los que puedan usar nuestro correo.

Utilizando encriptacion:

Podemos encriptar nuestra transmision de correo mediante el protocolo TLS[1] en donde dicho protocolo es el sucesor de SSL[1]
Seguramente ya tuvieron contacto con SSL al utilizar sitios web que utilizan HTTPS,muchas de ellas utilizan el antiguo protocolo SSL pero otras tienen TLS funcionando por debajo de este.

Dos de funciones que nos proporciona que nos van a importar:

*Evita accesos no deseados al contenido de nuestro correo.
*Encripta la comunicacion entre el cliente y el servidor.

Vamos a explicar un poco acerca de TLS y los certificados:

El tema lleva mucha profundidad pero vamos a ver algunos conceptos basicos para entender que sucede. Ambos (TLS y SSL) utilizan certificados digitales con un tipo de criptografia llamada “encriptacion de clave publica” en donde esta funciona con dos claves, una publica que esta diponible para todos y la otra es la clavees la privadaque se guarda en el servidor y se mantiene en secreto.
Todo lo que encriptemos con la clave publica se va a desencriptar con la clave privada.
Cuando utilizemos TLS nuestro certificado digital es la clave publica del servidor que funciona como si fuera nuestro documento de identidad dado que va a identificar al servidor que nos conectemos.
Al conectarnos a un servidor con HTTPS lo que hace nuestro navegador es aceptar ese certificado digital en donde nos dice quien es el servidor acreditandonos su identidad. Dichos certficados poseen caducidad asi que hay que prestar atencion.
No podemos dejar de nombrar que cada uno de estos certificados pueden contener una referencia hacia un CA (Autoridad Certificadora).
¿Que es esto? Una CA es un mecanismo que emite certificados en donde posee un certificado especial llamado “certificado raiz” que se utiliza para poder validar la veracidad del certificado que nos representa al servidor.
Dichos certificados Raiz suelen encontrarse o estar incorporados en los clientes que se conectan a los servidores. Un ejemplo tipico es un navegador que tendra una coleccion de certificados raiz CA conocidos.

Podriamos Resumir esto Asi:
1- Nuestro cliente se conecta a un servidor y pregunta por el certicado.
2- Dicho servidor nos va a mostrar su certificado.
3- Nuestro cliente controla la referencia para un certificado raiz.
4- Nuestro cliente usa el certificado raiz que tiene para poder corroborar que el certificado sea genuino.
5- Ahora si nuestro cliente valida este intercambio ya estamos en mediode una comunicacion cifrada entre un cliente y un servidor.

Nota: suele pasar que nuestro cliente no esta seguro de la validez del certificado entonces nos pide nuestra confirmacion para continuar.

Para ahondar un poco mas sobre el tema tenemos distintos tipos de certficados:

* Certificados emitidos por una CA comercial
* Certificados emitidos por una CA no comercial
* Certificados emitidos por una CA autogestionada
* Certificados autofirmados

Lo mas complicado es que tipo de certificados queremos elegir …

*.Vamos a crear nuestros certificados TLS para nuestro caso.*

Vamos a necesitar dos certificados para TLS
* Un certificado de servidor.
* Certificado de raiz de CA

Vamos a comenzar haciendo el primero:
Aca en este primer paso se genera una clave de servidor y una CSR (Certificate signing request, Peticion de firma de certificado). Estos pasos serian para generarun certificado de una CA comercial o autogestionada.
Dicho proceso va a crear nuestra clave privada y una CSR para luego ser enviada a nuestra CA o alguna CA comercial.
Con este proceso estamos confirmando la identidad de un servidor por el cual el cliente ya va a poder confirmar su veracidad.
Vamos a utilizar openssl para generar nuestras claves y peticiones.

Manos a la obra !!

[root@mail ~]# openssl req -new -newkey rsa:4096 -nodes -keyout mail.villadalmine.com.key -out mail.villadalmine.com.req
Generating a 4096 bit RSA private key
…………………………………..++
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………….++
writing new private key to ‘mail.villadalmine.com.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:AR
State or Province Name (full name) [Berkshire]:BSAS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:educacionit
An optional company name []:
[root@mail ~]#

[root@mail ~]# ls -l mail*
-rw-r--r-- 1 root root 3243 Sep 19 14:38 mail.villadalmine.com.key
-rw-r--r-- 1 root root 1797 Sep 19 14:38 mail.villadalmine.com.req
[root@mail ~]# pwd
/root
[root@mail ~]

Vamos a ver paso por paso los parametros pasados:
Usamos openssl para generar una clave privada utilizando cifrado RSA y un CSR.
Para generar la clave CSR utilizamos las opciones req y -new.
-nodes le decimos que no encripte la nueva clave
-keyout a donde tiene que escribir la clave
-out donde debe escribir la peticion (CSR)

Cuando llega el momento que nos pide datos ahi estamos en la parte de la creacion de la peticion en donde nos pedira cierta informacion acerca de nuestro certificado.Para saltear y usar valores por defecto apretar enter.
Luego nos ira pidiendo datos:

Country Name (2 letter code) [GB]:AR
State or Province Name (full name) [Berkshire]:BSAS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:educacionit
An optional company name []:

Como ven son todos datos que van a apareceran cuando algun cliente pregunte por este.
Traten de poner nombre significativos porque si desean que lo firme una CA comercial la situacion cambia.
Prestar atencion al nombre comun que le damos al certificado (Common Name) porque si especificamos un nombre incorrecto se producira un error debido a que el servidor y el nombre del certificado son distintos.
Como vimos mas arriba los certificados que crea son dos.
Nuestro siguiente paso es firmar nuestra CSR contra alguna CA. Como nosotros vamos a ser nuestra CA autofirmante no vamos a tener problemas :). Si no deberiamos suministrar nuestro archivo .req a la CA comercial y bueno los pasos cambian..

*.Crear nuestra propioa Autoridad Certificadora.*

Vamos a generar las rutas necesarias para crear nuestra CA.

[root@mail ~]# cd /etc
[root@mail etc]# mkdir /etc/CA
[root@mail etc]# mkdir /etc/CA/{private,newcerts}
[root@mail etc]# chown -R root:root /etc/CA
[root@mail etc]# chmod 0700 /etc/CA/private
[root@mail etc]# echo '01' | tee /etc/CA/serial
01
[root@mail etc]# touch /etc/CA/index.txt
[root@mail etc]#

Aca vemos que el directorio creado private contendra la clave privada de la CA y el directorio newcerts tendra una copia de cada certificado firme nuestra CA.
Tenemos que tener cuidado acerca de estos directorios es por eso que lo hacemos dueño a root y le damos permisos solo a el en /etc/CA/private dado que estan nuestras claves privadas.
Luego con los dos comandos ultimos lo que hacemos es crear una base de datos asi podremos almacenar los detalles de los certificados firmados dado que cada certificado emitido por CA poseee un numero de serie unico.
El archivo index.txt contiene una lista de los certificados gestionados por nuestra CA.

Luego nos faltan algunos pasos mas:
[root@mail etc]# cp /etc/pki/tls/openssl.cnf /etc/CA
Hicimos una copia de la configuracion de openssl para luego cambiar una linea:

[ CA_default ]

dir             = ../../CA              # Where everything is kept

La cambiamos por esta otra:

[ CA_default ]

dir             = .             # Where everything is kept 

Como ven lo que le estamos diciendo es que ahora busque la configuracion en otro lado y es justo donde estamos parados /etc/CA

*.Ahora lo que vamos hacer es crear un certificado autofirmado y una clave privada para nuestro CA.*

[root@mail ~]# cd /etc/CA/
[root@mail CA]# openssl req -new -x509 -newkey rsa:4096 -keyout private/cakey.pem -out cacert.pem -days 3650 -extensions v3_ca -config ./openssl.cnf
Generating a 4096 bit RSA private key
……………………………………++
…^[[3~………………………………………………++
writing new private key to ‘private/cakey.pem’
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:AR
State or Province Name (full name) [Berkshire]:BSAS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com
[root@mail CA]#

Aca como vemos hemos creado con sus opciones:
*una clave rsa de 4096 bits de tamaño
*La hemos guardado en /etc/CA/private/cakey.pem
*Hemos creado el certificado como autofirmado, dado que no lo va a firmar otra CA
*-x509 que indica que esta autofirmado
*-extensions v3_ca que especifica que estamos creando un certificado CA
*-config donde le decimos apartir de donde saca la configuracion
Tambien nos va a pedir una clave privada para nuestra CA ademas de los datos personales que vimos anteriormente.

Ya estamos listo tenemos nuestra CA podemos empezar a firmar certificados.

*.Ahora vamos a firmar nuestro certificado anteriormente creado con nuestra autoridad certficadora.*
Ya estamos listo para firmar nuestra peticion de certificado (CSR).
Esto va a tomar el CSR y lo firma con nuestra CA donde en la salida nos muestra el certificado firmado y ya estariamos listo para utilizar postfix con TLS.

Procedamos a firmarlo…

[root@mail CA]# openssl ca -out /root/mail.villadalmine.com.cert -config ./openssl.cnf -infiles /root/mail.villadalmine.com.req

Using configuration from ./openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 19 22:27:32 2010 GMT
Not After : Sep 19 22:27:32 2011 GMT
Subject:
countryName = AR
stateOrProvinceName = BSAS
organizationName = ITRESTAURACION
commonName = mail.villadalmine.com
emailAddress = postmaster@villadalmine.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D7:0C:D7:3F:E6:8E:10:4F:19:A5:19:08:86:5B:FA:E2:AE:64:B5:1C
X509v3 Authority Key Identifier:
keyid:00:09:79:B0:4C:59:16:F7:E9:B3:B0:47:4C:5F:F7:9B:E1:43:3F:D4

Certificate is to be certified until Sep 19 22:27:32 2011 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@mail CA]#

Ya tenemos nuestro certificado firmado 🙂

Las opciones que usamos fueron:
*ca que firmaremos nuestra peticion
*-out el certificado firmado que vamos a mostrar
*-infiles especifica el CSR que queremos firmar
*-config ./openssl especifica donde tenemos nuestra configuracion

Tambien vimos que nos pidio una clave que es la privada de nuestra CA, luego nos pide que confirmemos y posteriormente vamos a tener nuestras bases actualizadas en donde si miramos en /root vamos a tener un certificado firmado, una clave privada y una peticion de certificado.

Si quisieramos ver los detalles de nuestro certificado firmado:

[root@mail CA]# openssl x509 -in /root/mail.villadalmine.com.cert -noout -text -purpose

Para mas informacion acerca de como instalar el certificado raiz en varios clientes dado que un cliente podria revocarnos un certificado.
http://wiki.cacert.org/BrowserClients

Con esto ya tenemos los certificados y las entidades creadas en la proxima entrega vemos como configurar el postfix para que use TLS.

Fuentes:
[1]http://es.wikipedia.org/wiki/Transport_Layer_Security
[2]
[3]

Probando postfix en Centos 5.5 Parte I

*.Siguiendo el mismo ejemplo que la guia de sendmail, aca con postfix vamos a configurarlo mas a pleno.*
Acuerdense de tener la zona configurada, y la red andando.

Como viene por defecto sendmail, vamos a buscar el paquete que me hace el switcheo.
[root@localhost mail]# yum search system-switch-mail
======================================== Matched: system-switch-mail =========================================
system-switch-mail.noarch : The Mail Transport Agent Switcher
system-switch-mail-gnome.noarch : A GUI interface for Mail Transport Agent Switcher.
[root@localhost mail]#

Uno es para la grafica y el otro para cualquier terminal.
Lo instalamos.
[root@localhost mail]# yum install system-switch-mail.noarch

Luego instalamos Postfix y dovecot.
[root@localhost mail]# yum install postfix dovecot

Luego ejecutamos system-switch-mail y elegimos postfix

Y vemos que este corriendo.

[root@localhost mail]# ps -eaf |grep -i postfix
root     16120     1  0 22:05 ?        00:00:00 /usr/libexec/postfix/master
postfix  16122 16120  0 22:05 ?        00:00:00 pickup -l -t fifo -u
postfix  16123 16120  0 22:05 ?        00:00:00 qmgr -l -t fifo -u
root     16129  3373  0 22:06 pts/1    00:00:00 grep -i postfix
[root@localhost mail]# 

Vemos si esta escuchando en el puerto 25

[root@localhost mail]# netstat -atnp |grep -i 25
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 16120/master
[root@localhost mail]#

Chequeamos:

[root@localhost mail]# nc 127.0.0.1 25
220 mail.localdomain ESMTP Postfix
ehlo villadalmine.com
250-mail.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Ahora tenemos que empezar a configurar nuestro correo.

Vamos a ver estos archivos:

/etc/postfix/master.cf
/etc/postfix/main.cf

[root@localhost mail]# ls -la /etc/postfix/ma*.cf
-rw-r–r– 1 root root 26737 Aug 14 2008 /etc/postfix/main.cf
-rw-r–r– 1 root root 4137 Aug 14 2008 /etc/postfix/master.cf
[root@localhost mail]#

Unas lineas del master.cf
[root@localhost mail]# head -n 10 /etc/postfix/master.cf
smtp inet n – n – – smtpd
#submission inet n – n – – smtpd
[root@localhost mail]#
Ahi vemos como esta configurado el demonio.

Podriamos editar a mano el main.cf pero tambien podemos hacerlo asi.

[root@localhost mail]# postconf -e ‘mydomain=villadalmine.com’
[root@localhost mail]# postconf -e ‘myhostname=mail.villadalmine.com’
[root@localhost mail]# postconf -e ‘mydestination=$mydomain, $myhostname, localhost.localdomain, localhost’
[root@localhost mail]# postconf -e ‘inet_interfaces=all’

Ahora reiniciamos el postfix

[root@localhost mail]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
[root@localhost mail]#

Probamos si me contesta:
[root@localhost mail]# nc mail.villadalmine.com 25
220 mail.villadalmine.com ESMTP Postfix
ehlo villadalmine.com
250-mail.villadalmine.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Vamos a enviar un email:
[root@localhost mail]# ls -la |mail -s “rino” root@villadalmine.com
Siempre mirar los logs !
Sep 18 22:23:19 localhost postfix/qmgr[16283]: 279EE58545: from=, size=553, nrcpt=1 (queue active)
Sep 18 22:23:19 localhost postfix/local[16293]: 279EE58545: to=, relay=local, delay=0.07, delays=0.04/0.02/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Sep 18 22:23:19 localhost postfix/qmgr[16283]: 279EE58545: removed

Vemos como quedo ..

[root@localhost mail]# mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 root@mail.villadalmi  Sat Sep 18 22:23  19/713   "rino"
& 


Vamos analizar como postfix arma el mail:

[root@localhost mail]# more root
#Muy importante este tema de las cabeceras…
From root@mail.villadalmine.com Sat Sep 18 22:23:19 2010
Return-Path:
X-Original-To: root@villadalmine.com
Delivered-To: root@villadalmine.com
Received: by mail.villadalmine.com (Postfix, from userid 0)
id 279EE58545; Sat, 18 Sep 2010 22:23:19 -0300 (ART)
To: root@villadalmine.com
Subject: rino
Message-Id: <20100919012319.279EE58545@mail.villadalmine.com>
Date: Sat, 18 Sep 2010 22:23:19 -0300 (ART)
From: root@mail.villadalmine.com (root)
Status: O

total 32
drwxrwxr-x 2 root mail 4096 Sep 18 21:37 .
drwxr-xr-x 17 root root 4096 Sep 18 22:04 ..
-rw-rw—- 1 juan mail 0 Sep 18 20:46 juan
-rw-rw—- 1 pepe mail 1831 Sep 18 20:52 pepe
-rw-rw—- 1 rpc mail 0 Sep 18 02:56 rpc

[root@localhost mail]#

Aca como vemos los mails se van ir enviando a la misma cola..
Podemos elegir otro formato de buzon de correo dado que al tenerlos todo en un archivo si llega a pasar algo perdemos todo !!
Una alternativa al mbox es el Maildir. En lugar de trabajar con un solo archivo , Maildir guarda sus correos en archivos separados en un directorio.
Esto permite interactuar multiples procesos con su buzon de correos sin entrar en conflicto o corromperse. Sin mencionar que es mas facil de realizar copias de seguridad y restauraciones.
El formato de Maildir es un directorio, llamado Maildir, que contiene tres subdirectorios, cur,new y tmp.
Los mensajes de correo primer se reciben en el directorio tmp y reciben un nombre unico (generalmente fecha actual, nombre del hosty otras caracteristicas). Este correo se mueve despues al directorio new donde se situan en un estado “no leido”. Cuando su MUA o cliente de correo se conecta al buzon de correos, detecta el correo en el directorio newy lo mueve al directorio cur.

Asi que bueno ahora manos a la obra a cambiar nuestro buzon en postfix.

[root@localhost mail]# postconf -e “home_mailbox=Maildir/”

Luego tambien tendriamos que poner en blanco la opcione de mailbox_command que se refiere a procmail o maildrop que se van a utilizar para procesar correo. Estas herramientas llamadas MDA o filtro de correos, pueden realizar acciones de recepcion de correo como si se estuviera recibiendo en su buzon de correo. Mas adelante vermos como se usan.

[root@localhost mail]# postconf -e “mailbox_command=”

Antes de reiniciar el postfix tendremos que crear en /etc/skel los directorios que corresponden para que nos facilite la vida, cuando creemos mas usuarios para el correo.
Esto lo podemos hacer con el comando maildrop que se tiene que instalar.
–> [root@localhost mail]# rpm -Uvh ftp://ftp.silfreed.net/repo/rhel/5/i386/silfreednet/RPMS/maildrop-2.0.4-1.el5.i386.rpm

O podemos hacerlo de forma manual 🙂
Con maildirmake
[root@localhost mail]# maildirmake /etc/skel/Maildir
[root@localhost mail]# maildirmake -f Sent /etc/skel/Maildir
[root@localhost mail]# maildirmake -f Trash /etc/skel/Maildir
[root@localhost mail]# maildirmake -f Trash /etc/skel/Maildir
[root@localhost mail]# maildirmake -f Drafts /etc/skel/Maildir
[root@localhost mail]# maildirmake -f Spam /etc/skel/Maildir
[root@localhost mail]#

Sino de la forma manual:
mkdir -p /etc/skel/Maildir/{cur,new,tmp}; chmod -R 0700 /etc/skel/Maildir

Borramos los usuarios..
[root@localhost Maildir]# userdel -r pepe
[root@localhost Maildir]# userdel -r juan
le volvemos a poner la clave..
esto se que no es necesario.. pero como estamos probando..

Reiniciamos el postfix devuelta…
[root@localhost Maildir]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
[root@localhost Maildir]#

Y ahora mandamos un mail con root

[root@localhost Maildir]# ls -la |mail -s "hola" root@villadalmine.com
[root@localhost new]# ls -la |mail -s "hola" root@villadalmine.com
[root@localhost new]# ls
1284861349.Vfd00I8a35M253337.mail
[root@localhost new]# pwd
/root/Maildir/new
[root@localhost new]#

Fijense que cuando mandamos un mail ahora ya no dice mas mailbox
Sep 18 23:03:57 localhost postfix/local[16665]: 02D7C5853E: to=, relay=local, delay=0.07, delays=0.05/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Sep 18 23:03:57 localhost postfix/qmgr[16567]: 02D7C5853E: removed

Hasta aca llegamos, luego veremos como utilizar encriptacion.