Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  немного о безопасности
  VPN (PoPToP)
  PortSentry
  sysctl
  vpnd
  vtund
  ipfwcount
  FreeBSD & DSA
  mpd – легко и просто!
  IPSEC
  mpd + freeradius + mysql
  Бронированный FreeBSD
  sshit
  DSL-G804V и FreeBSD 6.2
  portaudit
  OpenVPN
  Bluetooth proximity monitor
  ESET NOD32
  GEOM-ELI
  stunnel для pop3,smtp
  NOD32 mirror
  mpd5 + ipfw-nat
  Openvpn 2 офиса
  Hotspot
  OpenVPN+авторизация
  termlog
  mpd5 + сжатие и шифрование
  ipsec_vpnc
  TOR Сервер
  Snort на FreeBSD
  Arpwatch
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco
www.lissyara.su —> статьи —> FreeBSD —> Security —> GEOM-ELI

GEOM-ELI

Автор: netcat.


Вообщем возникла у меня необходимость найти способ надежно скрывать некоторую информацию. Причина - присутствие определенных конфиденциальных данных на предприятии и впоследствии создание профилей ОС Windows на удаленном сервере некоторых людей, обладающих и работающих с информацией, которую нежелательно показывать кому-либо, например возможной внезапной проверке со стороны соответствующих органов. Более менее грамотная серьезная проверка сразу обращает внимание на компьютеры, а так же сервера (как хранилища информации), поэтому задача состояла в том, чтобы при случае либо вообще не прикладывать руку к ее сокрытию (на месте все равно никто не станет копаться во FreeBSD ИМХО), либо самый минимум.

Поэтому я решил использовать класс GEOM-ELI, появившийся во FreeBSD, начиная с 6.0 релиза. Вообщем, использование данного класса оказалось достаточно несложным, да и немногим отличающийся от руководства.
Мысли значит такие. Класс GEOM-ELI поддерживает 3 алгоритма шифрования - AES, 3DES и Blowfish. А также поддержка контроля целостности данных, реализованная алгоритмами:

HMAC/MD5
HMAC/SHA1
HMAC/RIPEMD160
HMAC/SHA256
HMAC/SHA384
HMAC/SHA512

Основной случайно сгенерированный ключ будет храниться на USB-флешке, ключевая фраза - в голове :) Решил использовать алгоритм Blowfish + HMAC/SHA512.

Итак, мы имеем тестовую машину Core Duo, 1024 Мб ОЗУ, общий физический объем SATA жестких дисков ~2 Террабайта в массивах, платформа - FreeBSD 6.2. Под шифрованный раздел отдадим заранее предназначенный для теста - /crypto размером ~100 Гб.(!)Если вы используете Soft Updates, ACL, MAC и т.п. на файловой системе - заранее сделайте tunefs до криптования.


$ uname -psr
FreeBSD 6.2-RELEASE i386
$ df -h
 
Filesystem       Size    Used   Avail Capacity  Mounted on
/dev/ar0s1a      4.7G     55M    4.3G     1%    /
devfs            1.0K    1.0K      0B   100%    /dev
/dev/ar0s1h       91G    4.0K     84G     0%    /ar0data
/dev/ar0s1g       95G    4.0K     87G     0%    /crypto
/dev/ar0s1f      9.5G     22K    8.7G     0%    /home
/dev/ar0s1d       14G    1.4G     12G    10%    /usr
/dev/ar0s1e      9.5G     71M    8.6G     1%    /var
/dev/ar1s1d      226G     62K    208G     0%    /ar1data
/dev/twed0s1d    451G    327G     88G    79%    /twed0data


Итак, для начала скомпилируем ядро с опциями:
options   GEOM_ELI
device    crypto


Смонтируем на запись флешку в каталог /mnt:
# ls /dev | egrep 'da\ws\w'
da0s1
da1s1
# mount_msdosfs -o rw /dev/da0s1 /mnt


Генерим ключ размером 64 байта на флешку:
# dd if=/dev/random of=/mnt/ar0s1g.key bs=64 count=1
1+0 records in
1+0 records out
64 bytes transferred in 0.000073 secs (877240 bytes/sec)


Отмонтируем слайс ar0s1g (/crypto):
# umount -f /dev/ar0s1g


Инициализируем провайдера - размер сектора 4Кб, алгоритм Blowfish, контроль целостности посредством HMAC/SHA512, размер ключа, скажем, 384 бита (максимальный ключ в Blowfish насколько я помню может быть 448 бита). Придумываем ключевую фразу.
# geli init -s 4096 -K /mnt/ar0s1g.key -e Blowfish -a hmac/sha512 -l 384 /dev/ar0s1g
Enter new passphrase:
Reenter new passphrase:


