Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
8.5 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

EncFS шифруетнетолькосодержимоефай-

лов, ноиихимена

СоздаемновуюфайловуюсистемуEncFS

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

Еслиговоритьостойкостишифрованияипригодностидля повседневногоприменения, тоздесьвсевпорядке, по крайнеймере, упервыхтрехпретендентов. Всетрисистемы производятшифрованиеналетуинаходятсянижефайловой системы, поэтомувзломщикнеимеетниединогошанса узнатькакие-либоподробностиохранящихсявнутритома данных. Каждаясистемазащищенаоттакназываемой Watermark-атаки, спомощьюкоторойможноопределить наличиевтомеопределенныхтиповфайлов(dm-crypt до сихпориспользуетрежимшифрованияCBC (Сipher Block Chaining)), уязвимыйдляэтойатаки, ноеголегкоможно изменитьнаустойчивыйESSIV, LRW илиXTS). Всесистемы могутиспользоватьразличныеалгоритмышифрования,

такиекак, например, AES-256, Serpent илиTwofish. Для получениядоступакданнымвсесистемыпозволяютиспользоватьзашифрованныйключ, хранящийсянаUSB-брелке илисмарт-карте.

Всторонеотloop-aes, LUKS/dm-crypt иTrueCrypt стоит простаяисвидунезамысловатаяпрограммаEncFS. В отличиеотсвоихтяжеловесныхсобратьев, онаработает поверхужесуществующейфайловойсистемыипоэтому раскрываетзлоумышленникукучусамойразнообразной информации, включаявсюструктурукаталоговфайловойсистемы, времясозданияимодификациифайлов, ихвладельцаиразмер. EncFS шифруеткаждыйфайл индивидуально, поэтомускрытымиотпостороннихостаютсятолькосамиданные, хранящиесявнутрифайлов,

иихимена. ТакаяособенностьделаетEncFS неприменимойдляхранениясерьезныхданных, нонаделяетее несколькимидостоинствами: файловаясистемаможет динамическирасти, инкрементальныесистемыбэкапа будутправильнообрабатыватьфайлы, зашифрованные EncFS, другиевиртуальныефайловыесистемытакже могутбытьзашифрованы(например, тыможешьподключитьcurlftpfs, создатькаталог, подключитькнемуencfs,

ивсезаливаемыевнегоданныесохранятсянасерверев зашифрованномвиде).

LUKS/DM-CRYPT

СистемакриптозащитыдисковLUKS/dm-crypt, какнетрудно догадаться, состоитиздвухосновныхкомпонентов:

dm-crypt — стандартнаяподсистемашифрованиядисков Linux-ядраверсии2.6, котораяопираетсянаподсистемуDevice Mapper (dm), способнуюотображатьдисковые устройствадругнадруга, икриптографическоеAPI (Crypto

API), такжепредоставляемоеядромипредназначенноедля выполненияразличныхкриптографическихфункций.

LUKS (Linux Unified Key Setup) — стандартшифрова-

ниядисковыхустройствдляLinux, которыйописывает дисковыйформатдлязашифрованныхданных. БлагодаряLUKS производителидистрибутивовиразработчики ПО, работающегосдисковымиустройствами, получают возможностьвстроитьвсвоипродуктысредствадляоднозначногоопределенияшифрованныхдисковиработы сними. Например, подсистемаHAL, котораясегодня используетсябольшинствомдистрибутивоввкачестве прослойкидляработысоборудованием, ужедавноумеет определятьLUKS-диски, поэтому, есливкомпбудет вставленафлешка, зашифрованнаяспомощьюLUKS/ dm-crypt, пользовательувидитсообщениеспросьбой ввестипароль, послечегофлешкабудетблагополучносмонтирована. Именновэтойстандартизации заключаетсяглавноедостоинствоLUKS/dm-crypt перед всемиостальнымирешениями.

ДлясозданияLUKS-совместимыхшифрованныхдисков предназначенаутилитаподназваниемcryptsetup-luks, котораявотдельныхдистрибутивах(например, Ubuntu)

ловкозамаскированаподобычнуюcryptsetup. Поэтомудля ееустановкидостаточновыполнитьпростуюкоманду:

$ sudo apt-get install cryptsetup

Большеничегоинсталлироватьненужно, dm-crypt ивсенеобходимыекриптомодулиужеестьвдистрибутиве. Ноперед темкакначатьшифрование, ихпридетсязагрузить:

$ sudo modprobe dm-crypt $ sudo modprobe sha256 $ sudo modprobe aes

ЧтобымодулизагружалисьвовремяинициализацииОС, добавимихименавфайл/etc/modules:

$ sudo -i

# echo "dm-crypt\nsha256\naes" >> /etc/modules

Далеевыбираемдисковыйраздел, которыйхотимподвергнутьшифрованию, изабиваемегонулями(есливразделе естьданные, ихнеобходимосохранитьвукромномместе):

$ sudo dd if=/dev/zero of=/dev/sda5 bs=4K

Дляпущейнадежностиизапутываниявзломщикараздел можнонаполнитьслучайнымиданными, ноэтапроцедура можетзанятьдлительноевремя(несколькочасов, адля большихдисков— ицелыесутки):

$ sudo dd if=/dev/random of=/dev/sda5 bs=4K

INFO

info

EncFS может работать в Linux, Mac OS X, FreeBSD

и, теоретически, в любом UNIX, поддерживающем фреймворк

fuse. Проект по портированию

EncFS в Windows

располагается по адресу www.assembla.com/spaces/ wencfs.

WARNING

warning

В целях безопасности индексацию зашифрованных разделов лучше отключить, отредактировав конфигурационный файл /etc/updatedb. conf.

