Cifra discos, particiones y archivos con LUKS en tu servidor Linux

Cifra discos, particiones y archivos con LUKS en tu servidor Linux

Alberto López

El cifrado de datos en discos duros o SSD, particiones y archivos es algo fundamental hoy en día. Actualmente tenemos la posibilidad de cifrar los datos de un servidor NAS, de un ordenador de sobremesa e incluso de un ordenador portátil. Sobre todo, en los ordenadores portátiles es donde más se necesita el cifrado de datos, porque si lo perdemos, podrían acceder a todos nuestros datos, lo mismo que si perdemos nuestro disco duro o pendrive. Hoy en RedesZone os vamos a enseñar a cifrar todo el contenido del disco duro desde cero, haciendo uso de LUKS en Linux.

Formas de cifrar datos en Linux

En sistemas operativos Linux tenemos muchas opciones para cifrar datos en Linux, por ejemplo, podemos usar dm-crypt, LUKS, eCryptfs e incluso programas como Veracrypt que son realmente versátiles y muy recomendables. LUKS (Linux Unified Key Setup) nos permite cifrar discos, particiones y también volúmenes lógicos que nosotros creemos en nuestro equipo. Algunas de las ventajas que tiene LUKS frente a otros, es que su uso es realmente sencillo, sin tener que configurar o ejecutar complicados comandos, está incluido en el propio kernel, por tanto, el rendimiento a la hora de cifrar/descifrar datos será muy elevado, también debemos tener en cuenta que podremos gestionar la clave de cifrado como nosotros deseemos.

Este tutorial lo vamos a dividir claramente en dos secciones, en la primera sección os enseñaremos cómo instalar un sistema operativo Debian con cifrado en toda la partición, cifrado por defecto, y en la segunda sección os enseñaremos a cifrar el equipo una vez instalado Debian normalmente, sin cifrado en la partición por defecto. Un detalle muy importante, es que la partición orientada al «boot» no irá cifrada, para permitir leer la información, pero el resto del disco sí estará cifrado con LUKS, ya sean particiones o volúmenes lógicos (LVM).

Ventajas de usar LUKS

LUKS es actualmente el estándar que se utiliza para el cifrado de discos, particiones y archivos en sistemas operativos Linux, por tanto, es recomendable hacer uso de LUKS frente a otras herramientas que no son estándar, porque LUKS siempre lo tendremos instalado en cualquier sistema operativo basado en Linux, sin necesidad de instalar ningún software adicional ni realizar complicadas configuraciones.

Una ventaja de LUKS, es que, en la instalación del propio sistema operativo Linux tendremos la posibilidad de cifrar la partición de disco donde vamos a instalar el sistema, e incluso también podremos cifrar solamente la carpeta del usuario, tal y como os enseñaremos próximamente. Gracias a que tendremos la posibilidad de crear particiones cifradas, estaremos protegiendo desde cero toda la información que tengamos en nuestros discos duros o SSD.

Mientras que programas como VeraCrypt necesita hacer uso del propio programa para descifrar particiones o archivos, LUKS ya viene instalado de forma predeterminada en nuestro sistema operativo sin necesidad de hacer nada más. Otro aspecto positivo es que este sistema de cifrado está más que probado y su código fuente auditado, por tanto, podremos tener la seguridad de que LUKS es un sistema de encriptado robusto y libre de fallos de seguridad (hasta el momento, porque la seguridad al 100% no existe).

Instalar Debian o Linux con cifrado LUKS por defecto

En el asistente de instalación de Debian, ya sea con la interfaz gráfica de usuario completa, o con el asistente de instalación con interfaz mínima, tenemos la posibilidad de configurar todo el disco con un LVM cifrado, con el objetivo de tener la máxima confidencialidad cuando usemos el equipo, ya que todos los datos de la partición del sistema y de los datos estarán cifradas.