Связываем главный ключ с провайдером, ключевая фраза и сгенерированный файл на флешке служат дешифрацией главного ключа для создания нового GEOM провайдера. В каталоге /dev должен появиться файл /dev/ar0s1g.eli :
# geli attach -k /mnt/ar0s1g.key /dev/ar0s1g
Enter passphrase:
# ls /dev | grep eli
ar0s1g.eli


Далее достаточно продолжительная процедура создания файловой системы (у меня ушло на это около 4-часов):
# dd if=/dev/random of=/dev/ar0s1g.eli bs=1m
dd: /dev/ar0s1g.eli: short write on character device
dd: /dev/ar0s1g.eli: end of device
80000+0 records in
79999+1 records out
83886075904 bytes transferred in 14054.799294 secs (5968500 bytes/sec)
# newfs /dev/ar0s1g.eli
/dev/ar0s1g.eli: 80000.0MB (163839992 sectors) block size 16384, fragment size 4096
        using 238 cylinder groups of 336.98MB, 21567 blks, 21568 inodes.
super-block backups (for fsck -b #) at:
 160, 690304, 1380448, 2070592, 2760736, 3450880, 4141024, 4831168, 5521312, 
6211456, 6901600, 7591744, 8281888, 8972032, 9662176, 10352320, 11042464, 
11732608, 12422752, 13112896, 13803040, 14493184,
 15183328, 15873472, 16563616, 17253760, 17943904, 18634048, 19324192, 
20014336, 20704480, 21394624, 22084768, 22774912, 23465056, 24155200, 
24845344, 25535488, 26225632, 26915776, 27605920, 28296064,
 
#-----SKIPPED-----#

Создадим произвольный файл длиной 512 байт на нашей новой ФС:

# dd if=/dev/urandom of=/crypto/testfile bs=512 count=1
1+0 records in
1+0 records out
512 bytes transferred in 0.000068 secs (7535030 bytes/sec)
# ls -lh /crypto
total 2
drwxrwxr-x  2 root  operator   512B  4 дек 07:18 .snap
-rw-r--r--  1 root  wheel      512B  4 дек 09:52 testfile 

Теперь отмонтируем /crypto, отсоединим провайдера /dev/ar0s1g.eli и выведем список файлов директории. Тестового файла там нету.

# umount /crypto
# geli detach /dev/ar0s1g.eli
# ls -lh /crypto
total 0


Попробуем смонтировать устройство /dev/ar0s1g - неверный супер-блок:

# mount /dev/ar0s1g /crypto
mount: /dev/ar0s1g on /crypto: incorrect super block


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

# dd if=/dev/random of=/root/wrong.key bs=64 count=1
1+0 records in
1+0 records out
64 bytes transferred in 0.000058 secs (1104673 bytes/sec)
# geli attach -k /root/wrong.key /dev/ar0s1g
Enter passphrase:
Wrong key for ar0s1g.
# geli attach -k /mnt/ar0s1g.key /dev/ar0s1g
Enter passphrase:
Wrong key for ar0s1g.  


Для своего удобства, накатал несложный скрипт на $BASH для монтирования-демонтирования шифрованной файловой системы (при условии, что она единственная на сервере). особо его не тестил, но у меня работает вроде все:

#!/usr/local/bin/bash

printf "
#####################################################
#                  GEOM-ELI SCRIPT                  #
#####################################################
\n";

printf "[?]Enter 'y' to mount or 'n' to umount GEOM-ELI partition: [y/n] ";
read answer

case "${answer}" in

y|Y) printf "[?]Enter the encrypted partition: ";
     read partition;

     if [ ! -c /dev/${partition} ]
        then
        printf "[!]There is no such device - ${partition}";
        exit 1
     fi

     printf "[?]Enter the mounting point: ";
     read mount;

     if [ ! -d ${mount} ]
        then
        printf "[!]There is no such directory - ${mount}\n";
        exit 1
     fi

