Создание 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
Особенности такого сайта в том, что его местоположение и личность владельца трудно вычислимы, так как применяется чесночная маршрутизация для доступа к ресурсу. К примеру, данная вики (wiki.ilita.i2p) представляет собой полноценный eepsite.
Лирическое отступление[править]
Перед тем, как устанавливать программное обеспечение и настраивать хостинг, вам стоит задуматься над тем, что именно вы собираетесь запускать на этом хостинге. Какой ресурс будет доступен из этой сети - форум, сайт, вики, блог, трекер? Соответственно, вам следует заранее скачать программное обеспечение, которое будет установлено на хостинг, разобраться в нём, чтобы не экспериментировать уже на «боевом» сайте. В случае, если вы собираетесь использовать готовое программное обеспечение (движки), вы обязательно должны удостовериться в его безопасности, так как наличие уязвимостей в веб-приложениях сильно упрощает деанонимизацию владельцев ресурсов.
К примеру, если то или иное веб-приложение позволяет выполнить запрос на другой сайт (к примеру, через форму для задания аватара пользователя), появляется возможность легко определить ваш реальный IP-адрес, а если поддерживается BB-код [img], то у пользователя есть возможность получить IP-адреса посетителей путём ссылки на специальное изображение в «большом интернете». Даже если вы модифицируете код движка, запретив использовать в теге [img] ссылки на ресурсы «большого интернета», это не решит проблему, так как злоумышленник может разместить на i2p-сайте файл, выдающий себя за изображение, но на самом деле делающий перенаправление посетителя в «большой интернет».
Принципы реализации[править]
Eepsite может быть реализован следующими способами:
Настройка I2P тоннеля для будущего сайта[править]
Вам следует изначально определить несколько вещей:
- Какой адрес вашего сайта будет в i2p. Имя выбираем на этапе проектирования и создания тоннеля
- На каком адресе/порту доступен ваш сайт. Как правило 127.0.0.1:80 (и именно поэтому ни в коем случае нельзя оставлять его на этом порту. На момент этой вики-правки число I2P-роутеров ~14000, и просканировать у всех 80-й порт гораздо легче, чем просканировать ~917504000 портов (на самом деле меньше, если исключить намертво зарезервированные порты типа 68-го). Кроме того, запретите с помощью фаервола доступ к порту прослушиваемому вашим сервером со всех IP-адресов кроме 127.0.0.1 - в противном случае вам придётся полагаться только на собственную везучесть. Или на то что вы - Неуловимый Джо)
- Описание веб-сайта и его название (лучше сделать их удобоваримыми).
Затем, идём на страницу http://localhost:7657/i2ptunnel/index.jsp - и в списке "Серверные тоннели" выбираем "новый серверный тоннель", а в списке HTTP и жмём кнопку "создать". Вам будет представлена страница, на которой пригодятся перечисленные в списке данные. При настройке туннеля вы увидите поле "Имя веб-сайта(W)", практика показала что оно иногда непонятным образом срабатывает при переходе по ссылкам на сайте, поэтому рекомендую либо вписать туда полное доменное имя вашего сайта (example.i2p) либо оставить пустым. Обратите внимание - это создание именно с помощью внешнего сервера, а не встроенного jetty!
Не забудьте запретить своему роутеру переход в режим флудфила. Известная уязвимость позволяет однозначно определить наличие скрытых сервисов на floodfill роутере, и, соответственно, ip-адрес сервера. А лучше используйте i2pd, там такая уязвимость отсутствует.
Реализация с использованием встроенного сервера 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 дистрибутив скриптового движка, и с http://www.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 webmaster@virtual.rus.i2p 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(); ?>
Теперь перезапускаем апач, и радуемся жизни. Если всё сделано верно, то на порту 80 по адресу virtual.rus.i2p (у вас будет другой, какой укажете) появится информация об установленном PHP интерпретаторе в виде таблицы.
Затем, требуется настроить тоннель для перенаправления траффика из тоннеля в I2P на ваш виртуальный хост. Проще всего описать в картинках:
Обратите внимание: Local destination не заполняем! Это поле автоматически заполнится после создания тоннеля. В поле website name - пишем адрес виртуального хоста, который был создан на апаче.
На скриншоте указаны настройки туннелирования - 2 хопа, нулевой разброс и 0 резервных туннелей. Это очень мало. Необходимо установить параметры в 3 хопа, разброс 0-2, 3 резервных туннеля. То, что это плохо повлияет на производительность системы - не более чем слухи и страшные сказки. Практика показывает, что даже на очень слабой машине с маленькой памятью и полудохлым процессором, которую жалко выбросить но ещё жальче (тут правда жалость направлена уже на себя любимого) использовать в качестве основного компьютера, сайт с такими настройками туннелирования будет летать.