INT 21h

Домашняя страница самого страшного прерывания

Создание зеркала вашего WordPress сайта в I2P сети

№ 5281 В разделах: Администрирование Программирование от July 15th, 2013,

Операция эта не сложная, но требует определенного уровня умелки и понимания того, что вы делаете и нужно ли вам оно вообще.

Теперь, когда вы определились, вам необходимо понять, что любые ссылки ведущие на сайты в обычном интернете деанонимизируют посетителя. Также вордпресс дает на свои картинки и стили полные ссылки, поэтому они тоже будут вести в интернет. Ну и, конечно же, во время редактирования записей WordPress будет вставлять картинки в записи с полной ссылкой на них, если это было указано явно. Например, мои картинки хранятся на серверах селектел в Санкт-Петербурге (blindage.org), а сам сайт хостится сейчас в Томске. По этой причине я указал в настройках WordPress полный путь до картинок, который мне теперь нужно изменять, если посетитель зайдет из i2p.

Однако, описаный ниже способ не единственный. Я придумал для i2p сделать отдельный шаблон WP.

Итак, определим задачи, возникающие при заходе через i2p:

  1. убрать рекламу с других серверов (google, begun, yandex и т.д.)
  2. убрать картинки из шаблона, ведущие на другие сервера
  3. изменять вставляемые ссылки во время редактирования
  4. изменять базовые ссылки на картинки и стили шаблона

Прежде, чем приступить к этим задачам необходимо поднять туннель для сайта. Это несложно и делается в консоли управления. Сделайте у себя также, как на картинке, вставив свой адрес сервера, порт и домен.

Screenshot from 2013-07-15 03:27:56

Local destination создается автоматически. Больше на той странице менять ничего не надо. Сохраняйте (кнопка в самом низу страницы) и стартуйте этот туннель. После старта станет доступна кнопка Preview со ссылкой типа http://q3ekhqgqxnk6pp4axm76bh4wbazgmskbj5vxlzoj76soarecgf3a.b32.i2p/. Если ваш сайт загружается по этой ссылке, то считайте вы уже прошли квест на четверть пути.

Теперь, когда ваш сайт доступен в i2p вам необходимо начать избавляться от внешних подгружаемых частей, такие как шрифты, jquery (если оно с подгружается из чужих CDN серверов, например, яндекса) и т.п. Важное дополнение к этой статье о дополнительной теме для WP. Если отдельную тему для i2p вы не хотите, то в файлы шаблона необходимо вставить проверку из какого места к нам пришел посетитель. Если домен оканчивается на .i2p, то необходимо убрать лишние элементы. Проверка простая, вставляется в самое начало шаблона и выглядит вот так:

<?
$i2p=false;
if (strpos($_SERVER['SERVER_NAME'],".i2p"))  $i2p=true;
?>

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

<? if (!$i2p) { ?>
<link href='http://fonts.googleapis.com/css?family=Marmelad&subset=cyrillic' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=PT+Sans&subset=cyrillic,latin' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=PT+Mono&subset=cyrillic,latin' rel='stylesheet' type='text/css'>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://apis.google.com/js/plusone.js">
{lang: 'ru'}
</script>
<? } ?>

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

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

<div id="menu">
<ul>
<LI><a href="/">Блог</a></LI>
<LI><a href="/?cat=113">Администрирование</a></LI>
<LI><a href="/?cat=112">Программирование</a></LI>
<LI><a href="/?cat=119">Электроника</a></LI>
<LI><a href="/?cat=120">Комиксы</a></LI>
<LI><a href="/?cat=121">Коллекция часов</a></LI>
<LI><a href="http://bitbucket.org/21h/">Проекты</a></LI>
<LI><a href="http://blindage.org/?cat=122">Трекинг посылок</a></LI>
</ul>

<? if ($i2p) { ?>
<div style="color:black;font-size:80%;background-color:orange;border:2px solid red;margin:2px;">Внимание! Помните, что несмотря на то, чт
о вы используете I2P, некоторые страницы сайта имеют вставки картинок и
видео с сайтов из обычного интернета, что потенциально ведет к деанонимизации.</div>
<? } ?>
</div>

Не знаю как у меня это получилась, но в меню была абсолютная ссылка на трекинг посылок. Такие ссылки нужно исправить на относительные. В моем случае это /?cat=122.