Файлы, зашифрованные EncFS, не могут иметь жестких ссылок, так как система шифрования привязывает данные не к inode, а к имени файла

XÀÊÅÐ 10 /141/ 10

099

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

УстанавливаемTrueCrypt

LUKS/dm-crypt и образы ФС

LUKS/dm-cryptвполнепригоденидлясозданияобразовФС,которые

можноиспользоватьдляхраненияважнойинформации:

#dd if=/dev/urandom of=luks.img bs=1M count=100

#losetup /dev/loop0 luks.img

#cryptsetup luksFormat /dev/loop0 -c aes-cbc- essiv:sha256 -s 256

#cryptsetup luksOpen /dev/loop0 luks

#mkfs.ext2 /dev/mapper/luks

#mkdir /mnt/luks

#mount /dev/mapper/luks /luks

ИнициализируемLUKS-разделспомощьюcryptsetup:

$ sudo cryptsetup luksFormat /dev/sda5 \ -c aes-xts-plain -s 256

Опция'-c' задаетрежимшифрования, внашемслучаеэтоAES-XTS (имеет гораздоболеевысокийуровеньзащитыпосравнениюсрежимами CBC, ECB; устойчивкWatermark-атакам). Опция'-s' задаетдлинуключа шифрованиявбитах. Утилитаcryptsetup запроситпароль, используемыйдлярасшифровкиключашифрования, аеслиговоритьпростым языком— длядоступакданнымраздела. Попробуйпридуматьчто-нибудь действительносложное.

Послетого, какразделбудетинициализирован, егоможноотобразить надругоеблочноеустройствоспомощьюDevice Mapper итакимобразом получитьдоступкданным(всезаписываемыенаэтиустройстваданные будутпередаватьсяdm-crypt ипопадатьнафизическийразделужев зашифрованномвиде):

$ sudo cryptsetup luksOpen /dev/sda5 èìÿ

Теперьнаразделеможносоздатьфайловуюсистемуисмонтироватьее:

$ sudo mkfs.ext4 /dev/mapper/имя -L метка $ sudo mkdir /mnt/имя

$ sudo mount /dev/mapper/èìÿ /mnt/èìÿ

РазмонтированиеиотключениеустройстваотDevice Mapper происходит вобратномпорядке:

$ umount /mnt/èìÿ

$ cryptsetup luksClose sda5

Выбираемалгоритмшифрованияихеширования

TrueCrypt

Чтобыоперационнаясистемасаманаучиласьподключатьимонтировать нужныекриптованныеустройствавовремязагрузки, азатемкорректно отключатьихвовремяшатдауна, достаточнодобавитьпооднойстрокев файлы/etc/crypttab и/etc/fstab:

$ sudo -i

#echo "èìÿ /dev/sda5 none luks,cipher=aes-cbc- essiv:sha256" >> /etc/crypttab

#echo "/dev/mapper/èìÿ /mnt/èìÿ ext4 defaults 0 0" \

>>/etc/fstab

ТеперьвовремякаждойзагрузкиОСбудетспрашиватьпарольдля доступаккриптованномуразделу, еслионбудетуказаннеправильно— загрузкаостановится.

Шифрование домашнего каталога производится по точно такой же схеме с тем лишь исключением, что перед добавлением новой записи в /etc/fstab следует удалить старую запись, ссылающуюся на /home. При создании шифрованной флешки специальные записи в /etc/crypttab и /etc/fstab не требуются. Подсистема HAL сама определит наличие на устройстве хранения LUKS-раздела и передаст эту информацию среде рабочего стола (Gnome, KDE, XFCE), которая, в свою очередь, выведет на экран окно с просьбой ввести пароль. Единственное, что необходимо сделать — при первом монтировании флешки изменить права доступа на ее корневой каталог:

$ sudo chown -R þçåð:þçåð /media/èìÿ $ sudo chmod g+s /media/èìÿ

Здесьюзер— этотвоеимявсистеме, аимя— названиеметки, которуюты указалприсозданиифайловойсистемы(опция'-L' утилитыmkfs). ИнтереснаяособенностьLUKS/dm-crypt заключаетсяввозможностииспользованиясразунесколькихключейшифрования(азначит, ипаролей) дляодногодисковогоустройства. Этоможетпонадобитьсявмногопользовательскихсистемахдлявыделениякаждомупользователюсобственногопароля, расшифровывающегодиск. Новыеключидобавляютсяв

LUKS спомощьюдействияluksAddKey утилитыcryptsetup:

$ sudo cryptsetup luksAddKey /dev/sda5

Командапопроситтебяввеститекущийпароль, азатемдваждыввести новый. Удалитьключможно, используяследующуюкоманду:

$ sudo cryptsetup luksDelKey /dev/sda5 ID-ключа

Идентификаторнужногоключатынайдешьввыводеследующей команды:

$ sudo cryptsetup luksDump /dev/sda5

100

XÀÊÅÐ 10 /141/ 10

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ФорматированиеобразаTrueCrypt

LUKS/dm-crypt и одноразовые ключи

LUKS/dm-cryptтакжеумеетиспользоватьодноразовыеключи,что

оченьполезнопришифрованииswap-разделов:

#swapoff -a

#cryptsetup -d /dev/urandom create cryptoswap /dev/sda1

#mkswap /dev/mapper/cryptoswap -L accessisdenied -v1

#echo "cryptoswap /dev/sda1 /dev/urandom swap" >> /etc/crypttab

#echo "/dev/mapper/cryptoswap none swap sw 0 0" >> /etc/fstab

#swapon -a

Вместопаролятыможешьиспользоватьключевойфайл, сохраненный наUSB-брелкеилилюбомдругомносителеинформации. Дляэтого создайслучайныйключспомощьюdd:

