Анонимная виртульная машина. Устанавливаем VirtualBox в Tails

НОВОСТИ
2018-01-03 13:57:08
0
12.1K

хвосты

Tails - лучшая операционная система, если вы хотите сделать ваше присутствие в сети максимально анонимным. Но она имеет некоторые особенности, которые мешают использовать её как полноценный десктоп. Одна из них - отсутствие возможности установить VirtualBox.

Вот несколько причин, которые мешают установить VirtualBox в Tails так же, как в любой дистрибутив Linux:

1) Tails — это дистрибутив «без памяти». Любые сделанные тобой модификации системы (в том числе установка пакетов) будут сброшены при выключении машины. Обойти эту проблему можно, создав Persistent-раздел и внеся нужные пакеты в список для сохранения. При следующей загрузке Tails установит эти пакеты заново. Но это только начало.

2) У Tails есть одна дурацкая особенность: 64-битное ядро и 32-битное окружение иcполнения. Все пакеты этого дистрибутива 32-битные, а это значит, что стандартными методами можно установить только 32-битную версию VirtualBox, которая будет иметь ограничение в три гигабайта для каждой виртуальной машины. Более того, запустить эту версию на 64-битном ядре будет невозможно: 32-битной VirtualBox нужны 32-битные модули ядра и соответствующее ядро.

3) Даже если вы смогли решить две предыдущие проблемы, ваша виртуальная машина не сможет выйти в Интернет. Это связано с тем, что Tails имеет ограничение на подключение к сетевым хостам только через Tor. Поэтому придется менять правила брандмауэра и несколько других конфигов, чтобы направить пакеты виртуальной машины в Tor. Причем делать это придется после каждой перезагрузки.

Уже кипит ?) Разберем решение всех этих проблем.

Для выполнения следующих шагов нам понадобится так называемый Persistent-раздел. Это специальный раздел с файловой системой ext4, который можно создать на флешке рядом с основным. Его задача — хранение пользовательских данных, конфигураций приложeний и кеша пакетов, который нужен для быстрой установки «сохраненных» пакетов при следующей загрузке.

Чтобы создать Persistent-раздел, необходимо установить Tails, то есть не просто записать ISO-файл на флешку, а загрузиться с этой флешки и установить Tails на другую флешку с помощью инсталлятора: Меню > Tails > Tails Installer. После этого необходимо загрузиться со второй флешки и создать раздел: Меню > Tails > Configure persistent volume. Когда Tails предложит выбрать, что следует хранить на этом разделе,выбираем все пункты.

Можно провести установку и без двух флешек, просто запустив ISO-образ внутри виртуальной машины, а затем установить её на USB-накопитель.

После заверешения операции в каталоге /home/amnesia/ появится подкаталог Persistent, в который можно копировать любые данные с целью сохранить их между перезагрузками.

Версия VirtualBox 64-bit не будет работать в 32-битном окружении, но мы можем создать 64-битное окружение, которое будет отделено от основной системы и распoлагаться в разделе Persistent. Для этого в Debian (и, как следствие, Tails) есть инструмент debootstrap, позволяющий развернуть полноценный дистрибутив Debian в выделенном каталоге.

Создаем окружение 6

Итак, загружаемся в Tails. В окне приветствия (More options?) нажимаем Yes и устанавливаем пароль root (любой). Далее открываем терминал и переходим в каталог Persistent:

Устанавливаем debootstrap:

$ sudo apt-get install debootstrap

Отключаем брандмауэр, чтобы он не заворачивал весь трафик в Tor и не мешал нам в дальнейшей рабoте:

Создаем каталог vbox для нашего 64-битного окружения и разворачиваем его:

$ sudo debootstrap --arch amd64 jessie vbox http://ftp.ru.debian.org/debian/

Так мы получим скелет 64-битного Debian, в котором пока, кроме базовой системы, нет ничего. Следующий шаг — установка VirtualBox, но сначала нам нужно закинуть в окружение необходимые модули ядра.

Ядерные модули VirtualBox распространяются в форме исходников, которые собираются под конкретное ядро на этапе установки. Самый простой способ установить их внутрь виртуального окpужения — это инсталлировать официальную версию VirtualBox в сам Tails, а затем скопировать скомпилированные модули в 64-битное окружение.

Для начала установим компилятор и хидеры ядра, необходимые для сборки модулей:

Также нам понадобятся хидеры ядра для архитектуры AMD64. Apt-get их не найдет, поэтому скачаем их с сервера Debian, а затем установим с помощью dpkg:

