Pull to refresh

TrueCrypt контейнер как хранилище для виртуальных машин XenServer

Reading time 3 min
Views 14K
Virtualization *
Sandbox
Появилась задача реализовать шифрованные контейнеры для виртуальной машины на XenServer, да еще и в добавок шифровать их с помощью TrueCrypt. Не найдя никакой полезной информации по теме в сети, решил поделиться заметкой по этому вопросу. На данный момент решение введено в эксплуатацию, работает и не кашляет.

Задачник спрашивает — зачем козе баян?

Ответов много, но самый распространенный — есть приватная информация, которую надо зашифровать от нежелательных глаз и особ в случае физического насилия над сервером.

Почему бы тогда не зашифровать данные на виртуальной машине?

Да, почему бы и нет. Но в моем случае пришлось бы шифровать порядка 20 машин и в случае перезагрузки пришлось бы подключать все 20 контейнеров, что не очень-то удобно. Поэтому зашифруем сразу диск и развернем на него все виртуальные машины.

От слов к делу

Перво-наперво нам нужен установленный XenServer. В интернете валом мануалов по этому процессу, поэтому я его пропущу.

Нам потребуется место на диске, куда установлен гипервизор или отдельный диск. Я думаю, что лучше для таких вещей использовать отдельный диск или даже рейд массив, ибо если информацию приватная настолько, что ее нужно шифровать, то ее потеря наверняка мало кого обрадует.

Процедура подготовки диска стандартная для linux систем и опытным пользователям не доставит хлопот, но на всякий случай напомню:

Разметим диск через:

#: fdisk /dev/sdx

Через mkfs.ext3 создадим файловую систему для раздела.

#: mkfs.ext3 /dev/sdx1

Добавим правила монтирования в fstab и пол дела сделано.

/dev/sda1       /mnt/xen        ext3    errors=remount-ro 0 0

Пришло время устанавливать truecrypt:

#: wget https://download.truecrypt.ch/current/truecrypt-7.1a-linux-console-x64.tar.gz
#: tar -zxvf truecrypt-7.1a-linux-console-x64.tar.gz
#: ./truecrypt-7.1a-setup-console-x64

Все круто, но в xen'е не хватает libfuse.so.2 по умолчанию. Управление гипервизором происходит из виртуальной машины на CentOS'е, поэтому для нас это не большая проблема:

#: yum --enablerepo=base --disablerepo=citrix install fuse-devel fuse 

Теперь все подготовлено для создания шифрованного контейнера:

#: truecrypt -c
Volume type:
 1) Normal
 2) Hidden
Select [1]: 1

Enter volume path: /mnt/xen/dts

Enter volume size (sizeK/size[M]/sizeG): 290G

Encryption algorithm:
 1) AES
 2) Serpent
 3) Twofish
 4) AES-Twofish
 5) AES-Twofish-Serpent
 6) Serpent-AES
 7) Serpent-Twofish-AES
 8) Twofish-Serpent
Select [1]: 1

Hash algorithm:
 1) RIPEMD-160
 2) SHA-512
 3) Whirlpool
Select [1]: 1

Filesystem:
 1) None
 2) FAT
 3) Linux Ext2
 4) Linux Ext3
 5) Linux Ext4
Select [2]: 1

Enter password: 
Re-enter password: 

Enter keyfile path [none]: 

Please type at least 320 randomly chosen characters and then press Enter:

Сам процесс займет какое-то время, все зависит от дисковой подсистемы и мощностей сервера.
У меня ~300Gb контейнер создавался около 2-х часов...

После создания контейнера монтируем его в систему, именно его мы будем пробрасывать в xen:

#: truecrypt --password=*** --filesystem=none --protect-hidden=no /mnt/xen/dts

Если все сделано правильно, то выполнив truecrypt --list мы увидим список подмонтированных контейнеров:

1: /mnt/xen/vms1 /dev/mapper/truecrypt1 - 

Ну и наконец-то сама цель всех наших подготовительных действий — пробрасываем контейнер в xenserver:

#: xe sr-create name-label=VMS shared=false device-config:device=/dev/mapper/truecrypt1 type=lvm sm-config:type=raw virtual-size=280GiB 
#: xe pool-param-set uuid=____ default-SR=____

uuid и default-SR можно узнать через xe pool-list и xe sr-list.

# xe pool-list
uuid ( RO)                : f33ac257-3fcf-1653-7b8f-105c83bf98d1
          name-label ( RW): 
    name-description ( RW): 
              master ( RO): 8362a425-4bef-4712-8864-a7542ba19c80
          default-SR ( RW): 950d80a8-bc98-1879-ba5f-653a01d0ced6

#: xe sr-list
....

uuid ( RO)                : 950d80a8-bc98-1879-ba5f-653a01d0ced6
          name-label ( RW): VMS
    name-description ( RW): 
                host ( RO): xenserver-luzdrjrf
                type ( RO): lvm
        content-type ( RO): 

На этом магия заканчивается и c помощью OpenXenManager или XenCenter спокойно можем создавать новые виртуальные машины в шифрованном контейнере, не боясь за их приватность в случае казусов с физическим рукоприкладством.

Естественно, в случае перезагрузки придется ручками подмонтировать контейнер, пробросить его заново и только потом запускать виртуалки, но для этого и старались, собственно говоря.

P.S.: Заметка нацелена на новичков или людей, никогда не решавших подобные задачки.
Tags:
Hubs:
Total votes 9: ↑8 and ↓1 +7
Comments 24
Comments Comments 24

Posts