Проксирование I2P сайта в TOR

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

Я придумал техническое решение для истинного параноика. Когда надо опубликовать сайт, но так, чтобы его администратора ни в коем случае не нашли. А темы бывают разные, и в принципе у всех нас разная степень готовности рисковать. Тут вариант, когда администратор одновременно и очень-очень опасно за свою шкуру, но при этом он не готов отказаться от идеи публиковать сайт. Поэтому ищет наиболее безопасный способ это сделать.

Что такое Даркнет

Это такое лиричное название скрытой части интернета, где ценители свободы коммуникации устроили свою делянку. Я сейчас нашел, что 9 лет назад писал про это, использовав придуманное слово криптонет.

Обычный интернет слишком наивен и слишком открыт. Это приемлемо, пока ты занят чем-то нормативным. Но очень хреново, если у тебя появляются мощные враги, вроде государств. И это касается не только продавцов психоактивных веществ, но и СМИ, и даже просто частных мнений. Пишешь возмущённое «да они охуели», скучающий опер находит этот пост, шлёт запрос администратору форума, тот сообщает с какого IP было опубликовано сообщение, ещё запрос к провайдеру, которому принадлежит IP, и вот у опера уже адрес, имя и фамилия.

Дебилизм в том, что этого достаточно. Презумпция невиновности тут остаётся за дверью. Вариант, что кто-то опубликовал пост через твой компьютер не рассматривается.

А ежели администратор форума не пойдёт на контакт? Может он даже поощряет подобное у себя? То можно посмотреть IP уже самого форума, и достать площадку, где он размещён, и тоже найти этого администратора в натуральном виде и посадить на бутылку.

Эта ситуация породила ответ.

Скрытые сервисы

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

Есть попсовый TOR, он был придуман прежде всего, чтобы незаметно посещать обычные сайты, но позже к нему прикрутили возможность размещать внутри сети скрытые сайты. Называются Onion. Репутация у них так себе — было достаточно много историй, как такие сайты всё-таки накрывали, и их администраторов арестовывали.

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

Есть ещё разные Freenet, ZeroNet и ещё пачка, но я про них мало знаю.

TOR менее надёжен для владельца сайта, но более удобен пользователям.

I2P сложен обывателям, зато защищает по-максимуму.

TORI2P
Простота начала использования🟢🔴
Безопасность администратора🟠🟢

Как усидеть на двух стульях?

Я придумал как, несколько пожертвовав скоростью, можно получить достоинства обоих сетей. Надо объявить сайт в TOR’е, а фактически держать его в I2P.

С одной стороны, чтобы посетить сей сайт, достаточно будет скачать TorBrowser, и в адресной строке ввести соответствующий onion-адрес. Проще сложно придумать. Юзер счастлив.

С другой стороны, под капотом, более-менее защищённый onion сайт фактически является транзитным пунктом, и сам сайт берётся из I2P сети, что усложняет его нахождение техническими методами до запредельного уровня. Счастлив админ.

А если в принципе не светить I2P адрес сайта, то такая схема сыграет не только в деле упрощения доступа к сервису, но и защитит администратора ещё сильнее.

Реализация

Запустить I2P сайт

Я рекомендую не java, а C++ версию роутера. Она решительно быстрее и яснее.

С помощью vain из i2pd-tools можно сделать удобный префикс b32-адресу сайта. Тогда у вас на руках уже будет ключевой файл, иначе система сама его придумает, а вы его надёжно сохраните.

Если I2P роутер будет использоваться только для хостинга, то на нём можно смело отключить все дополнительные сервисы.

# Занимаемая полоса
# P — до двух мегабит, можно и X — анлим
bandwidth = P
# Логи не нужны
loglevel = none

[httpproxy]
enabled = false
[socksproxy]
enabled = false
[sam]
enabled = false
[bob]
enabled = false
[i2pc]
enabled = false
[i2pcontroll]
enabled = false

В /var/lib/i2pd/tunnels.conf пропишем коннект к нашему сайту:

[www-soz]
type = http
host = 127.0.0.1
port = 12345
keys = www-blah-blah.dat

После правки туннелей, возможно, понадобиться полностью перезагрузить сервис i2pd. Если вы не генерировали адрес с префиксом, то в контрольной панели I2Pd в разделе туннелей можно подглядеть b32-адрес сайта. Пусть у нас тут для примера он будет blah-blah.b32.i2p.

После в nginx прописать что-то вроде:

server {
  listen 127.0.0.1:12345;
  server_name blah-blah.b32.i2p;
  # ...
}

Ну и тоже перезапустить. Можно проверить с той же машины curl’ом на локальный айпи и порт, а после с клиента I2P.

Теперь прокси

На нём тоже надо поднять i2pd демона, зайти в настройки /var/lib/i2pd/i2pd.conf и поотключать там все сервисы (как и в версии для хостинга).

В /var/lib/i2pd/tunnels.conf нужно прописать один единственный туннель, который будет подключаться к нашему сайту:

[PROXY-SITE]
type = client
address = 127.0.0.1
# Любой свободный порт
port = 54321
destination = blah-blah.b32.i2p
destinationport = 80
keys = proxy-site.dat

Здесь proxy-site.dat в целом не важен. Важно, что теперь на локальной машине можно постучаться в 54321 порт и получить свой I2P сайт. Осталось доверить это TOR’у.

Для этого нужно его установить, отредактировать /etc/tor/torrс, прописав там скрытый сарвис:

HiddenServiceDir /var/lib/tor/hidden_service_proxy/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:54321

Папку /var/lib/tor/hidden_service_proxy/ система создаст сама после [пере]запуска TOR’а, а можно и самому сделать, если тоже захочется .onion адрес с удобным префикосом (делается утилитой mkp224o). В любом случае её содержимое надо будет скопировать, так как это ключи от публичного адреса сайта в TOR’е.

После [пере]загрузки сервиса, сайт довольно быстро становится доступен в TOR сети. Вуаля!

Чего можно улучшить

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

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

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

Добавить комментарий