Анонимная виртульная машина. Устанавливаем VirtualBox в Tails
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.