Прежде всего нужно включить поддержку cgd в
ядро. В конфиге ядра для этого должна
присутствовать следующая строка:
pseudo-device cgd 4 # cryptographic disk driver
Вместо 4 подставь нужное тебе число - оно
указывает, какое число криптографических
псевдо-устройств может быть одновременно
примонтировано в системе. Компилируй и
устанавливай ядро. Если всё нормально,
можно продолжать.
Поддерживаются следующие алгоритмы
шифрования: aes-cbc, blowfish-cbc, 3des-cbc. Сам процесс
криптования проходит так (способ, немного
знакомый тем, кто хоть раз криптовал вирусы
или shell-код): шифрованный диск состоит из
блоков шифротекста. К каждому блоку
применяется XOR с предыдущим зашифрованным
блоком перед кодированием. Так работают все
три алгоритма. Дальше нужно разобрать
методы верификации. Их также три: none, disklabel и
ffs. None - отсутствие проверки. Наиболее
опасный метод. Если введён неправильный
ключ, то все данные на криптованном диске
будут разрушены. Disklabel - проверка
соответствия раздела и ключа. Ffs - провека
соответствия файловой системы и ключа.
Процесс создания cgd диска довольно сложен,
поэтому его лучше рассмотреть по шагам.
Буду предполагать, что ты хочешь шифрануть
всю свою рабочую систему. Корень шифровать
не надо - системе надо загрузить ядро,
сценарий rc.d и т. д. Так что криптуй всё, кроме
него. Затем создавай резервную копию всего,
что только можно (тебе придётся стирать все
данные и пересоздавать разделы) и приступай.
Бэкап лучше делать, загрузившись в
однопользовательском режиме. В этом же
режиме монтируй корень на чтение/запись.
Все остальные фс-отмонтируй и удали (я
предупреждала - сделай бэкап!). Затем disklabel`ом
на свободном месте сделай один раздел с
типом ccd (это не опечатка!). Сохраняйся.
Набивай:
# cgdconfig -s cgd0 /dev/твоё устройство aes-cbc 128 < /dev/urandom
# dd if=/dev/zero of=/dev/rcgd0d (редко-/dev/rcgd0c) bs=32k
# cgdconfig -u cgd0
Что мы сделали? Если тебя волнует абсолютно
полная секурность, ты не захочешь оставить
и байта нешифрованных данных. А даже после
переконфигурирования таблицы разделов
куски данных могли сохраниться. Надо это
устранить. Каким образом? Создадим
временное устройство cgd со случайным ключом
и запишем его в настоящий раздел, а в конце
расконфигурим случайный ключ cgd.
Для управления cgd-устройствами проге cgdconfig
нужны конфиги, и мы должны сами их сейчас
создать. Командуй:
# cgdconfig -g -V disklabel -o /etc/cgd/твоё устройство aes-cbc
256
Конфиг ляжет в /etc/cgd/твоё устройство. Там
будут записаны алгоритм, длина ключа и т. д.
Кстати: тебе, наверное, знаком по линуху
сервис с такой обьясняловкой: ". . .
сохраняет и повышает пул системной
энтропии для повышения качества генерации
случайных чисел". Вот сейчас тебе эта
самая энтропия вместе с пулом очень даже
понадобится. Если энтропии будет мало, то
выполнить последнюю команду нифига не
получится. В таком случае потыкай клавиши
или поклацай мышкой - энтропия мигом
вырастет как на дрожжах. Вероятность
возникновения такой проблемы довольно
невелика, но мало ли. . . Теперь:
# cgdconfig -V re-enter cgd0 /dev/твоё устройство
Тебя два раза спросят паролик. Упаси боже
забыть тебе его! В таком случае можешь
помахать системе ручкой. Испугался?
Успокаиваю: создание раздела окончено! Но
теперь нужно создать на нём файловые
системы:
# newfs /dev/имя твоего cgd раздела
Отредактируй файлик /etc/fstab. Посмотри, какое
устройство указано напротив корня. Там
оставь, а напротив всех остальных разделов
смени на имя твоего cgd раздела(cgd0b, cgd0e и т. д.
). Теперь вставь в /etc/cgd/cgd. conf:
cgd0 /dev/твоё устройство
Последний штришок - добавить в /etc/rc. conf:
cgd=YES
Теперь каждый раз при загрузке тебе надо
будет вводить паролик. Всё, восстанавливай
данные. Шифрование всей рабочей системы -
довольно сложное и опасное предприятие,
поэтому советую сначала потренироваться на
эмуляторах или ещё где-нибудь.
В заключение хочу рассказать об одной
интересной фишке для параноиков:
шифрование файла подкачки. Для этого
используется random-key cgd. С применением данной
технологии при каждой загрузке системы
будет генерироваться новый, случайный ключ.
Нужно конвертнуть существующий cgd раздел в
cgd1:
# cgdconfig -g -o /etc/cgd/существующий раздел -V none -k
randomkey blowfish-cbc
На новом диске каждый раз при загрузке
будут пропадать метка и раздел, поэтому
пропиши восстановление разделов после
каждой перезагрузки. Тут уж додумайся сам (подсказка
- гляди man на disklabel). Не сможешь - мыль мне,
помогу. Естественно, в рамках одной статьи
сложно рассказать обо всех возможностях
системы шифрования NetBSD. Но начальный ликбез
ты получил. Читай маны - там ты найдёшь всю
необходимую тебе информацию.
Сеть
Ты хакер? А какой же хакер без сети? Значит,
её нужно настроить. Открываем файлик /etc/rc.
conf и пишем:
hostname =“имя твоего хоста“
defaultrouter =“айпишник маршрутизатора“
ifconfig_имя_сетевого_интерфейса =“твой
айпишник и/или маска подсети“
Пропиши, что нужно. Маску подсети также
можно указать в виде:
netmask айпишник
Если ты хочешь соединяться со своей
системой по ssh, пропиши:
sshd=YES
IP DNS-серверов-в /etc/resolv. conf. Синтаксис:
netmask айпишник
Пример /etc/rc.conf - в /etc/defaults/rc.conf. Ping, traceroute, netstat,
tcpdump и т. д. естественно на месте.
О технологии IPSec я уже рассказывала в
статье "Solaris
для всех и каждого". Состав IPSec по
прежнему такой - же:IPsec = AH + ESP + IPcomp + IKE.
Напомню про IPcomp (IP payload compression). Все пакеты,
шифрованные ESP, имеют не лучшую степень
сжатия. Перед использованием ESP пакеты
можно пожать, а можно скомпрессировать без
использования ESP. За более подробной
информацией можешь обратиться к RFC 1825 и 2401.
Теперь об управлении правилами IPSec в NetBSD.
По умолчанию ядро NetBSD не поддерживает IPSec,
поэтому его надо перекомпилить,
раскомментировав соответствующие строки в
конфиге:
options IPSEC
options IPSEC_ESP
Желательно иметь NetBSD посвежее (выпущенную
после июня 2000 года), иначе не избежать
проблем: надо будет искать патчи, обновлять
дерево каталогов и т. д. , в общем совершать
много лишних телодвижений. А в последних
версиях нужный код уже интегрирован в
деревце системы.
Правил, которые можно настроить, очень
много, поэтому я для примера рассмотрю
всего одно: host-to-host encryption.
Правила удобнее всего реализовывать в
виде скриптиков и мы сейчас попробуем
написать такой. В данном примере мы
воспользуемся вручную сгенерированными
ключами, которые создаются утилиткой setkey.
Начнём с основ. Правила могуть быть
реализованы двумя способами: per-packet и per-socket.
Per-packet конфигурируется в ядрышке (как и сам
пакетный фильтр) и его удобнее всего
использовать на маршрутизаторах, а для
работы с per-socket нужно использовать setsockopt. Мы
в примере будем использовать per-packet. Итак,
корябаем:
#! /bin/sh
#
setkey -c <<EOF
add 20.1.1.1 30.1.1.1 esp 8432 -E 3des-cbc "секретный ключ";
add 30.1.1.1 20.1.1.1 esp 1195 -E 3des-cbc секретный ключ;
spdadd 20.1.1.1 30.1.1.1 any -P out ipsec esp/transport//use;
EOF
Разберёмся. Сначала - запуск setkey (мы же
вручную ключи генерируем). Затем мы
прописываем, что все пакетики, идущие с 20.1.1.1
на 30.1.1.1 шифрятся esp с использованием
алгоритма 3des-cbc с секретным ключом и SPI равен
8432. В обратном направлении пакетики
криптуются с использованием того же
алгоритма, только секретный ключ другой,
и SPI равен 1195. Далее мы генерим per-packet правило
IPSec. Ты можешь отбрасывать некриптованные
пакеты. Для этого добавь:
spdadd 30.1.1.1 20.1.1.1 any -P in ipsec esp/transport//require;
Это мы настроили на хосте 20.1.1.1, а на хосте
30.1.1.1 всё почти то же самое, кроме последней
строки. Там пиши:
spdadd 30.1.1.1 20.1.1.1 any -P out ipsec esp/transport//use; (изменились
адреса хостов)
Синтаксис правил IPSec более подробно
описывается в мане ipsec_set_policy. Вот и всё на
первый раз об IPSec.
Заключение
Вот ты и разобрался с осью, которая
считается одной из самых сложных. Теперь ты,
я думаю, понял, что такое мнение - не
более чем очередная страшилка для новичков.
Но если ты всё таки боишься сразу ставить
эту ось - что ж, попробуй NetBSD Live, на
котором ты сможешь наработать базовые
навыки по работе в этой чудесной оси. Да не
облысеют твои пятки!