Как стать автором
Обновить

Размещаем сайт в анонимной сети I2P (+ параноидальный режим)

Время на прочтение 6 мин
Количество просмотров 32K


Предположим, что ты уже зашел несколько раз в I2P, початился там с ребятами в irc, проникся идеей ламповой невидимой и задумался о собственном (в)кладе в I2P. В раздумьях об этом ты посидел пару дней перед раскрытым блокнотом — узнав попутно из новостей, что не только флибуста, но и рутрекер был запрещен, — и наконец вспомнил про то что ты Сноуден и основатель викиликс (весьма неожиданный поворот, признаюсь, я сам не ожидал от тебя такого), и уже давно ищешь плацдарм для размещения общественно значимой информации. Например, ты решил выкладывать куда-нибудь картинки с котиками, которых ты налайкал в твиттере (Сноуден лайкает котиков в твиттере, ты знал?). И выбор твой пал на I2P.

Что тебе для этого понадобится: поднятый сервер и демон I2P (i2pd). Если его еще нет, установи (ссылки на оба тьюториала по установке — под win и unix, — ты найдешь в конце публикации). В нашем примере до созданного сервера можно достучаться по адресу

127.0.0.1:8080

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

Как ты помнишь, i2pd это коробка с кучей портов, расположенная внутри твоего компьютера и подключенная к сети I2P. Запущенный тобой сервер — это другая коробка, к которой тоже можно подключаться через порты. Значит если мы состыкуем порты, то и наш сервер соединится с сетью I2P. И раз наш сервер слушает 127.0.0.1:8080, то мы возьмем i2pd и настроим его на этот же самый адрес.

Откроем файл конфига (в unix — /.i2pd/tunnels.cfg, в windows — %appdata%\i2pd) и добавим в него:

[SUPERHACKERSITE]
type = http
host = 127.0.0.1
port = 8080
keys = superhackersite.dat

В отличие от присутствующих тоннелей вроде IRC, здесь мы сами выступаем сервером, и уже не мы будем соединяться к-чему-то-в-сети, а к нам будут приходить люди-из-сети, поэтому тип тоннеля (type) установлен соответствующим образом. Вместо http можно было указать server. Отличие между ними в том, что сервер-тип передает данные как есть (при этом по нему точно так же можно соединиться с твоим серваком), а http-тип использует следующие заголовки:

X-I2P-DestHash — хэш адреса посетителя в base64
X-I2P-DestB32 — то же самое, но в base32
X-I2P-DestB64 — это уже полный адрес в base64

Админам серверов эти заголовки помогают выстраивать сессии, работая с каждым посетителем индивидуально (да, такое в i2p тоже возможно, до тех пор, пока посетитель подключен с одного и тот же адреса).

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

Опционально ты можешь включить параноидальный режим доступа строго выбранных адресов. Пусть твои друзья посмотрят каждый свой сетевой адрес (этот адрес, наряду с адресами прокинутых ими тоннелей, доступен им в вебконсоли на вкладке LocalDestinations — его можно найти методом исключения, сопоставив с адресами, представленными на странице I2P Tunnels) и сообщат его тебе. Тебе останется вписать дополнительную строчку в создаваемый тоннель в формате 26qxgmyqczulza5ym3jij5er3onclacejyqzecuhjllwun3kxuzq (безо всяких дополнений в виде b32.i2p), отделяя адреса запятой. Следующего вида:

accesslist = 26qxgmyqczulza5ym3jij5er3onclacejyqzecuhjllwun3kxuzq, 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa и т.д.

Правда для этого твоим друзьям из accesslist'а придется — каждый раз, когда они захотят к тебе подключиться, — старовать роутеры с ключом proxykeys (подробнее пусть посмотрят ссылку на документ по конфигам в конце публикации), пусть напишут себе скрипт для этого дела: в I2P без подобной настройки каждый человек всякий раз стартует с новым адресом, новые адреса помогают оставаться анонимными.

Сохраняем изменения в tunnels.cfg. Если i2pd сейчас запущен, останавливаем его в терминале строкой:

$ pkill i2pd

И запускаем снова. Без этого изменения в tunnels.cfg не вступят в силу.

Теперь зайди в вебконсоль, пройди по ссылке на страницу 'I2P tunnels' и поищи надпись формата

SUPERHACKERSITE < 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa:8080

Скопируй все вплоть до порта. Это b32-адрес твоего сайта, каким он предстает в сети (он будет оставаться постоянным до тех пор пока привязан к созданному тобой ключу superhackersite.dat). Добавь к нему окончание .b32.i2p чтобы получить адрес наподобие