$ dd if=/dev/urandom of=/путь/к/файлу bs=512 count=4

АзатемиспользуйегоприинициализацииLUKS-раздела:

$ sudo cryptsetup luksFormat -c aes-xts-plain -s 256 \ /dev/sda5 /путь/до/ключа

Для«открытия» разделаиспользуйследующуюкоманду:

$ sudo cryptsetup -d /путь/до/ключа luksOpen \ /dev/sda5 имя

TRUECRYPT

ОткрытаясистемашифрованиядисковTrueCrypt появиласьдлясистем Windows ещев2004 году, иужечерезгодвнеебыладобавленаподдержкаLinux (версия4.0), котораясталаполноценнойв2008 году, когдабыла выпущенаTrueCrypt 5.0 сграфическиминтерфейсомкакдляWindows, такидляLinux.

TrueCrypt впервуюочередьпредназначенадляшифрованияобразов ФС, номожетбытьиспользованаидляшифрованияцелыхразделов. Также, какиLUKS, Linux-версияTrueCrypt опираетсянаподсистему dm-crypt, но, вотличиеотпервой, используетfuse длямонтирования зашифрованныхустройств/образов. Этооставляетсвойотпечатокна производительностииделаетTrueCrypt болеемедленнойвсравнениис LUKS, однакоиунееестьсвоисильныестороны.

Во-первых, TrueCrypt по-настоящемукроссплатформенна, версииПО естьдляWindows, Mac OS X иLinux, ихядроабсолютноодинаково, поэтомуникакихпроблемприпереносеобразовмеждусистемамивозникнуть неможет(длячтенияLUKS-разделовподWindows естьпрограмма FreeOTFE, нозаееподдержкуотвечаютсторонниеразработчики). Вовторых, TrueCrypt умеетсоздаватьскрытыешифрованныетомавнутри

ГлавноеокноTrueCrypt иодинсмонтированныйобраз

ужесуществующихтомов, причемделаетэтотак, чтоформальнонельзя доказатьихналичие. В-третьих, TrueCrypt создаеттоматакими, чтоих невозможноотличитьотслучайныхданных, чтополезноприсокрытииинформации(LUKS, какбылоописановыше, добавляетклюбому томузаголовок, покоторомуеголегконайти). В-четвертых, TrueCrypt позволяетменятьпаролиилифайлыключейдлятомабезпотериданных (LUKS требуетпересозданиятома).

Всвязислицензионнымипроблемами(привсейоткрытостиисходногокодалицензияTrueCrypt былапризнананесвободнойведущими производителямидистрибутивов) TrueCrypt былисключенизмногих дистрибутивов, поэтомуегопридетсяскачиватьиустанавливатьсамостоятельно:

$ cd /tmp

$ wget http://www.truecrypt.org/download/truecrypt- 6.3a-linux-x86.tar.gz

$ tar -xzf truecrypt-6.3a-linux-x86.tar.gz $ ./truecrypt-6.3a-setup-x86

Впроцессеустановкинеобходимопрочитатьисогласитьсяслицензией иввестисвойпарольвсистеме(илипарольрута). ПослеэтогоTrueCrypt будетустановленвкаталог/usr, захламляясистемунеуправляемыми пакетнымменеджеромфайлами(которые, правда, могутбытьудаленыс помощьюкомандыtruecrypt-uninstall.sh).

После установки запускаем команду truecrypt и видим перед собой графический интерфейс. Основное пространство окна занимает список смонтированных шифрованных образов/разделов, в верхней части располагается стандартное меню, а снизу — основные элементы управления программой: создать том (Create Volume), смонтировать, размонтировать, открыть существующий том и т.д. После нажатия на кнопку «Create Volume» ты попадешь в мастер создания томов. Он проведет тебя через все шаги создания зашифрованного тома, включая выбор носителя (файл или раздел), типа тома (обычный или скрытый), ввод полного пути до файла тома или выбор устройства, выбор алгоритма шифрования и хеширования ключей, ввод размера тома, ввод пароля для доступа, выбор файловой системы (FAT, Ext2 или Ext3) и т.д. Все просто и понятно. После того, как том будет создан, его можно найти с помощью кнопки «Select File» в нижней части окна программы, ввести пароль доступа, и том появится в списке подклю-

XÀÊÅÐ 10 /141/ 10

101

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ТекстовыйрежимработыTrueCrypt

ченных томов. Клик на томе автоматически откроет стандартный файловый менеджер. После окончания работы можно нажать «Dismount All» и выйти из программы.