$ sudo dpkg -i linux-headers-4.8.0-0.bpo.2-amd64_4.8.15-2~bpo8+2_amd64.deb

В ходе установки появится ошибка конфигурации пакета linux-headers-4.8.0-0.bpo.2-amd64. Она же будет возникать при следующих вызовах apt-get. Не обращайте на это внимание, на самом деле пакет установлен.

Приступаем к установке VirtualBox. Добавим нужный репозиторий в /etc/apt/sources.list:

Импортируем ключи Oracle:

$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

Опять же не обращаем внимания на ошибки Wget. Наконец устанавливаем VirtualBox:

$ sudo apt-get install virtualbox-5.1

Эта команда установит 32-битную VirtualBox, но собeрет модули для 64-битного ядра. Работать такая связка в основной системе, как я уже говорил ранее, не будет. Но нам это и не нужно, нам необходимы модули. Скопируем их в 64-битное окружение:

После этого VirtualBox можно удалить. Или не делать ничего, после перезагрузки она исчезнет.

Установка VirtualBox в 64-битное окружение.

Чтобы установить VirtualBox в полученное окружение, надо сделать chroot (сменить корневой каталог) в каталог /Persistent/vbox и проделать те же шаги установки. Но сначала нужно прокинуть в окружение необходимые для его работы виртуальные файловые системы. Для этого создадим в каталоге /Persistent файл fstab-vbox следующего содержания:

/proc /home/amnesia/Persistent/vbox/proc none bind 0 0

/dev /home/amnesia/Persistent/vbox/dev none bind 0 0

/home /home/amnesia/Persistent/vbox/home none bind 0 0

/tmp /home/amnesia/Persistent/vbox/tmp none bind 0 0

/var/tmp /home/amnesia/Persistent/vbox/var/tmp none bind 0 0

/usr/src /home/amnesia/Persistent/vbox/usr/src none bind 0 0

И подключим все перечислeнные в нем файловые системы с помощью такой команды:

Переключаемся в окружение с помощью chroot:

Настраиваем DNS и устанавливаем корневые сертификаты для корректной работы Wget и apt-get:

# apt-get install ca-certificates

Добавляем репозиторий VirtualBox в /etc/apt/sources.list:

Импортируем ключи Oracle:

# wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | apt-key add -

Устанавливаем VirtualBox:

# apt-get install virtualbox-5.1

И наконец запускаем ее:

# modprobe vboxnetflt

# modprobe vboxnetadp

# modprobe vboxpci

# virtualbox

Готово! Мы имеем рабочую 64-битную версию VirtualBox в Tails. Но теперь необходимо сделать так, чтобы виртуальные машины могли выходить в Интернет через Tor. Выход в Интернет будет доступен благодаря отключенному брандмауэеру, но после перезагрузки Tails снова его переконфигурирует, и доступ будет закрыт.

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

Но как различить какой трафик принадлежит виртуальной машине, а какой нет? Для этого сделаем виртуальный сетевой мост, который будет иметь фиксированный IP-адрес и заранее заданное имя. Делается это не очень сложно:

Не спешите выполнять данную команду. Дело в том, что в Tails есть специальный скрипт, который активируется в момент появления в системе нового сетевого интерфейса (например, при подключении USB Wi-Fi адаптера) и рандомизирует его MAC-адрес.

А самое интересное здесь в том, что, если рандомизировать MAC не получится, Tails полностью отключит доступ в Интернет вообще всем приложениям. Нельзя этого допустить, поэтому модифицируем скрипт таким образом, чтобы в случае обнаружения сетевого моста он завершался.

Делается это достаточно просто. Добавляем всего одну строку в начало скрипта (/usr/local/lib/tails-spoof-mac):

Теперь надо заставить систему прозрачного проксирования Tor слушать на адресе сетевого моста. Сам прозрачный прокси уже активен в настройках Tor (Tails иcпользует его, чтобы перенаправлять в Tor обращения к доменам .onion), поэтому нужно всего лишь добавить в конфигурацию Tor (/etc/tor/torrc) две строки:

TransListenAddress 192.168.56.1

Остается только завернуть трафик сетевого моста в Tor. Для этого можно использовать iptables:

$ sudo iptables -A FORWARD -i vboxnet0 -j ACCEPT

$ sudo iptables -t nat -A PREROUTING -i vboxnet0 -p udp --dport 53 -j REDIRECT --to-ports 5353

$ sudo iptables -t nat -A PREROUTING -i vboxnet0 -p tcp --syn -j REDIRECT --to-ports 9040

