Что-то эта эха совсем пустует. Да, честно говоря, вообще сеть населена роботами по
больше части. Попробую немного оживить хотябы эту эху. Периодически буду писать
сюда всякие мыслишки.
Настраиваем изолированную ноду TOR
* Хост-система Ubuntu 14.04 amd64
* Гостевая система Gentoo
* Шифрование dm-crypt/LUKS
* Контейнерная виртуализация LXC
* btrfs
* TOR
* Lighttpd
Поехали!
Допустим у нас уже есть минимальная установка Ubuntu с OpenSSH. По-этому на
установке Убунты останавливаться не будем.
Шифрование LUKS
Устанавливаем пакеты необходимые для шифрования диска нашего гостя.
[home ~ root]# apt-get install cryptsetup
Подготавливаем файл, который будет служить диском:
[home ~ root]# mkdir -p /srv/luks/gentoo-guest [home luks root]# cd /srv/luks/ [home luks root]# # Создаем файл размером 5.2Гб [home luks root]# dd if=/dev/zero of=./gentoo-img bs=32M count=155 155+0 записей получено 155+0 записей отправлено скопировано 5200936960 байт (5,2 GB), 88,0945 c, 59,0 MB/c
Инициализируем его с LUKS:
[home luks root]# cryptsetup -y -v luksFormat ./gentoo-img WARNING! Данные на ./gentoo-img будут перезаписаны без возможности восстановления. Are you sure? (Type uppercase yes): YES Введите пароль: Verify passphrase: Команда выполнена успешно.
Тут мы вводим пароль. Не забывайте его, восстановить будет невозможно. Используйте
менеджеры паролей.
Открываем наш файл:
[home luks root]# cryptsetup luksOpen gentoo-img gentoo-luks Введите пароль для gentoo-img: [home luks root]# ls /dev/mapper/ -l итого 0 crw------- 1 root root 10, 236 янв. 21 14:20 control lrwxrwxrwx 1 root root 7 янв. 21 21:24 gentoo-luks -> ../dm-0
Как мы видим у нас появилось блочное устройство /dev/dm-0, с которым мы теперь
можем работать, как и с любым другим.
Создаем файловую систему и монтируем:
[home luks root]# mkfs.btrfs /dev/mapper/gentoo-luks WARNING! - Btrfs v3.14.1 IS EXPERIMENTAL WARNING! - see http://btrfs.wiki.kernel.org before using Performing full device TRIM (4.84GiB) ... Turning ON incompat feature 'extref': increased hardlink limit per file to 65536 fs created label (null) on /dev/mapper/gentoo-luks nodesize 16384 leafsize 16384 sectorsize 4096 size 4.84GiB Btrfs v3.14.1 [home luks root]# mount /dev/mapper/gentoo-luks ./gentoo-guest/ [home luks root]# df -h | grep luks /dev/mapper/gentoo-luks 4,9G 320K 4,4G 1% /srv/luks/gentoo-guest
Почему btrfs? Потому, что в ней есть такие фичи, как снапшоты. Да и не надо сидеть на
месте -- вперед к новым технологиям! :)
*Гость*
Настало время для первоначальной настройки нашей гостевой ОС, в которой уже будет
работать TOR.
Устанавливаем необходимые пакеты
[home luks root]# apt-get install lxc lxc-templates lxctl
Создаем файл конфигурации для нашего контейнера:
[home luks root]# cat > gentoo.conf << EOF > lxc.network.type=veth > lxc.network.link=lxcbr0 > lxc.network.flags=up > EOF
Разворачиваем контейнер:
[home luks root]# lxc-create -f gentoo.conf -t gentoo -P /srv/luks/gentoo-guest/ -n gentoo-lxc
Здесь мы указываем наш конфиг, шаблон, каталог в которой будет развернут rootfs и имя
контейнера.
Можно пока сходить заварить чаю. LXC начнет загружать stage3 gentoo, распаковывать его
и.т.д. Пароль для root по-умолчанию будет установлен в toor, а SSH добавлен в
автозагрузку.
Посмотрим, что у нас получилось в итоге:
[home luks root]# tree -L 3 gentoo-guest/ gentoo-guest/ └── gentoo-lxc ├── config └── rootfs ├── bin ├── boot ├── dev ├── etc ├── home ├── lib -> lib64 ├── lib32 ├── lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── sys ├── tmp ├── usr └── var 21 directories, 1 file
Копируем конфигурацию для нашего контейнера:
[home luks root]# mkdir /var/lib/lxc/gentoo-lxc/ [home luks root]# cp gentoo-guest/gentoo-lxc/config /var/lib/lxc/gentoo-lxc/
Отключаем apparmor для LXC:
[home luks root]# apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start [home luks root]# ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/
Пускаем наш контейнер в screen:
[home luks root]# screen -S gentoo-lxc lxc-start -n gentoo-lxc # Поскипан вывод * received address 10.0.3.45/24 [ ok ] * Starting local [ ok ] This is gentoo-lxc. (Linux x86_64 3.16.0-29-generic) 22:21:47 gentoo-lxc login: root Password: gentoo-lxc ~ # gentoo-lxc ~ # # Меняем сразу же пароль gentoo-lxc ~ # passwd New password: Retype new password: passwd: password updated successfully gentoo-lxc ~ # # Обновляемся gentoo-lxc ~ # emerge --sync gentoo-lxc ~ # emerge -uDN world gentoo-lxc ~ # etc-update
Настраиваем сеть:
gentoo-lxc ~ # cat > /etc/conf.d/net << EOF > rc_keyword="-stop" > config_eth0="10.0.3.45/24" > routes_eth0="default via 10.0.3.1" > dns_servers_eth0="10.0.3.1" EOF
Устанавливаем софт:
gentoo-lxc ~ # USE="tor-hardening transparent-proxy threads memcache" emerge -av lighttpd tor vim
Настраиваем tor. Редактируем файл /etc/tor/torrc и приводим его к следующему виду:
User tor PIDFile /var/run/tor/tor.pid Log notice syslog DataDirectory /var/lib/tor/data HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServicePort 80 127.0.0.1:8080
Создаем каталог для нашего скрытого сервиса и даем ему правильные права:
gentoo-lxc ~ # mkdir /var/lib/tor/hidden_service gentoo-lxc ~ # chown -R tor /var/lib/tor/
Настройка lighttpd. Редактируем файл /etc/lighttpd/lighttpd.conf. Раскомментим строчку
server.port. Конфиг хорошо комментирован, по-этому настройка не
составит труда. Вот, как примерно будет выглядеть конфиг:
var.basedir = "/var/www/onion" var.logdir = "/var/log/lighttpd" var.statedir = "/var/lib/lighttpd" server.modules = ( "mod_access", "mod_accesslog" ) include "mime-types.conf" server.username = "lighttpd" server.groupname = "lighttpd" server.document-root = var.basedir server.pid-file = "/var/run/lighttpd.pid" server.errorlog = var.logdir + "/error.log" server.indexfiles = ("index.php", "index.html", server.follow-symlink = "enable" server.port = 8080 static-file.exclude-extensions = (".php", ".pl", ".cgi", ".fcgi") accesslog.filename = var.logdir + "/access.log" url.access-deny = ("~", ".inc") # vim: set ft=conf foldmethod=marker et :
Тестовая страничка:
gentoo-lxc ~ # mkdir /var/www/onion gentoo-lxc ~ # echo '<!DOCTYPE html><html><head><meta charset="utf-8"></head> > <body><h1>Привет, Лукосеть!</h1></body></html>' > /var/www/onion/index.html
Пускаем все это дело:
gentoo-lxc ~ # /etc/init.d/lighttpd start * Starting lighttpd ... [ ok ] gentoo-lxc ~ # /etc/init.d/tor start * Tor configuration (/etc/tor/torrc) is valid. * /var/run/tor: correcting mode * Starting Tor ... [ ok ] gentoo-lxc ~ # ls /var/lib/tor/hidden_service/ hostname private_key
Скопируйте сразу же куда-нибудь эти файлы. В /var/lib/tor/hidden_service/hostname
записан, как не сложно догадаться, наш хостнейм вида XXXXXXXXXXXXXXX.onion. Открыв его в
торобраузере мы увидим нашу страничку.
Автозапуск:
gentoo-lxc ~ # rc-update add lighttpd default * service lighttpd added to runlevel default gentoo-lxc ~ # rc-update add tor default * service tor added to runlevel default
На этом минимальная настройка гостя закончена.
*Скрипты*
Т.к. гость у нас находится на зашифрованном luks файле, мы не сможем поднимать его при
загрузке хоста(будет необходимо ввести пароль).
Напишем совсем небольшой скрипт для упрощения жизни:
[home luks root]# vim /usr/local/bin/gentoo-lxc #!/bin/bash function start_lxc() { cryptsetup luksOpen /srv/luks/gentoo-img gentoo-luks mount /dev/mapper/gentoo-img /srv/luks/gentoo-guest screen -S gentoo-lxc -d -m lxc-start -n gentoo-lxc } function stop_lxc() { lxc-stop -n gentoo-lxc umount /srv/luks/gentoo-guest cryptsetup luksClose gentoo-lxc } function status() { lxc-info -n gentoo-lxc } function panic() { stop_lxc lxc-destroy -n gentoo-lxc rm -rf /srv/luks/gentoo* } case $1 in start) start_lxc ;; stop) stop_lxc ;; status) status ;; panic) panic ;; *) echo -e "USAGE: $0 [start|stop|panic]\npanic - destroy all data" ;; esac :wq [home luks root]# chmod +x /usr/local/bin/gentoo-lxc
На этом пока все. Вот так с минимальными усилиями мы настроили изолированный LXC узел тор
на зашифрованном LUKS файле с "тревожной кнопкой". В статье не описываются принципы
безопасности и многое другое. В следующий раз поговорим про btrfs.
ↄ⃝ Difrex <me@difrex.ru> 2015
Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/