Некаждыйпользовательбудетрадграфическомуинтерфейсу, поэтому уTrueCrypt естьещеодинтипинтерфейса: интерактивныйтекстовый режим, активируемыйспомощьюфлага'-t'. Созданиетомавэтом режимеоченьпохоженасозданиетомасиспользованиемграфического мастера. Тыпростозапускаешькоманду«truecrypt -t -c» иотвечаешьна всетежестандартныевопросы. Поокончаниибудетсозданобраз(или TrueCrypt'ныйтомвнутрираздела), которыйможноподключитьспомощьюследующейкоманды:

$ truecrypt -t /путь/до/образа /точка/монтирования

дляразмонтированияиспользуетсяфлаг'-d':

$ truecrypt -d

Замечу, чтоTrueCrypt совсемнеуступаетLUKS постепениобеспечения безопасностизашифрованныхданных. Впоследнейверсиипрограммы используетсявсетотжережимшифрованияXTS, которыймыиспользовалиприсозданиизашифрованныхразделовспомощьюLUKS. В качествеалгоритмовшифрованиямогутбытьиспользованыалгоритмы AES, Twofish иSerpent, ниодинизнихещенебылскомпрометирован. Болеетого, TrueCrypt позволяетиспользоватьтакназываемыекаскады алгоритмов, когдазашифрованныйоднималгоритмомблокданных повторношифруетсядругим.

ENCFS

ВиртуальнаяфайловаясистемаEncFS распространяетсяввидеобычногодистрибутивногопакетаинетребуетдлясвоейработыничего, кроме поддержкифреймворкаfuse вядре, libfuse, OpenSSL инебольшойбиблиотекидлялогирования. ДляинсталляцииEncFS достаточноустановить пакетсодноименнымназванием:

$ sudo apt-get install encfs

102

СоздатьзашифрованнуюспомощьюEncFS файловуюсистемуочень просто, дляэтогоподойдетлюбойкаталог. Вкачествепримерасоздадим двапустыхподкаталогав/tmp: директорияcrypted будетсодержать данныепослеихшифрованияспомощьюEncFS, аdecrypted — использоватьсяпростокакточкамонтированиядлянееже:

$ cd /tmp

$ mkdir crypted decrypted

ПодключимккаталогамEncFS:

$ encfs /tmp/crypted /tmp/decrypted

Теперьнеобходимоответитьнанескольковопросов. Первыйвопрос: выборрежимаработыEncFS спользователем. Ихвсегодва: expert (буква«x») иparanoid (буква«p»). Выбравпервыйвариант, тысможешь задатьалгоритмшифрования(AES илиBlowfish), длинуключа, такие вещи, какInitialization Vector (еслитынезнаешь, чтоэтотакое, можешь жать<Enter> длявыбораответапоумолчанию) ит.д. Врежимеparanoid программасамаответитнасвоивопросыипредложитввестипарольдля доступакданным.

Стоитсказать, что, хотядлябольшинствапользователейрежим paranoid будетболееправильнымвыбором, режимexpert открывает некоторыевозможностидляоптимизации. Например, алгоритм Blowfish быстрееAES, нооннеиспользуетсяпоумолчанию, простопотомучтонелегалендлячастногоиспользованиявнекоторыхстранах. ТакжесистемаподефолтуустанавливаетблокданныхФСравным1024 байт, хотялучшуюпроизводительностьEncFS показываетприустановкеразмераблокаравнымразмерустраницыоперативнойпамяти. То есть4096 байтдляx86.

Новернемсякнашемузашифрованномукаталогу. Перейдемвкаталог decrypted исоздадимнесколькофайлов:

$ cd decrypted

$ echo qwerty > file1 $ echo asdfgh > file2 $ echo zxcvbn > file3

ОтключимEncFS ивзглянемнарезультат:

$ cd ..

$ fusermount -u /tmp/decrypted $ cd crypted

$ ls

Как видишь, EncFS полностью скрыла имена и данные файлов, но оставила почти все метаданные на виду. Кроме того, EncFS создала небольшой скрытый файл, начинающийся с «.encfs» и заканчивающийся номером версии.

Файл содержит в себе метаданные, такие как опции шифрования

(алгоритм, длина ключа), заголовки MAC (Message authentication code) и размер блоков шифрования.

ЧТОЛУЧШЕ?

Ситуация с шифрующими системами в Linux весьма неоднозначна. С одной стороны, здесь есть стандартная реализация под названием LUKS/dm-crypt, обладающая всеми присущими криптосистеме функциями/свойствами и поддерживаемая из коробки самыми популярными дистрибутивами. С другой стороны, у LUKS/dm-crypt есть серьезные конкуренты, которые уделывают ее по нескольким характеристикам. Так что однозначный выбор сделать трудно. Я

бы рекомендовал использовать LUKS/dm-crypt или loop-aes для повседневного использования и прибегать к помощи TrueCrypt, когда необходимо создать кроссплатформенный том, и EncFS, когда другие системы не могут быть использованы (например, шифрованный бэкап). z

XÀÊÅÐ 10 /141/ 10

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

 

 

Сергей «grinder» Яремчук grinder@tux.in.ua

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Самый маленькийVPN

ВыбираемпростоеилегковесноеVPN-решение

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Есливсоседнейлокалкевовсюшпилятсяводнуизпопулярныхсетевыхигр, атынеможешьпоучаствоватьвбаталияхиз-затого, чтогамарассчитана тольконаLAN, либоадминынамудрилисограничениями, выхододин

— поднятьVPN. Учитывая, чтотуннельнебудетпостоянным, главным требованиемвыдвинемпростотувнастройкахинетребовательность кресурсам. Посмотрим, чтопредлагаетнамOpenSource.

VTUN

Оченьпопулярнаяпрограмма, позволяющая быстросоздатьвиртуальныйтуннельчерез TCP/IP сети. Знакомствоссайтомпроекта(vtun. sf.net) обнажаетглавныйнедостатокVTun: он неразвиваетсявотужетригода(последнее обновлениедатировано6 декабря2007 года). Нонетребовательностьксистемнымресурсам, простотаигибкостьнастроекпривеликтому, что

егонесписалисосчетов, исегодняVTun доступен врепозиторияхбольшинства*nix систем: Linux, *BSD иSolaris. ПримердляDebian/Ubuntu:

$ sudo apt-cache search vtun vtun - virtual tunnel over TCP/IP networks

VTun поддерживаетнесколькотиповвиртуаль-

ныхтуннелей— IP, PPP, SLIP, Ethernet, TTY и pipe. Вкачестветранспортногопротоколаможет использоватьсянавыборTCP илиUDP. Потоки кодируются128-битнымключомпоалгоритму BlowFish, длячегоиспользуютсябиблиотеки OpenSSL. Предусмотренакомпрессияпотока припомощибиблиотекzlib иlzo. Уровеньсжатия

такжеподдаетсярегулировке, поэтомуможно выбратьоптимальныйвариантмеждунагрузкой наCPU изагрузкойканала. VTun использует клиент-сервернуюархитектуру. Наодномиз хостовпрограммазапускаетсякаксервер (слушает5000 порт), анаостальных— какклиент. Количествоклиентовограничиваетсятолько мощностьюсервера. ПриэтомнастройкиVTun позволяютпринеобходимостиограничитьскоростьтуннелей, чтобыравномернораспределить загрузкуканала.

ЕсликлиентнаходитсязаNAT, VTun позволяет емубезпроблемподключатьсяксерверу, для этогоследуетлишьиспользоватьвкачестве транспортаTCP. Собственно, этаособенностьи привлекаетпользователей.

Системаработаетчерезуниверсальные драйверыtun иtap,позволяющиепрограммам вокружениипользователя(userspace) самостоятельнообрабатыватьпакеты. Нужныеустройства, какправило, ужесозданывсистеме:

$ ls -al /dev/net/tun

crw-rw-rw- 1 root root 10, 200 2010- 07-10 12:39 /dev/net/tun

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

Устанавливаемпакетvtun вDebian/Ubuntu:

$ sudo apt-get install vtun

Всенастройкидемонапроизводятсявфайле /etc/vtund.conf. Можнозапуститьнесколько демонов, каждыйизкоторыхбудетсчитывать свойконфигиработатьвкачествесервераили клиента. Впоставкеужеидетготовыйшаблон файла, требующийпредварительнойправки. Все возможныепараметрыможнонайтивдокументацииVTun.

Настройкивнутриразбитынанесколькоразделов. Секцииoptions иdefault являютсяобщими длявсех, позжеихможнопереопределитьдля каждогоклиента:

$sudonano/etc/vtund.conf

options { port 5000; syslog daemon;

# описываем пути к используемым про-

XÀÊÅÐ 10 /141/ 10

103

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КонфигурационныйфайлVTun

HTTP://WWW

links

Сайт проекта VTun

vtun.sf.net

Сайт проекта tinc — tinc-vpn.org

Страница проекта n2n — ntop.org/n2n

Страничка socat — www.dest-unreach. org/socat/

Проект CIPE — sites.inka.de/bigred/ devel/cipe.html

граммам

ifconfig /sbin/ifconfig; route /sbin/route;

ip /sbin/ip;

firewall /sbin/iptables;

}

default {

compress lzo:9; # уровень сжатия speed 0; # ограничение полосы

}

#теперь описываем клиентов client1 {

passwd p@ssVV0rD;

#тип может быть: tun, ether, tty, pipe type tun;

proto udp; encrypt yes;

#speed 256:128;

keepalive yes;

#команда, выполняемая при подключении up {

ifconfig "%% 10.1.0.1 pointopoint 10.1.0.2 mtu 1450

#при необходимости пробрасываем соединение

#firewall "-t nat -A POSTROUTING -s 10.1.0.2 -j MASQUERADE";

};

