Создание I2P сайта

Материал из Викиреальностя
Перейти к: навигация, поиск

I2P сайт (иначе говоря eepsite) — анонимно хостящийся ресурс, доступный только из сети I2P. Может быть статичной HTML-страницей, либо представлять собой полноценный портал написанный на каком-либо серверном языке программирования — таком как PHP, Perl, Ruby on Rails и так далее.

В обоих случаях он доступен по адресу example.i2p. Вместо «example» подставляется имя i2p-сайта. Правила именования те же, что и для ресурсов в внешнем интернете, например: example.com. Отличается только окончание — «.i2p». Особенности такого сайта в том, что его местоположение и личность владельца трудно вычислимы, так как применяется чесночная маршрутизация для доступа к ресурсу.

Кроме того, на регистраторе stats.i2p поддерживается регистрация интернациональных доменных имён:

International Domain Names are acceptable in 'xn--' (Punycode) form

Это означает, что можно зарегистрировать себе имя сайт.i2p.

Содержание

[править] Подготовка к установке

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

К примеру, если то или иное веб-приложение позволяет выполнить запрос на другой сайт (к примеру, через форму для задания аватара пользователя), появляется возможность легко определить ваш реальный IP-адрес, а если поддерживается BB-код [img], то у пользователя есть возможность получить IP-адреса посетителей путём ссылки на специальное изображение в «большом интернете». Даже если вы модифицируете код движка, запретив использовать в теге [img] ссылки на ресурсы «большого интернета», это не решит проблему, так как злоумышленник может разместить на i2p-сайте файл, выдающий себя за изображение, но на самом деле делающий перенаправление посетителя в «большой интернет».

[править] Принципы реализации

Eepsite может быть реализован разными способами.

[править] Настройка I2P тоннеля для будущего сайта

Вам следует изначально определить несколько вещей:

  • Какой адрес вашего сайта будет в i2p. Имя выбираем на этапе проектирования и создания тоннеля.
  • На каком адресе/порту доступен ваш сайт. Как правило 127.0.0.1:80 (и именно поэтому ни в коем случае нельзя оставлять его на этом порту. На момент этой википравки число I2P-роутеров ~14000, и просканировать у всех 80-й порт гораздо легче, чем просканировать ~917504000 портов(всего на порт выделяется 2 байта - значит количество портов 65536!) (на самом деле меньше, если исключить намертво зарезервированные порты типа 68-го). Кроме того, запретите с помощью фаервола доступ к порту прослушиваемому вашим сервером со всех IP-адресов кроме 127.0.0.1 — в противном случае вам придётся полагаться только на собственную везучесть. Или на то что вы — Неуловимый Джо).
  • Описание веб-сайта и его название (лучше сделать их удобоваримыми).

Затем, идём на страницу http://localhost:7657/i2ptunnel/index.jsp - и в списке «Серверные тоннели» выбираем «новый серверный тоннель», а в списке HTTP и жмём кнопку «создать». Вам будет представлена страница, на которой пригодятся перечисленные в списке данные. При настройке туннеля вы увидите поле «Имя веб-сайта(W)», практика показала что оно иногда непонятным образом срабатывает при переходе по ссылкам на сайте, поэтому рекомендую либо вписать туда полное доменное имя вашего сайта (example.i2p) либо оставить пустым. Обратите внимание — это создание именно с помощью внешнего сервера, а не встроенного jetty!

[править] Реализация с использованием встроенного сервера Jetty

В дистрибутив маршрутизатора i2p включён встроенный веб-сервер jetty. Он способен исполнять perl-скрипты, находящиеся в папке ~/.i2p/eepsite/docroot/ (Linux) или %APPDATA%\I2P\eepsite\docroot\ (Windows). Для настройки такого сайта достаточно зайти на страничку-заготовку, также включённую в состав дистрибутива, и следовать инструкциям. http://127.0.0.1:7658/help/index_ru.html. Там всё достаточно просто при некотором уровне подготовки (а иначе вы на эту страницу вообще не попадёте).

[править] Реализация с использованием стороннего HTTP-сервера

Это намного интереснее, данная методика позволяет получить полноценный сайт, доступный из i2p. Форум, просто сайт, та же вики — что угодно. Для начала, вам необходимо иметь настроенный веб-сервер, им может быть, например, Apache или IIS от Microsoft. Я лично рекомендую Apache — он очень хорошо документирован, распространён, и главное — бесплатен, то есть используя его, вы не нарушаете законодательство и авторские права. В качестве опций, в зависимости от сложности проекта, необходимо также иметь установленный PHP и MySQL — на этой связке (apache + php + mysql) работает большинство систем управления контентом.

В I2P существует система туннелирования — перенаправления трафика обычных приложений в I2P сеть. В частности, именно за счёт этой технологии становится возможным использование «больших», полноценных серверов, например таких как Apache.

Действия для подобного решения отличаются от действий, описанных на «страничке-заготовке вашего сайта». Дело в том, что для начала требуется скачать с официального сайта Apache дистрибутив сервера, с сайта интерпретатора php дистрибутив скриптового движка, и с mysql.com — движок базы данных, после чего правильно установить их и настроить.

В частности, хочется оговорить одну важную вещь. Вы планируете, чтобы сервер был доступен ТОЛЬКО из I2P, или И из I2P И из обычного интернета? (Например так сделан официальный сайт i2p2.de & i2p2.i2p доступный как из обычного интернета, так и из-под I2P). Тогда настройки будут разными, это, впрочем, очевидно (см. подробнее статью о настройке).

