Строим защищённую систему на основе TOR и I2P

в 15:07, , рубрики: i2p, Tor, безопасность, информационная безопасность, метки: , ,

Введение

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

На провокации вида «при помощи такой системы можно слить гостайну врагу» я отвечаю сразу: при помощи ядерных ракет можно не только устроить конец света, но и отогнать или расколоть угрожающий нашей планете астероид.

Постановка задачи

Задачи нашей системы будут сформулированы следующим образом:

  • обеспечить маскировку внешнего IP-адреса;
  • защитить целостность и конфиденциальность при приёме и передаче данных;
  • обеспечить конфиденциальность хранимых на жёстком диске данных.

Что нам потребуется?

Во-первых, это компьютер достаточной производительности с большим объёмом оперативной памяти. Его операционная система значения не имеет, поскольку устанавливаемое на него ПО кроссплатформенно. Ну, разве что, за исключением экзотических или совсем уж древних ОС.
Во-вторых, программное обеспечение. Я перечислю его в порядке, в котором оно потребуется в построении системы:

  • TrueCrypt
  • VirtualBox (качать с официального сайта пока не торопитесь)
  • Ubuntu. Я делал на версии 11.10 x86, поскольку 12.04 на тот момент не было. Поставьте образ качаться прямо сейчас, чтобы не терять времени. На диск резать не надо.
  • TOR
  • I2P

Обращаю внимание, что всё вышеперечисленное ПО имеет открытый код. Это очень важно, поскольку эти программы — ядро нашей безопасности, и какая-нибудь проприетарная закладка могла бы очень дорого обойтись.

Начнём!

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

Создадим с её помощью зашифрованный том, хранящийся в файле. Можно создать и на разделе, но, на мой взгляд, это менее удобно.

Создавать ли скрытый том? Вопрос неоднозначный. Эта фича предназначена для использования в Англии, где невыдача паролей при конфискации ПК сама по себе является преступлением. В то же время в России такой законодательной нормы нет, а использование скрытого раздела съедает полезный объём диска. Я создавать скрытый раздел не стал.

Размер раздела выберем на своё усмотрение. Лично я выбрал 50 ГБ.

Алгоритм шифрования — я выбрал AES. Во-первых, ему доверяют американские военные для защиты высших грифов секретности, а во-вторых, он аппаратно ускоряется новыми процессорами Intel и TrueCrypt имеет поддержку этого ускорения.

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

Далее нам потребуется виртуальная машина. Всё, что мы оберегаем — будет храниться в ней.
Связано это с тем, что:

  • работа в основной ОС оставляет в различных местах разнообразные следы;
  • если основная ОС проприетарна (не буду показывать пальцем) — в ней не исключено наличие закладок;
  • прикладное ПО в основной ОС тоже подпадает под предыдущее требование (вспомним PunkBuster, EULA которого позволяет сканировать жёсткий диск пользователя).

Мы будем использовать VirtualBox, но не основной дистрибутив, а портативный. Скачаем инсталлятор на заранее примонтированный шифрованный диск, запустим и скачаем поддерживаемый дистрибутив Бокса посредством самой утилиты. Далее утилита распакует его и настроит на портативность.

Создадим в Боксе машинку с двумя жёсткими дисками: одним — на 8-10 ГБ и вторым на всё оставшееся место, разумеется, расположив оба на шифрованном диске. Пройдёмся по настройкам, поставим сеть в NAT и настроим остальное по своему вкусу — особо критичного там ничего нет. Подключим образ Убунты (который, надеюсь, уже скачался) в качестве дисковода.

Запускаем машину и начинаем установку ОС. При разбиении дисков поступим примерно так: разместим на первом, маленьком, корень и своп, а на большом — /home. Все данные мы будем хранить в /home. Таким образом, разделение системы и данных происходит между разными файлами жёстких дисков Бокса. Далее всё выполняем по своему вкусу.

Установилось! Теперь начинаем настройку.

Идея заключается в том, чтобы оставить прямой доступ в сеть только двоим избранным — маршрутизаторам TOR и I2P.