#команда при отключении (необязательная) down {

firewall "-t nat -F"; ifconfig "%% down"; };

}

Аналогичносекцииup можносоздатьсекциюdown, гдеописатьнастройки, которыедолжныбытьвыполненывпроцессе разрываVPN. Командымогутбытьлюбые, поэтому, кроме настроекинтерфейса, сюдаможнопрописатьпарустрок, позволяющихсоздаватьавтоматическийбэкапважныхданных. Например, так:

program /bin/sh "-c 'tar cf - /etc/*'";

ИщемнужныепакетыврепозиторииUbuntu

ВDebian/Ubuntu дляудобствауправленияпредлагаетсяфайл /etc/default/vtun. Принастройкесерверадостаточноизменить внутриоднустроку:

$sudonano/etc/default/vtun

# для сервера RUN_SERVER=yes

Теперьможнозапускатьсервер:

$ sudo invoke-rc.d vtun start

Илинапервыхпорах, чтобыполучитьбольшеинформации, лучшеввести:

$ sudo vtund -s

Клиентнастраиваетсяаналогично, параметры, посути, зеркальнысерверным:

$sudonano/etc/vtund.conf options {

port 5000; timeout 60;

ifconfig /sbin/ifconfig; route /sbin/route; firewall /sbin/iptables;

}

client1 {

passwd p@ssVV0rD; type tun;

up {

ifconfig "%% 10.1.0.2 pointopoint 10.1.0.1 mtu 1450";

route "add -net 1.2.3.4/16 gw 10.1.0.1";

};

}

ИеслитыиспользуешьDebian-based дистрибутив, поправь/ etc/default/vtun, чтобыinit-файлзнал, когозапускать.

$sudonano/etc/default/vtun

CLIENT0_NAME=client1

# IP или имя VTun сервера CLIENT0_HOST=vtun.mydomain.ru

Дляначалазапустимvtund суказаниемимениклиентскогохоста, фигурирующеговконфиге, иIP-адреса(имени) сервера:

104

XÀÊÅÐ 10 /141/ 10

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

d

 

 

 

 

 

 

 

 

-

 

 

 

 

 

t

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Установкивtinc.conf

Генерируемключевуюпарудляработыtinc

$ sudo vtund -ð client1 vtun.mydomain.ru

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

$ sudo tail -f /var/log/message

Командаifconfig покажетналичиеtun0 интерфейса. Наэтомнастройку Vtun можносчитатьзаконченной. Вдальнейшемклиентаможнозапускать обычнымобразомчерезinit-скрипт:

$ sudo invoke-rc.d vtun start

TINC

Следующийпретендентназваниесамогомаленькогоисамогопростого внастройкахVPN - tinc (tinc-vpn.org). Стартовалпроектдостаточнодавно (в1998 году), активныеразработкиведутсядосихпор. ВотличиеотVTun, tinc позволяетсоединитьмеждусобойкомпьютерычерезIPv4/IPv6 сети, работающиеподуправлениемсамыхразныхОС: Linux, *BSD, Mac OS X, Solaris, Windows 2k-Se7en. Крометого, экспериментальноподдерживаетсяработаинатакихдевайсах, какiPhone, iPod. Дляшифрованияпотока задействуетсяOpenSSL, возможносжатиеспомощьюzlib илиlzo. Также tinc предоставляетвозможностьсоединитьвместенесколькоEthernet сегментов, чтопозволяет, например, игратьвигры, доступныетольков локальнойсети. Чтобыдобавитьновыймост, достаточносоздатьещеодин конфигурационныйфайл.

Также, какиVTun, tinc требуетналичиядрайверовTUN/TAP. Пакетсtinc доступенврепозиторияхбольшинствадистрибутивов. Установочныйпакет дляWindows можноскачатьнаофсайте. ВDebian/Ubuntu вводим:

$ sudo apt-get install tinc

Послеустановкистартуетдемон, ноделатьемусейчаснечего. Чтобывсе заработало, необходимосоздатьконфигурационныефайлы, сгенерировать паруключейираспространитьихнакомпьютеры, участвующиевподключении. Конфигвналичиипокатолькоодин. Вфайле/etc/tinc/net.boot прописываютсяназваниясетей, которыедолжныбытьзапущеныtinc. Он пуст(комментарииневсчет), добавимсюданашубудущуюсеть:

$sudonano/etc/tinc/net.boot

vpnnet

В/usr/share/doc/tinc/examples тынайдешьпримерыконфигов. Помере необходимостикопируемихв/etc/tinc иправим. Чтобыиметьвозможность подключатьсясразукнесколькимVPN-сетям, следуетрасположитьих настройкив«своих» подкаталогах. Например, внашемслучаеэто/etc/tinc/ vpnnet, именноздесьдемонбудетискатьнастройкисетиvpnnet. Впределах однойVPN сетиееназваниенеобязательнодолжнобытьуникальнымна всехсистемах-участниках, нолучшеиспользоватьодноимя, чтобыпотом непутаться. ЕслиVPN-сетьодна, такоераспределениепокаталогам

необязательно(всеконфигитогдаразмещаемвкорне/etc/tinc). РежимVPN иудаленныйузел, ккоторомубудемподключаться, описываютсявфайле tinc.conf:

$sudonano/etc/tinc/vpnnet/tinc.conf

#символическое имя подключения Name = my_vpn

#компьютер, к которому подключаемся

#возможно задание нескольких ConnectTo ConnectTo = vpn01

#устройство

Device = /dev/net/tun

#режим VPN: router|switch|hub Mode = switch

PrivateKeyFile = /etc/tinc/vpnnet/rsa_key.priv

#если несколько сетевых карт

BindToInterface = eth1

#пакеты, которые не могут пройти напрямую, будут отброшены

#DirectOnly = yes

#перенаправление пакетов

#Forwarding = <off|internal|kernel>

Насамомделевсепараметрыненужны. Всамыхпростыхслучаяхдостаточнооставитьпервыепятьдиректив. Данныеоконкретныхузлахсети прописываютсявподкаталогеhosts, внашемпримеремыдолжнысоздать двафайла: my_vpn иvpn01.

$sudonano/etc/tinc/vpnnet/hosts/my_vpn

#IP адрес или имя узла Address = 1.2.3.4

#локальная сеть, используется для маршрутизации Subnet = 192.168.1.0/24

#использование TCP

#TCPOnly = yes

Второйфайлпрактическианалогичен, поэтомувпримереоставлютолько адрес.

$ sudo nano /etc/tinc/vpnnet/hosts/vpn01 Address = vpn01.mydomain.ru

Поумолчаниюtinc используетпорт655; еслионзанятилиблокируется файером, тоегоможноизменить, указавнужноезначениевпараметреPort. Крометого, вфайлахузловхранитсяпубличныйключ(заноситсяавтоматическиприсоздании).

Генерируемключ:

$ sudo tincd -n vpnnet -K

XÀÊÅÐ 10 /141/ 10

105

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запускаемsupernode вотладочномрежиме

Впроцессеработыскриптспросит, кудасохранитьприватныйипубличный ключи.

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

нииVPN: tinc-up/tinc-down, host-up/subnet-down, subnet-up/subnet-down.

Опятьже, невсеониобязательны.

$sudonano/etc/tinc/vpnnet/tinc-up

#!/bin/sh modprobe tun

ifconfig $INTERFACE 192.168.1.10 netmask 255.255.255.0

Все, можнозапускать:

$ sudo /etc/init.d/tinc start

Процессподключениябудетотображенвлогах, командаifconfig покажет новоесоединение. Есличто-топошлонетак, запускаемдемонаврежиме отладки:

$ sudo tincd -n vpnnet -d5 -D

N2N

ПроектN2N (network to network, ntop.org/n2n) предлагаетрешение,

позволяющеесоздатьVPN-соединениемеждудвумяиболеесетями. Для обменаданнымииспользуетсяP2P-архитектура, поэтомуучастникипосле подключенияотправляютинформациюнапрямую. Конечныйкомпьютер (Edge Node) можетодновременнобытьподключенкнесколькимтаким сетям. ОбменпроисходитприпомощиUDP-пакетов. Процессомустановлениясвязиуправляетспециальныйузелsupernode, онжеиспользуетсякак промежуточныйвтехслучаях, когдаEdge Node немогутвзаимодействовать напрямую. Причемвобязанностиsupernode невходитфункцияавторизации, тоестьникакихучетныхданныхдлясоединенияоннесодержит, клиентысамидоговариваютсямеждусобойпослеподключения. Еслипаролисовпадают, происходитподнятиеVPN. Такойподходупрощаетработу