Итак, далее я считаю, что вы уже установили базовое ПО, настроили хост, и дальше мы уже настраиваем готовую связку из Apache+PHP+MySQL.

Открываем файл httpd.conf (в windows он находится в директории, куда вы установили apache (<apache_dir>/conf/httpd.conf), находим строку Listen 80 и заменяем её на Listen 127.0.0.1:80 (а лучше на на пятизначное число не больше 65535)

Чего мы этим добиваемся. Это заставит веб-сервер принимать ТОЛЬКО соединения с локального хоста, и игнорировать поступающие с других IP адресов (из внешнего интернета). В случае, если вы хотите сделать сайт доступным И из I2P И из обычного интернета, вам надо оставить всё как есть, то есть сервер должен «слушать» соединения на всех доступных сетевых интерфейсах. Игнорирование запросов извне позволяет создать «локальную петлю» незашифрованного траффика, что затруднит разрушение анонимности сервера. Условно говоря, незашифрованный траффик будет существовать только в пределах вашего компьютера. Всё что идёт в сеть — уже будет защищено. Сервер же, слушающий все доступные адреса будет удобен для тех, кто делает доступ и для людей из I2P (анонимный) и для обычных пользователей Интернета.

Затем, рекомендую изменить опции просмотра файлов в директориях. Options Indexes FollowSymLinks на Options -Indexes +FollowSymLinks. Также поставить Строку

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

на

<IfModule dir_module>
    DirectoryIndex index.html index.htm index.php index.phtml
</IfModule>

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

Теперь, пора настроить виртуальные хосты (если вы будете хостить несколько i2p сайтов на одном сервере). Вообще, наиболее оптимальный способ заключается в следующем. В директории <apache_dir>\conf\original\extra\ лежит прелестный файл, называется httpd-vhosts.conf — он отвечает за конфигурацию виртуальных хостов. Сначала открываем httpd.conf, ищем там строки

# Virtual hosts
# Include conf/extra/httpd-vhosts.conf

и раскомментируем строку Include, убирая знак # в начале второй строки. Теперь ползём в файл httpd-vhosts.conf, который вы только что скопировали, и там увидим нечто типа такого:

#
# Use name-based virtual hosting.
#
NameVirtualHost 127.0.0.1:80

# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost 127.0.0.1:80>
    ServerAdmin [email protected]
    DocumentRoot "<путь_к_директории_apache>/htdocs/virtual.rus.i2p"
    ServerName virtual.rus.i2p
    # Кстати, ServerAlias'ов может быть много, скажем, если вы делаете зеркало ресурса в I2P, то можете указать
    # их по количеству доменов, к примеру:
    # ServerAlias shpargalko.ru
    ServerAlias <Длинный-длинный BASE64 ключ вашего сайта, достаётся вам после настройки тоннеля>
    ErrorLog "logs/virtual.rus.i2p-error.log"
    CustomLog "logs/virtual.rus.i2p-access.log" common
</VirtualHost>

Здесь нам сконфигурирован пробный виртуальный сервер по адресу virtual.rus.i2p. Важно понимать, это не обязательно домен третьего уровня! Это может быть и домен второго уровня вида имя.i2p.

Обратите внимание, в строке ServerAlias указывается BASE64 ключ, который предоставляется шлюзом i2p при создании тоннеля к серверу! То есть логика подсказывает, что требуется сначала создать тоннель, с указанием точки назначения 127.0.0.1:80 и адресом вида имя.i2p, а уже потом конфигурировать под него хостинг. (Ремарка: если я не прав, исправьте здесь. По крайней мере я делал именно так).

Очень важно, после создания папки в директории /htdocs/, одноимённой серверу (в данном случае virtual.rus.i2p), и прописыванию его в файле conf/extra/httpd-vhosts.conf, залезть в файл C:\windows\system32\drivers\etc\hosts — именно так, без расширения, и там прописать следующее:

127.0.0.1 virtual.rus.i2p

Так необходимо прописывать туда хосты каждый раз, когда вы добавляете новый! Иначе система просто не будет знать, куда стучаться при обращении. (Нет, можно конечно завести и настроить DNS сервер, но это уж, по моему, лишнее, для хостинга десятка-другого сайтов).

Для проверки в папку …/htdocs/virtual.rus.i2p/ кидаем файл index.php со следующим содержимым:

<?php
phpinfo();
?>

Теперь перезапускаем Apache. Если всё сделано верно, то на порту 80 по адресу virtual.rus.i2p (у вас будет другой, какой укажете) появится информация об установленном PHP интерпретаторе в виде таблицы.

Затем, требуется настроить тоннель для перенаправления траффика из тоннеля в I2P на ваш виртуальный хост. Проще всего описать в картинках:

Main menu.png Tonnel create.png

Обратите внимание: Local destination не заполняем. Это поле автоматически заполнится после создания тоннеля. В поле website name — пишем адрес виртуального хоста, который был создан на Apache.

Tonnel create2.png

На скриншоте указаны настройки туннелирования — 2 хопа, нулевой разброс и 0 резервных туннелей. Это очень мало. Необходимо установить параметры в 3 хопа, разброс 0-2, 3 резервных туннеля. То, что это плохо повлияет на производительность системы — не более чем слухи и страшные сказки. Практика показывает, что даже на очень слабой машине с маленькой памятью и полудохлым процессором, которую жалко выбросить но ещё жальче (тут правда жалость направлена уже на себя любимого) использовать в качестве основного компьютера, сайт с такими настройками туннелирования будет летать.

[править] См. также

Создание I2P сайта относится к теме «I2P»   ±