Сначала ставим TOR из их собственного репозитория (в официальном версия может быть устаревшей) по инструкции с официального сайта. Потом поставим и I2P, опять же из собственного PPA-репа разработчиков — инструкция.

Обратим внимание, что TOR сам по себе предоставляет только SOCKS5-прокси, и его поддержка есть не во всех программах. Поэтому установим Polipo — свободный HTTP-прокси:
sudo apt-get install polipo

Настроим его:
sudo nano /etc/polipo/config

Добавим в него строчку:
proxyPort = 8118

Ниже раскомментируем (или подправим, если что-то не так):
socksParentProxy = "localhost:9050"
socksProxyType = socks5

Сохраним. Перезапустим Полип:
sudo service polipo restart

Теперь настроим I2P:
sudo nano /etc/default/i2p

Включим запуск в качестве демона:
RUN_DAEMON="true"

Заодно видим в файле имя пользователя, от которого работает маршрутизатор — у меня это i2psvc
Сохраняем.
Запускаем: sudo service i2p start

Теперь узнаем пользователя, от которого работает TOR:
lsof -c tor
У меня это debian-tor.

И теперь — самое вкусное: рубим доступ в сеть всему, что не TOR и не I2P. Ещё раз — всему.
Вот готовый скрипт iptables-restore, только проверьте ещё раз имена пользователей.
Общая политика DROP, разрешён доступ всем на локалхост, I2P и TOR — во внешнюю сеть.
sudo nano /etc/iptables.up.rules

Содержимое:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A OUTPUT -d 127.0.0.1/32 -j ACCEPT
-A OUTPUT -m owner --uid-owner debian-tor -j ACCEPT
-A OUTPUT -m owner --uid-owner i2psvc -j ACCEPT
COMMIT

Откроем файл настройки сети:
sudo nano /etc/network/interfaces

Допишем команду загрузки правил:
pre-up iptables-restore < /etc/iptables.up.rules

У меня выглядит так:
auto lo
iface lo inet loopback
pre-up iptables-restore < /etc/iptables.up.rules

Поскольку управление сетью у меня идёт посредством network-manager — интерфейса eth0 в файле нет. Правила прописываются при поднятии лупбэка, но разницы нет, поскольку эти правила едины для всех интерфейсов.

Загрузим правила в iptables. Можно перезапустить сеть, но мы сделаем так:
sudo iptables-restore < /etc/iptables.up.rules

Готово! Крепость построена, ров вырыт, лучники на стенах выставлены. Но мы ещё не раздали пропуска её жителям! Исправим.
Для доступа во внешний интернет лучше применять TOR, HTTP-интерфейс которого у нас на 8118 порту.
nano ~/.bashrc

Допишем в конец:
export http_proxy="http://127.0.0.1:8118/"

Теперь в терминале просто
bash
При этом шелл перечитает свой конфиг. Однако apt, без которого в Убунте — как без воды (и ни туды, и ни сюды), чихать хотел на эту переменную окружения. Разъясним ему персонально внутриобъектный режим нашей крепости:
sudo nano /etc/apt/apt.conf.d/proxy

Там должно быть:
Acquire::http::Proxy "http://127.0.0.1:8118/";
Сохраняем, закрываем.

Ну вот вроде и всё. Теперь осталось поставить браузер (если чем-то не нравится установленный по умолчанию Фокси) и начинать пользоваться не очень быстрым, зато защищённым со всех сторон доступом. И повторюсь — программа внутри виртуалки может быть нашпигована хоть тысячей закладок — данные она, может, и сольёт, только они будут анонимными. Вычислить внешний IP не удастся никому.

Систему строил полностью своими силами, не опираясь на готовые How-To (если такие вообще существуют, я не нашёл). Поэтому буду рад принять от читателей возможные усовершенствования и указания на недочёты.

Спасибо за внимание! Надеюсь, хоть кому-нибудь я пользу принёс.

Автор: Raegdan

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js