вслучаенедоступностиодногоизsupernode — простовыбираемдругойи подключаемсячерезнего. Supernode несовмещаетвсебефункцииEdge Node, принеобходимостиклиентзапускаютотдельно.

Сточкипотреблениятрафикадержатьподобныйтуннельпостоянно открытымдовольнонакладно(всевремяидетобращениекsupernode), поэтомуегоиспользуютдлякратковременныхсеансов. Ксожалению, в N2N естьминусыисточкизрениябезопасности. Так, паролиуказываются

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

Единственнойдокументациейнаanytun являются man-страницы

неиспользуютвугодуменьшемупотреблениюсистемныхресурсов.

ДляорганизациитуннелявLinux, *BSD, Mac OS X, Windows (доступенGUI) и OpenWRT задействуютсяTUN/TAP-драйвера.

УстановкавDebian/Ubuntu проста:

$ sudo apt-get install n2n

Послечеговсистемепоявятсядваисполняемыхфайла— supernode и edge. НикакихконфиговN2N неиспользует. Запускаемsupernode, указавв качествепараметра'-l' порт, накоторомдемонбудетприниматьподключения. Напервыхпорахдляполученияболееподробнойинформациилучше использоватьключ'-v'. Обративнимание: правасуперпользователяне требуются.

$ supernode -l 7654 -v

ДляподключениякVPN-сетииспользуетсякомандаedge, параметровунее больше. Основнымиявляются:

-a — свой IP-адрес, который декларирует клиент для подклю- чения к VPN-сети;

-с — название виртуальной подсети;

-k — ключ для подключения к VPN-подсети; -l — данные supernode.

Например, зарегистрируемнаsupernode дваузлаnode1 иnode2. Вводим накаждом:

node1$ sudo edge -a 10.1.2.1 -c mynetwork -k encryptme -l 1.2.3.4:7654

node2$ sudo edge -a 10.1.2.2 -c mynetwork -k encryptme -l 1.2.3.4:7654

Вконсолиполучаемсообщение«Registering with supernode»,команда ifconfig покажетналичиеинтерфейсаedge0 суказаннымивышепараметрами. Каквидишь, команды, введенныенаразныхузлах, отличаютсялишь объявляемымIP. Такжевкоманднойстрокеможноуказать:

-h — использовать HTTP-туннель (экспериментальная возможность);

-r — активировать форвардинг/роутинг пакетов (эта функция позволяет подключиться не только к Edge Node, но и к удаленной сети);

-f — запустить процесс в виде демона;

-d — указать TAP-устройство (полезно при одновременной

106

XÀÊÅÐ 10 /141/ 10

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Скриншототредактора: настройкасервераOpenVPN длясетевойигрывHMM3

Самый маленький VPN

anytun-0.3.3.tar.gz—110Кб vtun-3.0.1.tar.gz—122Кб cipe-1.6.0.tar.gz—139Кб tinc-1.0.13.tar.gz—497Кб n2n_svn_23072010.tgz—535Кб socat-1.7.1.2.tar.gz—542Кб openvpn-2.1.1.tar.gz—860Кб

Anycast

ПопулярностьVoIPиподобныхсервисовсегоднявысокакакникогда. Единственныйминусдляклиента,работающегочерезVPN—при недоступностиодногосервераонвынужденподключатьсякдругому. Anycast-рассылкапозволяетклиентунебеспокоитьсяоработоспо- собностиконкретногосервиса,ведьпакетвлюбомслучаедойдет до«кого-нибудь»изгруппысерверов.ЧтобыработатьчерезVPNс anycast,нуженспециальныйпротокол,итакойпротокол,описываю- щийпринципсоединенияunicastиanycast-сетей,разработанипо-

лучилназваниеSATP(SecureAnycastTunnelingProtocol).Реализация

SATPилежитвосновепроектаanytun(anytun.org).Поддерживается автоматическаямаршрутизацияприпомощиQuagga,использование UDPпозволяетanycast«дружить»сNAT.Пакетдоступенврепозиторияхосновныхдистрибутивов.Ксожалению,справочнаяинформация насайтепроектатольконанемецком,поэтомупринастройкеальтернативыmanпростонет.

работе с несколькими сетями).

Стоитотметить, имеетсяреализацияP2P VPN, котораятакиназывается

— P2PVPN (p2pvpn.org). Основнаяееособенность— возможностьработы безцентральногосервера. НаписананаJava итеоретическиможетбыть запущенаналюбойплатформе, длякоторойдоступнаJava RE. Официально поддерживаются32-битныеверсииLinux иWindows. Дляаутентификации используетсяRSA (1024 бит), трафикшифруетсяприпомощиAES (128 бит).

СЕМЕЙСТВОNETCAT—SOCAT

Любойюниксоидзнает, что, еслиемунужнаутилита, позволяющаяустано- витьTCP/UDP-соединениеснужнымипараметрами, передавать/приниматьданные, следуетвыбратьnetcat.Сеепомощьюможнолегконастроить проксииподключатьсякудаленномусервису. Ихотяонаужедавнонеразвивается(сянваря2004 года), ответвления(форки) возникаютсзавидной регулярностью: OpenBSD netcat,Ncat, Cryptcat, socat.

Так, socat (www.dest-unreach.org/socat/) обеспечиваетдвустороннююпере-

CIPE