Simplemente tendremos que elegir «Guiado – Utilizar todo el disco y configurar LVM cifrado», a continuación, elegimos el disco, y seleccionamos si lo queremos todo en una partición o separarlo por particiones, esto no importa porque podremos separar la partición de /home en otra.

Nos indicará que, si queremos guardar todos los cambios realizados, es muy recomendable hacer uso de LVM para posteriormente ampliar o disminuir su capacidad. Una vez que lo hayamos hecho, el sistema operativo se encargará de borrar todo el disco con datos aleatorios para mejorar la seguridad y evitar la recuperación de los datos. Esto tardará un tiempo, dependiendo del tamaño del disco que hayamos seleccionado.

Una vez que termine, nos indicará que pongamos la contraseña de cifrado, para cifrar y descifrar el disco con esta contraseña. Como mínimo se recomienda poner 8 caracteres, pero nuestra recomendación es poner mínimo 12 caracteres, usando una contraseña robusta. Una vez terminado, nos saldrá un resumen de todo lo que hará el asistente de instalación de Debian en nuestro disco, lo más importante es la parte de «Cifrado sda5_scrypt», un detalle importante es que el /boot no se encontrará cifrado, y tampoco el intercambio (swap), por tanto, os recomendamos no usar nada de swap nunca, o cifrarlo a posteriori.

Una vez que hayamos visto todo lo que se va a hacer, indicamos que queremos escribir los cambios en el disco, y también instalar el cargador de arranque en el grub, seleccionando el disco /dev/sda que tenemos.

Una vez que hayamos terminado la instalación, nos saldrá el grub, y elegiremos la primera opción, o dejamos pasar el tiempo. Automáticamente nos pedirá la contraseña para poder iniciar el sistema operativo, si no introducimos la contraseña directamente no se podrá iniciar, porque todo está cifrado. Si introducimos la clave, veremos cómo empiezan a arrancar los diferentes servicios en Debian.

Si queremos comprobar las particiones que tenemos creadas, podemos poner el comando siguiente:

lsblk --fs

Si queremos ver las características de LUKS (algoritmo de cifrado simétrico usado, longitud de clave etc), podemos poner el siguiente comando:

cryptsetup luksDump /dev/sda5

El /dev/sda5 es en nuestro caso, si has realizado una instalación diferente es posible que cambie este dato. Tal y como podéis ver, LUKS cifra todos los datos con AES-XTS en su versión de 512 bits, utiliza un PBKDF argon2i, y un hash SHA256.

Tal y como habéis visto, configurar de manera predeterminada nuestro sistema operativo con Linux es realmente fácil, tan solo necesitamos seguir los pasos del asistente de configuración, sin necesidad de hacer nada más. Una vez que ya sabemos cómo cifrar todos los datos de forma predeterminada, vamos a ver cómo hacerlo cuando ya está el sistema operativo instalado.

Configurar cifrado LUKS en un sistema ya instalado sin cifrado previo

En esta sección del tutorial vamos a ver cómo podemos cifrar particiones cuando ya están creadas, e incluso cómo podemos cifrar cualquier archivo con LUKS que nosotros tengamos en el sistema operativo. Estas pruebas las realizaremos con un sistema Debian 10 sin tener nada cifrado por defecto, ni partición del sistema, datos ni nada.

Lo primero que tenemos que hacer es instalar LUKS en el sistema operativo, porque no viene instalado por defecto si no lo hemos utilizado en el asistente de instalación. La instalación se realiza directamente desde el repositorio oficial de Debian de la siguiente forma:

sudo apt install cryptsetup

Una vez instalado, ya podremos utilizarlo para cifrar el contenido de discos duros, particiones o cualquier dispositivo de almacenamiento extraíble.

