Сайт который нельзя закрыть
Информационная безопасность / Революция 2.0 — как сделать сайт, который невозможно закрыть
Так уж повелось, что правительству разных стран (будем говорить о ближайших: Россия, РБ и Украина) не нравится, когда люди выражают свое мнение. Примером тому может служить недавнее закрытие группы вконтакте «Революция». Наиболее понятная причина по которой это было сделано следует (ИМХО) из комментария: "Их (Vkontakte) интересуют только деньги, так что выбор ясен и прост: либо ограничение доступа во всю социалку со стороны Беларуси и минус бабки либо удаление одной группы". Но в этом топике я хочу поразмышлять на тему — а насколько сложно сделать такой сайт, который невозможно будет закрыть?
Для начала определимся какой сайт нас интересует. Во-первых, глядя на VK, ЖЖ и другие веб-сайты можно сказать одно совершенно ясно: размещать группу «Революция» на таких сайтах нельзя. Группа может быть закрыта модераторами, администраторами под давлением различных сил, с нарушением законодательства. Как это работает мы уже все прекрасно знаем. В этом свете свободой Интернета тут не пахнет.
Поэтому выход один: использовать свой собственный веб-сайт, размещенный на разных серверах. Причем, для движка сайта можно использовать любой форум. Главное чтобы это было просто, можно сделать вход через Facebook, Google и т.д. Самый важный пункт на этом этапе — мы должны иметь емайлы всех зарегистрированных пользователей. Почему — скажу далее. Сайт должен размещаться на своем собственном сервере. Подойдет, кстати, и виртуальный хостинг.
И если подумать, то способы закрытия такого сайта могут быть следующими:
а) отключение сервера по IP адресу (не важно как, в датацентре, либо на основных маршрутизаторах)
б) отключение доменного имени
К счастью, Интернет разрабатывался как отказоустойчивая сеть. И это нам поможет при организации сайта, который невозможно будет закрыть.
Итак, рассмотрим эти два пункта и углубимся немного в мат.часть, чтобы проанализировать — как можно избежать закрытия и сделать более или менее децентрализованный сайт своими силами. Хочется сразу сказать, что самый хороший способ — это простой способ. Поэтому вместо построения пиринговой децентрализованной сети мы остановимся на том, что может сделать каждый школьник уже завтра.
Итак, отключение сервера по запросу товарища полковника в датацентр. Решение этой проблемы довольно простое — переносим сервер в какую-нибудь Германию, Швецию или другую лояльную к цивилизованным гражданам страну.
Второй способ защиты IP адреса нашего сервера состоит в скрытии IP. Для этого можно использовать решения типа load balancer. Такие решения работают очень просто, даже существует множество хостингов, которые предоставляют подобные услуги. Для скрытия IP адреса мы просто изменяем IP в панели управления нашего домена на адрес load balancer'а. И, соответственно, настраиваем наш load balancer таким образом, чтобы он коннектился к нашему серверу. Можно также настроить кеширование DNS таким образом, чтобы каждый раз разным пользователям выдавался разный IP load balancer'ов.
Можно самому создать свои несколько load balancer'ов на разных хостингах, установив туда софт типа HAProxy. Этими простыми действиями мы скроем реальный IP адрес нашего сервера. Этот способ является также простым способом избежать бана на маршрутизаторах. Жалобы кровавой гэбни падут только на сами load balancer'ы. Но их будет уже несколько, и в разных местах. К тому же, мы можем легко задавать IP адреса новых load balancer'ов в панели управлении нашего домена.
И тут мы подходим ко второму, самому важному пункту. Отключение доменного имени. Во-первых, в этом вопросе очень важно выбрать правильного регистратора. Не использовать RuCenter. И стоит ли говорить о том, что домен не должен быть в зоне .ru, .by, .ua? Нам надо зарегистрировать домен с запоминающимся названием (а это важно, чтобы можно было всегда продиктовать название по телефону) в зонах com, net, org. Можно также .me. Я бы порекомендовал регистратора Moniker, как проявившего себя наиболее адекватным в тяжелых случаях.
На данный момент самый простой рецепт звучит так: сделать форум, публичный движок, хостинг в другой стране, домен не-RU, регистратор Moniker. Думаю, что этого бы хватило участникам группы Вконтакте «Революция» на случай закрытия. Тут важную роль играет e-mail человека. Т.к. почтовые сервера сами по себе децентрализованные, то можно разослать сообщение вида «наша группа была закрыта, продолжаем общение на сайте viva-la-libertad.me, просьба оповестить всех знакомых».
Но у нас по-прежнему узким звеном остается доменное имя. Как сделать так, чтобы доменное имя нельзя было закрыть? К счастью, решение есть. Оно, может быть и не очень красивое, но вполне действенное и самое главное — простое в реализации. Примем тот факт, что наше доменное имя могут закрыть. И на Moniker мы никак не сможем повлиять. Что делать дальше?
К сожалению, если вы не подготовились к закрытию, то у меня для вас плохие новости. Максимум что можно сделать — разослать емайлы пользователям, мол мы находимся на новом адресе. Но этот адрес тоже могут закрыть. Пользователи могут устать переключать адреса и в голове будет каша. Нам нужно сделать так, чтобы адрес у пользователей нашего сайта был доступен всегда. Они всегда должны заходить на viva-la-libertad.me, и видеть все тот же любимый и рабочий форум. Как это сделать?
Вспомним за что отвечает служба DNS? За преобразование имен в IP адреса. В файле C:\Windows\System32\drivers\etc\hosts мы можем назначить любому доменному имени любой IP. Другими словами, задача сводится к тому, чтобы в этом файле всегда оставался рабочий IP адрес нашего форума. Но как это сделать? Ведь руками не будешь вписывать этот адрес каждый раз.
Сделать это немного сложнее, чем все предыдущие действия, но тоже вполне реально. Мы воспользуемся приемом, похожим на тот, которые используют различные вирусы для получения команд от своего хозяина. А именно — запрос команд с различных доменов. Как это работает?
Наша программа, которая будет отвечать за правильное содержание файла hosts должна ежедневно опрашивать URL на нашем наш сервере вида viva-la-libertad.me/date04-07-2011.txt. Каждый день (или лучше час) будет существовать новый файл, которые администраторы заливают на сервер вручную. В этом файле будет содержаться одна строка вида «SERVER OK _ цифровая_подпись». Программа будет проверять цифровую подпись, и если сервер работает, то программа ничего не делает.
Как только файл обнаружить не удалось, запускается второй алгоритм — поиск нового сервера. Этот алгоритм работает следующим образом. Каждый день генерируются, скажем, имена двух сотен новых доменов. Эти имена будут вида a2b4c3e3.com и т.д. Программа будет пытаться обращаться к каждому из них и получать тот же самый файл a2b4c3e3.com/date04-07-2011.txt. В случае, если этот файл найден, анализируется содержимое и проверяется цифровая подпись. Если она верна, строка вида «11.22.33.44 viva-la-libertad.me» заносится в hosts. Где ip — это IP адрес a2b4c3e3.com.
Объясняю немного подробнее для тех, кто не понял. В программе генерируются _имена_ доменов. Автору группы «Революция» чтобы сменить IP адрес в локальном DNS (на windows-машине) у своих пользователей стоит всего лишь зарегистрировать домен и выложить файл date04-07-2011.txt в свободный доступ. Товарищ полковник может также зарегистрировать домен, и выложить этот файл. Но товарищ полковник не сможет подделать цифровую подпись. Она находится только у автора группы «Революция».
Единственный выбор товарища полковника — узнать алгоритм генерации доменов и регистрировать в спешном порядке сотни доменов. Нагрузка в этом случае очень сильно увеличивается. И сделать это очень сложно. А автор группы «Революция» может создать программу, которая будет генерировать не 200 доменов в день, а тысячу, или две. Таким образом для закрытия подобного сайта придется ежедневно регистрировать тысячи левых доменов. А 1000*$20 (цена домена) = $20000 долларов в день только на то, чтобы сайт снова не начал работать.
Т.е. на этом этапе контролировать IP адрес своего доменного имени может только автор группы «Революция», с помощью своего секретного ключа. Для того, чтобы пользователи могли без опаски скачивать и устанавливать программу, существует несколько решений, которые можно комбинировать:
а) предоставлять исходный код программы (можно без алгоритма генерации доменов). В программе будет зашит только публичный ключ, поэтому какой-либо ценности исходный код не представляет.
б) объяснить пользователям как создать ограниченный аккаунт в системе windows, под которым будет запускаться программа (и установщик), который будет иметь доступ только к файлу hosts.
Также я настоятельно бы порекомендовал автору группы «Революция» при регистрации пользователя на форуме отправлять ему письмо со своим публичным ключом. Только ради того, чтобы потом можно было подписывать письма пользователям для того, чтобы они убедились, что на связи действительно автор группы «Революция», а не товарищ полковник.
Все эти действия реальны и могут быть сделаны любым техническим специалистом среднего уровня. Алгоритмы шифрования с длинным (2048 бит и выше) ассиметричным ключом (RSA, реализован в программе PGP) полностью гарантируют работоспособность такой архитектуры. Думаю, что в наше время это должен знать каждый.
Резюмируя, грамотное создание группы «Революция» сводится к следующим пунктам:
Программа-минимум:
1. Регистрация групп в социальных сетях 2. Регистрация отдельного доменного имени, поднятие своего форума на этом имени 3. Оповещение пользователей о том, чтобы они хотя бы раз вошли (через facebook sign in, например, или зарегистрировались) на этот форум на случай, если группу закроют. Нам нужны e-mail адреса пользователей.
Программа-максимум:
4. Создать специальную программу, с открытым исходным кодом, которую установит себе каждый пользователь форума.
Приглашаю обсудить статью в комментариях.
PS просьба перепостить текст в разных местах, в своем жж, на форумах, т.к. на хабре может и не выжить. PPS и да, за мной уже выехали) Источник: habrahabr.ru