Теперь когда вы исправили подобные недоразумения можно переходить к третьей задаче и изменять уже содержание записей. Обычно записи выводятся с помощью функции the_content('Прочитать полностью …'); в главном цикле шаблона index.php. Проблема в том, что эта функция не отдает содержание записи, а выводит его. Её необходимо заменить на другую, но т.к. другой нет, то напишем свою :)

<?php
$content = get_the_content(); //получили нефильтрованое содежание
$content = apply_filters('the_content', $content); //применили фильтры (обязательно)

//а вот здесь изменяется ссылка, ведущая на картинки и другие вставленые в запись файлы
if ($i2p) $content = str_replace('blindage.org', 'vbudi2aibazsx65ywxawef2uaalcbdv34jia3nwu3s2ehonbl72q.b32.i2p', $content);
echo $content;
//the_content('Прочитать полностью …'); //а оригинальную функцию просто закомментируйте. она не нужна.
?>

Внимание! Для blindage.org я также поднял туннель, который именуется vbudi2aibazsx65ywxawef2uaalcbdv34jia3nwu3s2ehonbl72q.b32.i2p и кодом выше заменяется автоматически. Если сайт и картинки находятся на одном домене, то еще один туннель создавать не нужно (он же есть уже ;) ) и исправляете str_replace на ваш домен и b32 адрес уже созданного ранее туннеля. Связано это с тем, что wordpress вставляет полные ссылки на картинки и их необходимо исправлять при заходе через i2p.

И вот настало время последней задачи по изменению базовых ссылок. Она происходит путем изменения записей в базе данных.

Подключитесь к базе данных и выберите вашу базу:

# mysql -p
mysql> use vlad_wp;

Теперь необходимо найти таблицу опций

mysql> show tables;

У меня она называетя options. У вас может быть имя таблицы с каким-нибудь префиксом. Например, wp_options. Когда вы нашли нужную таблицу пошлите 2 запроса, исправляющих параметры сайта. Их через админку wordpress не получится изменить.

mysql> update options set option_value="/" where option_name="siteurl";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update options set option_value="/" where option_name="home";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Дополнение
У меня возникла проблема со ссылкой на комментарии. Дело в том, что wordpress генерирует их на основе home_url, который может иногда (когда вы заходите в настройки wordpress и сохраняете их) сбрасываться до полного урла сайта.

Сейчас у меня записи получаются из базы данных функцией query_posts($query_string . '&cat=-123'); (с помощью .'&cat=-123' я отсеиваю из общей выдачи категорию записей с ID 123. Вам оно не нужно, поэтому вы можете это просто удалить). Соответственно вы получаете результат в массив объектов и уже внутри цикла have_posts вы работаете с объектом $post. Именно из этого объекта я и получаю ID текущей записи.

<p><a href="/?p=<?=$post->ID?>#comments">
<?php comments_number('Нет комментариев »', 
'Всего 1 комментарий »', '% комментариев »' ); ?></a></p>

Иииии… ВСЕ! Проверяйте как выглядит ваш сайт в i2p.

Screenshot-3

О том, как сделать сайты доступными в i2p без использования в proxy сервера вы можете в моей прошлой статье “Прозрачный доступ в I2P с помощью tinyproxy и iptables“.

Нет комментариев »

Оставьте ваш комментарий »

Форма отправки комментария

CAPTCHA
*

Разрешенные HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

RSS RSS Feed только для этого поста |


Комментарии
  • Игорь: Все настроил, еще раз просмотрел видео и методом научного тыка все настроил и сохранил, все работает и обе...
  • 21h: Здравствуйте, Игорь! Я не знаю :) Думаю аналогично согласно инструкции к вашей радиостанции.
  • Игорь: Добрый день, просмотрел Ваше видео все доступно и ясно для 8 ми канальных радеек, но мне нада настроить 69...
  • Гоги: Есть инструкция к Моторолкам – она подходит к серии Motorola TLKR T4… Т8. В конце сетка частот и...
  • 21h: торчок давно уже не обновлял, как только закрыл сайт где он работал. да, это морда для opentracker. без...
  • Buter: Какова дальнейшая жизнь торчка? Он кстати веб-интерфейсом для OpenTracker выступает? Без OpenTracker работать...
  • 21h: понятия не имею. гуглите инструкцию к вашей радейке и сверяйтесь с ней.
  • Денис: хочу их подружить с uv5r
  • Денис: t-388 walkie talkie на эти шпаргалочек нет,или как приминить ваши к их настройке?
  • John: Стекла для электроник – техночас.ру