printf "[!]Your partition is ${partition}
[!]Mounting point is ${mount}
[!]Trying to mount USB Flash drive on /mnt ...\n";

     declare -a flash=( $(ls /dev | egrep 'da\ws\w') )

     if [ ${#flash[@]} -ge 1 ]
        then
          for usbd in ${flash}
            do
              umount -f /dev/${usbd} 2&>1
            done

     printf "[?]Enter the USB Flash device (${flash[*]:0}): [${flash[0]}]";
     read usbdevice;

     if [ -z ${usbdevice} ]
        then
          usbdevice=${flash[0]}

     if [ ! -d /mnt ]
        then
          mkdir /mnt
     fi

     if mount_msdosfs -o ro /dev/${usbdevice} /mnt
        then
          printf "[!]USB FLASH Device /dev/${usbdevice} successfully mounted on /mnt\n";
        else
          printf "[!]Can't mount USB Flash Device\n";
          exit 1;
     fi
     fi
     fi

     findgeli=$(df -H | grep eli | /usr/bin/awk '{print $1}')

     if [ ${findgeli} ]
        then
          printf "[!]You have already the GEOM-ELI encrypted provider at ${findgeli}\n";
          exit 1;
        else

     if geli attach -k /mnt/${partition}.key /dev/${partition} &> /dev/null
        then
          printf "[!]Key for GEOM-ELI provider attached to /dev/${partition}\n";
          mount /dev/${partition}.eli ${mount} &> /dev/null
          printf "[!]GEOM-ELI encrypted provider mounted to ${mount}\n\n";
          geli list
          umount -f /dev/${usbd} 2&>1
        else
          printf "[!]Can't attach the key /mnt/${partition}.key\n";
          exit 1;
     fi
     fi
;;

n|N) printf "[?]Deattach the GEOM-ELI provider ? [y/n]"
     read answer

     case "${answer}" in

     y|Y) device=$(df -H | grep .eli | /usr/bin/awk '{print $1}')
          mount=$(df -H | grep .eli | /usr/bin/awk '{print $6}')

     if [ ${device} ]
        then
          printf "[!]Found GEOM-ELI provider at ${device}\n";
          umount -f ${mount}
          geli detach ${device}
          printf "[!]GEOM-ELI provider deattached\n";
          exit 0;
        else
          printf "[!]GEOM-ELI provider not found\n";
          exit 1
     fi
;;

     n|N) printf "[!]Exiting\n";
          exit 0
;;

       *) printf "[!]Enter 'y' or 'n'\n";
          exit 1;
;;
     esac
;;

  *) printf "[!]Enter 'y' or 'n'\n";
     exit 1;
;;
esac  

Работает он примерно так:

# ./crypto.sh

#####################################################
#                  GEOM-ELI SCRIPT                  #
#####################################################

[?]Enter 'y' to mount or 'n' to umount GEOM-ELI partition: [y/n] y
[?]Enter the encrypted partition: ar0s1g
[?]Enter the mounting point: /crypto
[!]Your partition is ar0s1g
[!]Mounting point is /crypto
[!]Trying to mount USB Flash drive on /mnt ...
[?]Enter the USB Flash device (da0s1 da1s1): [da0s1]
[!]USB FLASH Device /dev/da0s1 successfully mounted on /mnt
Enter passphrase:
[!]Key for GEOM-ELI provider attached to /dev/ar0s1g
[!]GEOM-ELI encrypted provider mounted to /crypto

Geom name: ar0s1g.eli
EncryptionAlgorithm: Blowfish-CBC
KeyLength: 384
AuthenticationAlgorithm: HMAC/SHA512
Crypto: software
UsedKey: 0
Flags: AUTH
Providers:
1. Name: ar0s1g.eli
   Mediasize: 83886075904 (78G)
   Sectorsize: 4096
   Mode: r1w1e1
Consumers:
1. Name: ar0s1g
   Mediasize: 104857600000 (98G)
   Sectorsize: 512
   Mode: r1w1e1 

И так:

# ./crypto.sh

#####################################################
#                  GEOM-ELI SCRIPT                  #
#####################################################

[?]Enter 'y' to mount or 'n' to umount GEOM-ELI partition: [y/n] n
[?]Deattach the GEOM-ELI provider ? [y/n] y
[!]Found GEOM-ELI provider at /dev/ar0s1g.eli
[!]GEOM-ELI provider deattached 

Вообщем, мне так удобней. Да, и еще. Желательно не забыть из /etc/fstab убрать строку устройства ar0s1g, а то система не загрузится

# sed -ie '/ar0s1g/d' /etc/fstab 

Ну вот в принципе и все.



размещено: 2007-12-08,
последнее обновление: 2007-12-08,
автор: netcat

оценить статью:





Хостинг HOST-FOOD

2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-22, Mufanu
named 9.7.0

Система доменных имен (Domain Name Service, DNS) - одна из тех незаметных, закулисных программ, которым не уделяется и половины того внимания, которого они заслуживают.
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS

Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs

Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD

Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC

Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
Подробное руководство по ipfw nat

Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot

Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless

Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение

Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга

Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff

Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа

Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL

Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)

Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP

Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools

Network UPS Tools представляет собой набор программ, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP

Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 45 чел.
За последние 30 мин было: 223 человек
За сегодня было
15693 показов,
1743 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1965 секунд
Из них PHP: 66%; SQL: 34%; Число SQL-запросов: 77 шт.
Исходный размер: 138009; Сжатая: 27563