$ sudo iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE

Однако, так как при обнаружении нового сетевого устройства Tails сбрасывает настройки iptables, надежнее добавить правила в файл /etc/ferm/ferm.conf, который как раз и используется для сброса правил.

Сама конфигурация ferm.conf принадлежит утилите ferm, эдакой надстройке над iptables, которая позволяет задавать правила в более читаемой и удобной форме, чем сам iptables. Добавляем строки в следующие секции:

Секция chain INPUT. Строка:

Секция chain FORWARD. Строка:

Секция chain PREROUTING. Строки:

interface vboxnet0 proto tcp syn REDIRECT to-ports 9040;

Секция chain POSTROUTING. Строка:

Все. Теперь мы гoтовы создать виртуальный сетевой интерфейс и перезапустить Tor:

$ sudo systemctl restart tor

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

Самый простой вариант получить DNS-сервер на локальной машине — это dnsmasq. Установим его:

Внесем в конфиг /etc/dnsmasq.conf необходимые правки:

interface=vboxnet0

bind-interfaces

dhcp-range=192.168.56.2,192.168.56.254,1h

Перезапустим:

Теперь точно все. Можно запускать VirtualBox:

Но вы должны иметь в виду, что каждую виртуальную машину придется перестраивать на выход в Интернет через интерфейс vboxnet0. Чтобы это сделать, необходимо открыть настройки виртуальной машины и во вкладке Network первого адаптера выбрать "Host-only Adapter", Name: vboxnet0.

Виртуальные машины и ISO-образы необходимо сохранять в каталоге /Persistent/vbox/root, иначе VirtualBox их просто не увидит.

Теперь имеется корректно настроенная VirtualBox для работы в Tails. Но как было сказано выше, остается проблема утери настроек после перезагрузки. VirtualBox и модули ядра останутся на месте, а вот правки спуфера MAC-адресов, ferm и прочее будут утрачены, что вызывает мягко говоря неудобство.

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

copy_spoofer() {

cp tails-spoof-mac /usr/local/lib/tails-spoof-mac

chown root:root /usr/local/lib/tails-spoof-mac

}

copy_ferm() {

cp ferm.conf /etc/ferm/ferm.conf

chown root:root /etc/ferm/ferm.conf

}

setup_chroot() {

mount | grep vbox > /dev/null && return

mount -T vbox-fstab -a

chroot vbox /sbin/modprobe vboxdrv

chroot vbox /sbin/modprobe vboxnetflt

chroot vbox /sbin/modprobe vboxnetadp

chroot vbox /sbin/modprobe vboxpci

}

setup_bridge() {

ifconfig | grep vboxnet0 > /dev/null && return

chroot vbox /usr/bin/vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0

}

configure_tor() {

cat /etc/tor/torrc | grep 192.168.56.1 > /dev/null && return

echo DNSListenAddress 192.168.56.1 >> /etc/tor/torrc

echo TransListenAddress 192.168.56.1 >> /etc/tor/torrc

systemctl restart tor

}

configure_dhcpd() {

cat /etc/dnsmasq.conf | grep vboxnet0 > /dev/null 2>&1 && return

apt-get -y install dnsmasq

echo >> /etc/dnsmasq.conf

echo port=53 >> /etc/dnsmasq.conf

echo interface=vboxnet0 >> /etc/dnsmasq.conf

echo bind-interfaces >> /etc/dnsmasq.conf

echo dhcp-range=192.168.56.2,192.168.56.254,1h >> /etc/dnsmasq.conf

systemctl restart dnsmasq

}

copy_spoofer

copy_ferm

setup_chroot

setup_bridge

configure_tor

configure_dhcpd

chroot vbox /usr/bin/virtualbox

Назовем этот скрипт start.sh, разместим в каталоге /Persistent рядом с каталогом vbox и дадим права на исполнение:

Скопируем уже исправленные версии /usr/local/lib/tails-spoof-mac и /etc/ferm/ferm.conf в каталог /Persistent:

$ sudo cp /etc/ferm/ferm.conf ~/Persistent

Теперь можно спокойно перезагружать систему, а затем после загрузки запустить VirtualBox командой:

$ sudo ./start.sh

Запустить VirtualBox в Tails оказалось не так просто, но возможно. Это кажется немного странной конфигурацией, но она дает возможность иметь флешку, с помощью которой можно запустить практически любую настольную ОС в полностью анонимизурующей среде, благодаря Tails.

0
12.1K