GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cifrado de disco mediante servicios de clave basados ​​en red (NBDE) en CentOS/RHEL 8

Pregunta :¿Cómo crear un sistema de archivos XFS encriptado que se desbloquee automáticamente en el arranque usando clevis (cliente) y tang (servidor)?

Red Hat ha incluido el cifrado de disco durante años con Linux Unified Key Setup-on-disk-format (LUKS). Esta solución es fácil de implementar y configurar para sus necesidades de cifrado, pero la gestión y la practicidad de su gestión de claves es horrible para los servidores. Requiere una frase de contraseña en el momento del arranque o montaje que debe ingresarse manualmente. Esto hace que la solución sea un dolor de cabeza para los administradores de sistemas.

A partir de RHEL 7.4, con soporte completo en RHEL 7.5, Red Hat implementó un componente adicional que se puede aprovechar para habilitar discos LUKS de forma remota. Esto se denomina Cifrado de disco vinculado a la red (NBDE).

El cifrado de disco vinculado a la red (NBDE) es:

  • La configuración de clave unificada de Linux (LUKS) es un estándar de cifrado de disco.
  • Cryptsetup configura el cifrado basado en disco e incluye soporte para LUKS
  • Tang es un servicio de red que proporciona servicios criptográficos a través de HTTP
  • Clevis es un marco de cifrado. Clevis puede usar claves proporcionadas por Tang como frase de contraseña para desbloquear volúmenes LUKS
  • El cliente, clevis, tiene que ser CentOS/RHEL 8, ya que clevis en CentOS/RHEL 7 tiene una funcionalidad limitada y requiere un conjunto diferente de comandos que no se tratan en esta publicación.
  • El servidor, tang, se puede ejecutar en CentOS/RHEL 7 u 8

Configurar servidor Tang

1. Instale los RPM:

# dnf install -y tang

2. Permita el puerto requerido a través del firewall:

# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload

3. Habilite el servicio:

# systemctl enable --now tangd.socket

Configurar cliente de horquilla

Crear un sistema de archivos encriptado

1. Instale los paquetes necesarios en el cliente:

# dnf install -y cryptsetup clevis-systemd clevis-luks

2. Crear un disco encriptado en /dev/xvdc:

Nota :asegúrese de que xvdc sea una unidad vacía, ya que se eliminarán todos los datos.
# cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 --key-size 512 --hash sha256 --use-random /dev/xvdc
WARNING!
========
This will overwrite data on /dev/xvdc irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/xvdc:
Verify passphrase:

3. Desbloquee el dispositivo de bloqueo:

# cryptsetup --verbose luksOpen /dev/xvdc demodisk
Enter passphrase for /dev/xvdc:
Key slot 0 unlocked.
Command successful.

4. Cree un sistema de archivos en el disco cifrado:

# mkfs.xfs /dev/mapper/demodisk
meta-data=/dev/mapper/demodisk isize=512 agcount=4, agsize=326656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1306624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

5. Identifique el UUID del nuevo sistema de archivos:

# blkid -s UUID /dev/mapper/demodisk
/dev/mapper/demodisk: UUID="24f9bfe9-1f6d-491d-8fa2-eab946464166"

6. Cree una entrada fstab para el sistema de archivos:

# echo "UUID=24f9bfe9-1f6d-491d-8fa2-eab946464166 /encrypted xfs defaults 0 0" | sudo tee -a /etc/fstab
UUID=24f9bfe9-1f6d-491d-8fa2-eab946464166 /encrypted xfs defaults 0 0

7. Monte el sistema de archivos:

# mkdir /encrypted
# mount /encrypted

Agregue una clave remota al dispositivo encriptado

1. Ver las claves:

# cryptsetup luksDump /dev/xvdc
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]

Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 399588
Threads: 4
Salt: 0d 75 99 50 22 e2 2a 93 82 51 fc 49 6f 54 61 fe
10 b6 24 62 21 2e 07 2b 04 0a 56 c8 03 23 6f 8f
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 30284
Salt: de a0 3f 92 e1 c7 1d 5e 0e 52 65 37 19 84 2b 3c
46 2a ba 56 77 25 78 c3 27 fa 5b 07 e1 9a 25 24
Digest: 5b 95 93 af 0e a9 8d 24 cb 35 1e 77 e5 9f 15 85
eb d1 53 85 5b e4 10 2a 68 d0 11 6b 9b 71 f4 05

2. Agregar clave remota:

# clevis luks bind -d /dev/xvdc tang '{"url":"http://"}'
The advertisement contains the following signing keys:

KlbbdbNpdMrVwrk6hZ1wCCeabOY

Do you wish to trust these keys? [ynYN] Y
Enter existing LUKS password:

3. Muestre que Clevis está usando una nueva ranura de llave en la ranura 1:

# cryptsetup luksDump /dev/xvdc
LUKS header information
Version: 2
Epoch: 5
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)

Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]

Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 399588
Threads: 4
Salt: 0d 75 99 50 22 e2 2a 93 82 51 fc 49 6f 54 61 fe
10 b6 24 62 21 2e 07 2b 04 0a 56 c8 03 23 6f 8f
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
1: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 508554
Threads: 4
Salt: 21 c8 91 58 22 9f 50 83 77 6f fe 12 0b 3a 66 3c
d2 47 70 88 45 70 5e f1 c1 1e d0 e1 8f 96 97 ce
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
0: clevis
Keyslot: 1
Digests:
0: pbkdf2
Hash: sha256
Iterations: 30284
Salt: de a0 3f 92 e1 c7 1d 5e 0e 52 65 37 19 84 2b 3c
46 2a ba 56 77 25 78 c3 27 fa 5b 07 e1 9a 25 24
Digest: 5b 95 93 af 0e a9 8d 24 cb 35 1e 77 e5 9f 15 85
eb d1 53 85 5b e4 10 2a 68 d0 11 6b 9b 71 f4 05

Montar el sistema de archivos encriptado en el arranque

1. Identifique el UUID del dispositivo de bloqueo para su uso posterior:

# blkid -s UUID /dev/xvdc
/dev/xvdc: UUID="47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26"

2. Habilite el servicio usando el UUID descubierto para '/dev/xvdc':

# systemctl enable [email protected]
Created symlink /etc/systemd/system/basic.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].

3. Desbloquee el dispositivo de bloqueo durante el arranque:

# echo "encrypteddisk UUID=47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26 - _netdev" | sudo tee -a /etc/crypttab
encrypteddisk UUID=47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26 - _netdev

4. Monte el sistema de archivos más tarde en el arranque:

# vi /etc/fstab

cambiar la entrada:

UUID=24f9bfe9-1f6d-491d-8fa2-eab946464166 /encrypted xfs defaults 0 0

a:

/dev/mapper/encrypteddisk /encrypted xfs _netdev 0 0

5. Reinicie el servidor y verifique la funcionalidad:

# reboot
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 8.5M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/mapper/ol_dhcp-root 22G 1.6G 20G 8% /
/dev/xvda1 1014M 221M 794M 22% /boot
tmpfs 365M 0 365M 0% /run/user/0
/dev/mapper/encrypteddisk 5.0G 68M 5.0G 2% /encrypted

Opcional:eliminar la frase de contraseña conocida

Puede eliminar la frase de contraseña conocida de la ranura 0 y exigir el uso del servidor tang. Si no se puede acceder al servidor tang, el disco no se puede desbloquear y el sistema de archivos no se puede acceder.

1. Eliminar la frase de contraseña:

# cryptsetup --verbose luksRemoveKey /dev/xvdc
Enter passphrase to be deleted:
Key slot 0 unlocked.
Keyslot 0 is selected for deletion.
Key slot 0 removed.
Command successful.

2. Muestre que ahora solo hay ranuras de llave Clevis:

# cryptsetup --verbose luksRemoveKey /dev/xvdc
Enter passphrase to be deleted:
Key slot 0 unlocked.
Keyslot 0 is selected for deletion.
Key slot 0 removed.
Command successful.
# cryptsetup luksDump /dev/xvdc
LUKS header information
Version: 2
Epoch: 6
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)

Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]

Keyslots:
1: luks2 
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 508554
Threads: 4
Salt: 21 c8 91 58 22 9f 50 83 77 6f fe 12 0b 3a 66 3c
d2 47 70 88 45 70 5e f1 c1 1e d0 e1 8f 96 97 ce
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
0: clevis
Keyslot: 1
Digests:
0: pbkdf2
Hash: sha256
Iterations: 30284
Salt: de a0 3f 92 e1 c7 1d 5e 0e 52 65 37 19 84 2b 3c
46 2a ba 56 77 25 78 c3 27 fa 5b 07 e1 9a 25 24
Digest: 5b 95 93 af 0e a9 8d 24 cb 35 1e 77 e5 9f 15 85
eb d1 53 85 5b e4 10 2a 68 d0 11 6b 9b 71 f4 05

3. Reinicie y verifique la funcionalidad:

# reboot
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 8.5M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/mapper/ol_dhcp-root 22G 1.6G 20G 8% /
/dev/xvda1 1014M 221M 794M 22% /boot
/dev/mapper/encrypteddisk 5.0G 68M 5.0G 2% /encrypted
tmpfs 365M 0 365M 0% /run/user/0


Cent OS
  1. CentOS / RHEL 7:Cómo modificar los nombres de la interfaz de red

  2. CentOS/RHEL 7:Configuración de direcciones IP estáticas mediante archivos de configuración de interfaz de red

  3. CentOS/RHEL 7:cómo crear un enlace de red (equipo de NIC) usando nmcli

  4. Configurar nombres NIC persistentes de adaptadores de red en CentOS/RHEL mediante reglas udev

  5. No se pueden iniciar los servicios RDMA en CentOS/RHEL 7

Cómo configurar una interfaz de red virtual en RHEL 8/CentOS 8

Cómo configurar la vinculación de la interfaz de red en RHEL 8 / CentOS 8 Linux

Cómo instalar Flameshot en RHEL/CentOS usando Snapcraft

3 formas de crear un puente de red en RHEL/CentOS 8

Cómo instalar varios servidores CentOS/RHEL utilizando fuentes de red FTP

Cómo eliminar la configuración de red de vinculación en CentOS/RHEL