4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa.b32.i2p

Включи обратно i2pd и подключись к сайту через этот новый адрес. Готово? Значит, сайт доступен из I2P. Чуть не забыли самое главное: ты ведь хотел добавить на свою страницу котов!

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

Кстати, ты еще можешь получить совершенно бесплатно годный адрес для своего сайта. Ведь публичный адрес тоже нужен иногда настоящим анонимам вроде тебя и меня. Для этого рассмотрим повнимательнее систему адресации I2P.

Вместо ip-адресов здесь длинные, по-настоящему бесчеловечные криптографические base64-идентификаторы (длиной в 512 байт!). И назначаются они для любого сетевого адреса: и самих коробок-роутеров, и всех адресов на связанных с этим роутером тоннелях, кроме того, и нашему сайту тоже теперь принадлежит такой идентификатор.

Но всем понятно, что если в схеме «роутер-роутер» base64-адреса подходят замечательно, то в схеме «человек-человек» они весьма и весьма неудобны. Поэтому в сети предусмотрены соответствия между неудобными, длиной, повторимся, в целых 512 байт, адресами и удобными короткими.

Удобных адресов существует целых два вида. Первый — это адреса интернет-типа (например, onelon.i2p или armada.i2p). Второй тип — это b32, с которыми мы уже сталкивались, и они вычисляются из b64. B32, как мы уже видели, намного короче, и их удобнее передавать другим людям где-нибудь в чате. В чем же тогда отличие, почему используется и то, и другое: и b32, и привычные интернет-адреса? А все дело в том, что по b32 твой роутер способен распознать соответствующий ему b64-адрес самостоятельно. А такие имена сайтов, которые ты привык встречать в интернете, назначаются людьми; соответственно, никакими вычислениями из того же direct.i2p исходный b64 не вынуть, а значит, чтобы обратиться к этому адресу, придется и соответствующий ему b64-идентификатор где-то сохранять.

Хранятся соответствия между идентификаторами и именами сайтов в адресных книгах, и имеется их по одному домашнему экземпляру у каждого запущенного в сети роутера. Стоило бы вообще-то сравнить это с аналогом hosts, да только вот в сети I2P адресные книги выполняют намного более значимую роль, хотя функционально они, конечно же, друг с другом схожи. А все потому что в I2P отсутствуют как явление DNS-сервера (в целях повышения отказоустойчивости сети). То есть присутствуют конечно ноды, откуда любой другой роутер может скачать себе соответствия между именем сайта и base64, но обращение к ним все равно происходит нерегулярно, чтобы скачать обновление для адресной книги. То есть когда ты вводишь в адресной строке адрес сайта, твой роутер обращается в поисках base64 не к удаленным серверам, а к собственной же адресной книге.

Адресная книга расположена в соответствующей директории: adressbook. Файл addresses.csv, который ты в ней найдешь, состоит из строк-соответствий между интернет-типами адресов и base32-идентификаторами.

Как мы уже упоминали, все это регулярно скачивается из сети через подписки с доверенных серверов (на самом деле таких же нод, как и твоя). Значит, чтобы наш сайт тоже попал в адресные книги других нод, нужно зарегистрировать его на одном из соответствующих ресурсов. Например, ресурсе I2P Name Registry: inr.i2p. Для регистрации тебе понадобится отправить заявку с b64-идентификатором своего сайта, но ты легко найдешь его в вебконсоли: просто зайди в I2P Tunnels и кликни по b32-адресу. Там будет информация о соединениях и, конечно же, b64.

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

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

Кроме этого для распространения адреса сайта в сети есть всякие каталоги, вики, аналогичные hiddenwiki в торе, и как минимум один поисковик, который использует robots.txt, но это уже, как говорится, совсем другая история.

Заходи в IRC и общайся с разработчиками на канале #i2pd-ru. Помни, что анонимность зависит в первую очередь от тебя. Удачи тебе в построении сайта!

Если ты еще не знаешь, как поставить себе i2pd, то тебе сюда:

habrahabr.ru/post/275643 — Как в первый раз запустить i2pd: инструкция под Debian/Ubuntu

habrahabr.ru/post/275647 — Как пользоваться i2pd: исчерпывающая инструкция под MS Windows

Так же, рекомендуется к прочтению:

i2pd.readthedocs.org/en/latest/configuration.html#config-files — Настройки конфигурации и старта демона

xakep.ru/2011/07/07/56161 — Анонимный хостинг через I2P: практические советы по использованию криптосети
Теги:
Хабы:
+22
Комментарии 17
Комментарии Комментарии 17

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн