+---------------------------------------------------------------+
| Guia rapida de Cryptoloop + LVM aramosf @ unsec . net |
| 19/Ene/2004 v1.0 bladi-sec @ novasec . es |
| http://www.unsec.net |
+---------------------------------------------------------------+
Lo Necesario:
+-------------+
El proposito de esta mini guia es crear un volumen logico con LVM2
(Logical Volume Manager) y este a su vez cifrado con el algoritmo AES-128.
Usando dos discos; uno de ellos de sistema, y el otro completamente. Conside-
ramos que ya se tiene el concepto claro de que es un LVM y Cryptoloop.
Toda la documentacion y pruebas se han realizado en un Linux Fedora 1,
con kernel 2.6.1 y lvm version 2.
Partimos de la base de que utilizamos un sistema con un kernel con soporte
loop_aes; 2.6 o 2.4 parcheado, y tiene instalado los paquetes necesarios lvm2
(y su soporte en el kernel). Tambien es necesario la ultima version de mount
y util-linux: 2.12
Las opciones necesarias para LVM en el kernel son:
Device Drivers --->
Multi-device support (RAID and LVM) --->
[*] Multiple devices driver support (RAID and LVM)
...
<*> Device mapper support
Opciones necesarias para CryptoLoop AES:
Cryptographic options --->
<*> AES cipher algorithms
En este ejemplo suponemos que hda2 es el directorio raiz, y hdb un disco
duro adicional (ambos tienen un tamaño de 40Gbs):
hda hdb
.··---··. .··---··.
·..___..· ·..___..·
hda1 | swap | ] 256Mb | | -+
|-------| -+ | | |
| | | | hdb | | 40Gbs
hda2 | / | | 39Gb | | |
| | | | | |
·..___..· -+ ·..___..· -+
Configuracion
+-------------+
A continuacion, se presentan todos los comandos que son necesarios y su
significado:
Creamos un archivo de 35gbs para el lvm, el resto se dejara para el sistema
operativo:
# dd if=/dev/zero of=datos1 bs=1M count=35000
Con este comando se crea un fichero lleno de ceros, de un tamaño de 35000Mb
y de nombre "datos1". Para mayor seguridad se recomienda hacerlo con
/dev/urandom en vez de /dev/zero.
Asignamos a /dev/loop1 nuestro fichero:
# losetup /dev/loop1 datos1
Creamos el PV:
# lvm pvcreate /dev/loop1
No physical volume label read from /dev/loop1
Physical volume "/dev/loop1" successfully created
Ahora vamos con el segundo disco: eliminamos la tabla de particiones de
hdb:
# dd if=/dev/zero of=/dev/hdb bs=1k count=1
# blockdev --rereadpt /dev/hdb
Un metodo alternativo a este, y mas paranoico seria utilizar:
# shred -n 1 -v /dev/hdb
Creamos el PV para el disco duro hdb:
# lvm pvcreate /dev/hdb
No physical volume label read from /dev/hdb
Physical volume "/dev/hdb" successfully created
Creamos un volumen llamado "PN":
# lvm vgcreate PN /dev/loop1 /dev/hdb
Volume group "PN" successfully created
Comprobamos que vamos bien, y averiguamos el tamaño de nuestro futuro
volumen:
# lvm pvdisplay
--- Physical volume ---
PV Name /dev/loop1
VG Name PN
PV Size 34.17 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 8748
Free PE 8748
Allocated PE 0
PV UUID SHMmrX-tZy5-2bKV-J2JQ-a6NU-5YOx-xJF1hr
--- Physical volume ---
PV Name /dev/hdb
VG Name PN
PV Size 55.89 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 14308
Free PE 14308
Allocated PE 0
PV UUID dDBCGR-swNs-6oS3-Be2t-TGnf-nFxs-hRJkr6
Creamos el volumen logico de 89G (sumas de los PV SIZE 34.17+55.89)
# lvm lvcreate -n DURO PN -L89G
Logical volume "DURO" created
Configuramos con AES a 128 el loop2 con nuestro nuevo volumen:
# losetup -e aes-128 /dev/loop2 /dev/PN/DURO
Password:
NOTA: pueden usarse otros algoritmos o un tamaño mas grande (256), pero el
rendimiento se vera afectado en torno al 20%. Nos pedira una contraseña que
tendremos que introducir cada vez que montemos el volumen:
Para añadir mayor seguridad, podemos utilizar la opcion -S xxxxxxxxxx,
donde "xxxxxxxxxx", es un seed al azar tecleado por nosotros mismos, esto
ayudara a preveer ataques de diccionario.
Formateamos el volumen:
# mke2fs -j /dev/loop2
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
....
Finalizacion
+------------+
YA ESTA TERMINADO !!
Para montar:
# mount -t ext3 -oencryption=aes-128 /dev/PN/DURO /mnt
Password:
Si meteis mal la password, mostrara este error:
# mount -t ext3 -oencryption=aes-128 /dev/PN/DURO /mnt
Password:
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
or too many mounted file systems
(could this be the IDE device where you in fact use
ide-scsi so that sr0 or sda or so is needed?)
Comprobaciones
+--------------+
# df -h
/dev/mapper/PN-DURO 88G 33M 84G 1% /mnt
Cada vez que se desmonte, recuerda que hay que hacer "attach" antes de
montar:
# losetup -e aes-128 /dev/loop2 /dev/PN/DURO
# mount -t ext3 -oencryption=aes-128 /dev/PN/DURO /mnt
Y si quieres que cuando se reinicie la maquina este todo correcto:
# lvm vgchange -an
# lvm lvchange /dev/PN/DURO -ay
Si quereis comprobar la velocidad del volumen creado, lo mejor es utilizar
bonnie++,
http://www.coker.com.au/bonnie++/.
Documentacion y referencia
+--------------------------+
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Cryptoloop-HOWTO.html
http://tldp.org/HOWTO/LVM-HOWTO/
http://lists.sistina.com/pipermail/linux-lvm/2002-October/012541.html
http://vware.hypermart.net/howto_filesystem_encryption.htm
CREDITOS: idea,soporte,guru: bladi / dardhal