Появилась задача реализовать шифрованные контейнеры для виртуальной машины на 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.: Заметка нацелена на новичков или людей, никогда не решавших подобные задачки.
ссылка на оригинал статьи http://habrahabr.ru/post/259365/
Добавить комментарий