ПринципработыCIPE(CryptoIPEncapsulation,sites.inka.de/bigred/ devel/cipe.html)оченьпрост.Шифрованныеприпомощипротокола CIPE(текущаяверсияCIPEv3)IP-пакетыинкапсулируютсявUDP-да- таграммы,результирующийпакетвключаетинформациюополучателе.Обменпроисходитчерезвиртуальноеустройствоcipcbx.Данные шифруютсядинамическими128-битнымиключами(Blowfish,IDEA), принеобходимостииспользуетсясжатие.СампротоколCIPEоткрыти документирован,обычноэтоположительносказываетсянабезопасностиконечногорешения.

ЕщеодинизнемаловажныхплюсовCIPE—его«дружба»сNATи SOCKS,чточастоиспользуетсяприорганизацииподключенияиз труднодоступныхмест.Например,там,гдепровайдерыблокируют протоколыGREилилюбыенестандартныепорты.

ИзначальноCIPEразработансучетомприменениявLinux,нодоступен

портстороннихразработчиковдляWinNT4.0SP3/SP6,Win2k(cipewin32.sf.net).

Минус—проектпрактическипрекратилсвоеразвитие(последнее обновлениебылов2002году),очевидно,поэтомуCIPEубралиизре- позиториевмногихдистрибутивов.Так,вUbuntuпакетыcipe-common

иcipe-sourceбылидоступныещевверсии6.06(DapperDrake),в

болееновыхрелизахпользователямCIPEприходитсясобиратьего самостоятельно.

дачуданныхмеждудвумяразличнымиканаламиданных: сокет(UDP, TCP, UNIX, IP4, IP6, raw), псевдотерминал, файловыйдескриптор, программаи другие, атакжеихкомбинация. Пользователиобычноприменяютsocatв качествеTCP-проксидлясоксификацииприложений, какшеллкUnix-со- кету, дляобходафайераитакдалее. Сегопомощьюлегкосоединитьдва узла, аиспользуяSSL — защититьсоединениемеждудвумяsocat. Сейчас рассмотрим, какэтоможносделать.

ВрепозиторииDebian/Ubuntu программынет, ноустановкастандартна.

ВфайлеEXAMPLES, которыйнайдешьвархиве, доступнывсеварианты использованияпрограммы. ДляпримераподнимемTUN-сервер, который будетслушатьпорт5555:

$ sudo socat -d -d TCP-LISTEN:5555,reuseaddr TUN:192.168.1.1/24,up

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

$ socat TCP:1.2.3.4:5555 TUN:192.168.255.2/24,up

Команда«ifconfig tun0» покажетналичиерабочегоинтерфейса. ИспользованиеSSL такженевызываетсложностей. Активируемсервер:

$ sudo socat openssl-listen:4444,reuseaddr,cert=/etc/vpn/ server.pem,cafile=/etc/vpn/client.crt echo

Подключаемсяклиентом:

$ sudo socat stdio openssl-connect:example.ru:4444,cert=/ etc/vpn/client.pem,cafile=/etc/vpn/server.crt

Осталосьдобавить, чтоsocatподдерживаетLinux, *BSD, OpenSolaris, Mac OS X иCygwin.

ЗАКЛЮЧЕНИЕ

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

XÀÊÅÐ 10 /141/ 10

107

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

w Click

to

 

 

 

 

 

 

CODING

 

 

 

 

 

 

 

m

Александр Краснощеков akrasnoschekov@gmail.com

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

КОДИМНАPYTHON ПО-ФУНКЦИОНАЛЬНОМУ

Познаем силу функциональной парадигмы программирования

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

КАКИЕПАРАДИГМЫ?!ДАВАЙТЕ КОДИТЬ!

Когда тебе надо написать что-то, то ты, наверное, меньше всего заморачиваешься относительно того, какую парадигму программирования выбрать. Скорее, ты либо выбираешь наиболее подходящий язык, либо сразу начинаешь кодить на своем любимом, предпочитаемом и годами проверенном. Оно и верно, пусть об идеологии думают идеологи, наше дело — программить :). И все-таки, программируя, ты обязательно следуешь какой-либо парадигме. Рассмотрим пример. Попробуем написать что-нибудь простое... ну, например, посчитаем площадь круга. Можно написать так:

Площадькруга(вариантпервый) double area_of_circle(double r) {

return M_PI*pow(r,2);

}

int main() { double r = 5;

cout << "Площадь: "<< area_of_circle(r)<< endl;

}

А можно и так:

Площадькруга(вариантвторой)

class Circle { double r; public:

Circle(double r) { this->r = r; }

double area() { return M_PI*pow(this->r,2); } void print_area() {

cout << "Площадь: "<< this->area() << endl;

}

};

int main() {(new Circle(5))->print_area();}

Можно и по-другому... но только как не старайся, код будет или императивным (как в первом случае), или объектно-ориентированным (как во втором). Это происходит не из-за отсутствия воображения, а просто потому, что C++ «заточен» под эти парадигмы.

И лучшее (или худшее, в зависимости от прямоты рук), что с его помощью можно сделать — это смешать несколько парадигм.

ПАРАДИГМЫ

Как ты уже догадался, на одном и том же языке можно писать, следуя нескольким парадигмам, причем иногда даже нескольким сразу.

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

Императивноепрограммирование

«Сначала делаем это, потом это, затем вот это». Языки: Почти все

Абсолютно понятная любому программисту парадигма: «Человек дает набор инструкций машине». С императивной парадигмы все начинают учить/понимать программирование.

Функциональноепрограммирование

«Считаем выражение и используем результат для чего-нибудь еще».

Языки: Haskell, Erlang, F#

108

XÀÊÅÐ 10 /141/ 10

Соседние файлы в папке журнал хакер