Antes de empezar, siempre es recomendable formatear por completo la partición y reescribir los datos, para tener la mejor seguridad posible, de esta forma, se reescribirá toda la partición o disco con información aleatoria, para que sea muy difícil o casi imposible recuperar información. Actualmente LUKS no permite cifrar el disco o partición cuando está en uso, por tanto, tendríamos que hacerlo desde otro equipo. Además, hay que hacer uso de «cryptsetup-reencrypt» que nos servirá para reencriptar la partición totalmente, sin pérdida de datos, aunque sería muy recomendable que hicieras una copia de seguridad de los archivos importantes antes de hacerlo. Esta herramienta permite cifrar los datos en el dispositivo LUKS insitu, pero es necesario que no esté en uso la partición.

Cifrar cualquier disco o partición (con pérdida de datos)

Lo primero que tenemos que hacer es crear una nueva partición en el disco, para posteriormente utilizarla. Ejecutamos el siguiente comando:

sudo fdisk /dev/sdb

Y continuamos poniendo «n» para crear una nueva partición, ponemos «p» para hacerla primaria, y aceptamos los valores que nos indican para tener una partición de todo el disco duro, si queremos hacerla más pequeña, tendremos que modificar los sectores para esta partición en concreto.

Una vez que hayamos hecho esto, deberemos poner la partición sdb1 recién creada con el formato LUKS, para ello ejecutamos el siguiente comando:

sudo cryptsetup luksFormat /dev/sdb1

Ponemos «YES» en mayúsculas, introducimos la clave que queremos, y esperamos hasta que esté listo.

Si ejecutamos el comando:

lsblk -f

Podremos ver todos los discos duros, las particiones y el sistema de archivos que estamos utilizando. Deberíamos ver que el sdb1 tenemos «crypto_LUKS» como aparece aquí:

Una vez que lo hayamos hecho, tendremos que abrir esta partición con LUKS que acabamos de crear, para ello ponemos el comando:

cryptsetup luksOpen /dev/sdb1 particioncifrada

Introducimos la contraseña, y a continuación volvemos a ejecutar el «lsblk -f» y nos aparecerá «particioncifrada» que es el nombre identificador que le hemos dado, pero podemos cambiarlo en cualquier momento.

Ahora tenemos que darle formato de archivos a esta partición, lo normal sería hacerlo con EXT4 también, para ello, ponemos el siguiente comando:

mkfs.ext4 /dev/mapper/particioncifrada

Y ya tendremos el sistema de archivos EXT4 en esta partición cifrada.

Ahora deberemos montar la partición a un directorio, para hacerlo, deberemos crear en la /home o donde queramos el punto de montaje:

mkdir -p /home/bron/particioncifrada/archivos

Y ahora tenemos que montarlo:

mount /dev/mapper/particioncifrada /home/bron/particioncifrada/archivos

Y si accedemos al directorio «/home/bron/particioncifrada/archivos» podremos escribir todos los datos que queramos, el cifrado es al vuelo y totalmente transparente.

Si reiniciamos el ordenador, no estará montada la unidad, ni tampoco tendremos abierta la partición con LUKS, por tanto, cada vez que reiniciemos y queramos acceder a esta partición, tendremos que hacer lo siguiente:

cryptsetup luksOpen /dev/sdb1 particioncifrada

Introducimos la contraseña cuando nos la pida, y montamos la unidad nuevamente:

mount /dev/mapper/particioncifrada /home/bron/particioncifrada/archivos

Si queremos que se nos abra y monte automáticamente al inicio del sistema operativo, tendremos que editar los archivos /etc/crypttab y /etc/fstab para poner esta partición, pero nuestra recomendación es que montéis la unidad manualmente y que os pida la contraseña, por seguridad, porque si no, tendrás que almacenar la clave en texto plano en la partición /boot/.

Ahora sabemos todo lo que necesitamos saber para poder cifrar discos completos o particiones usando LUKS y haciéndolo directamente desde Linux, incluso cuando el sistema ya se está ejecutando, tendremos que tener cuidado con nuestras contraseñas, pero estaremos hablando de un sistema tremendamente seguro con cifrado de datos.