Поднимаем анонимный веб-ресурс в TOR

Зачем вам это?

TOR может скрыть реальное местоположение сайта, а это значит что его не смогут отключить, а создателя - найти и наказать/устранить (при соблюдении определённых правил). Кроме того TOR-адрес в доменной зоне .onion невозможно украсть/присвоить/отозвать до тех пор пока вы не потеряете секретный ключ от этого домена (об этом чуть позже).

Настраиваем веб-сервер

Пропускаем этот раздел и переходим к разделу настройки TOR в случае если web-сервер уже настроен.

Однострочник на Python

Если у вас статические html-файлы с сайтом (идеальный вариант для безопасности) и не очень много ресурсов, то можно просто запустить однострочник на Python, который будет отдавать пользователю контент.
Для этого перейдите в каталог с html-файлами и запустите следующую команду:

$ cd /var/www/site1
$ python -m SimpleHTTPServer 80

Можно параллельно запустить несколько сайтов, поменяв лишь каталог назначения и порт. Например:

$ cd /var/www/site2
$ python -m SimpleHTTPServer 81

Nginx

Если сайт более сложный и ресурсов хватает - можно настроить nginx.

Ставим:

$ sudo apt-get install nginx

Рекомендуется в файле /etc/nginx/nginx.conf поменять следующие значения:

http {

...

        # не предоставляем версию используемого софта
        server_tokens off;
        # отключаем ведение логов
        #access_log /var/log/nginx/access.log;
        #error_log /var/log/nginx/error.log;

        error_log /dev/null crit;
...

Далее создаём файл нового виртуалхоста:

/etc/nginx/sites-available/site1

server {
        listen 127.0.0.1:80 default_server;
        server_name localhost;

        root /var/www/site1;
        index index.html index.htm;

        location / {
                allow 127.0.0.1;
                deny all;

        }
}

Включаем его:

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/site1 .

Перезапускаем nginx и добавляем его в автозагрузку:

$ sudo service nginx restart
$ sudo update-rc.d enable nginx

Создаём каталог с будущим сайтом:

$ sudo mkdir /var/www/site1

Кладём туда необходимые файлы и сменяем владельца:

$ sudo chown -R www-data:www-data /var/www/site1

Настройка TOR

Настройка TOR сводится лишь к его установке и добавлению 2 строчек в конфиг.

$ sudo apt-get install tor

Открываем /etc/tor/torrc:

HiddenServiceDir /var/lib/tor/site1 # каталог создаётся автоматически
HiddenServicePort 80 127.0.0.1:80

Перезапускаем TOR:

$ sudo /etc/init.d/tor restart

Первая строчка в конфиге указывает путь к закрытому ключу, который создаётся автоматически TOR’ом при первом запуске после модификации конфига и играет роль onion-домена. Давайте посмотрим на содержимое каталога для большего понимания:

$ sudo ls /var/lib/tor/site1
hostname  private_key

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

pigf5kfufjz63s5z.onion

удаление/модификация файла hostname не влечёт никаких последствий, при следующем перезапуске TOR он вновь создаётся на основе ключа. Это скорее файл-подсказка для вас.

А вот ключ private_key необходимо держать в секрете. До тех пор пока вы являетесь единственным владельцем этого файла - ваш домен никто и никогда не украдёт.
Ключ имеет стандартный вид:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCiwfOmTC3c02kaz/BGftIXLafz4z6sTbufBpM/usaQAFdbW072
xZ0ds2ZEVbQNOjewU9QihrtA25v20ZblbEZfrLkPytKzb/ghCIEQN/mbSsnBcJ9b
JJa0OzhUy+V9uuXrO0afpk7eCB/EPNdwugfKu/G9JaBirWrRMkkAozhKjwIDAQAB
AoGBAJlFVwMzWDlN6fvy+E4a3hQvzauSRBIVPevbUE3CwX0YpSuGSE2B+Zzfth4C
K4YNXiYyO2KsSKkiZrS/2X+CQJ4WLy87VCkoF2TF5C4MKF3SOhGPorO4TCtxkhnN
7tprZFIlT7/cP45XretG+i6ZuksZtv2Oje0r1oCwxv0F4V5BAkEA0rVve2Q0x5EG
nZrBPFgsdPm6ikutuMUBFbNxv71ILbh3f+qePpH6wZIjgQ7FJXGXarC1DcyaPT52
QQWWnhGCYQJBAMW97zxTD+9klPBisZ7ClFWh88VBCPVeyz5AS2oQdNtRaJeKyiiS
JhtNIq5yPabCZ/JecqbtCoMY/pdJeJNs0u8CQFyAgG+YHz+ZYGEiRkDaqLG1zHnY
HWznN8GyJHa7fwtrVzLV6iCn74C5SlLnDA+THZkd+G4Va4UFfd6vuF6uayECQD9Q
aWFvVxLXqbiuYSDsPIKOsHbgM/YcvAban0r+qevvTQX4snH7Gah0Mj6Y5ZSXeqDo
DN3V2B/RyPK325uYpJECQQCs/Ko0Z2LIk+fDaHRsWI00DbflRK8jptnjArVTrabs
0Os5jX+UFum0kGRlNKQPV8suucP/5y6FanlmTs3RFwpt
-----END RSA PRIVATE KEY-----

Рекомендуется сделать копию ключа, предварительно зашифровав например GPG, используя криптостойкий пароль (либо ваш ключ) и куда-нибудь скопировать:

$ sudo gpg -c /var/lib/tor/site1/private_key

Если очистить каталог /var/lib/tor/site1 от ключа, то при следующем перезапуске TOR сгенерирует новый ключ с новым случайным onion-адресом.

Вернёмся к конфигу. Вторая строчка (HiddenServicePort 80 127.0.0.1:80) задаёт какой порт будет у onion-ресурса и какой адрес и порт будем форвардить на него. В нашем случае мы берём адрес/порт 127.0.0.1:80 и форвардим его на pigf5kfufjz63s5z.onion:80.
Давайте проверим так ли это. Откройте в tor-browser, либо в любом другом браузере, но с настроенным TOR и введите адрес http://pigf5kfufjz63s5z.onion. Должна открыться страница что висит на 127.0.0.1:80.

Если сайтов нестолько, то в конфиг дописываем, например:

HiddenServiceDir /var/lib/tor/site2
HiddenServicePort 80 127.0.0.1:81

HiddenServiceDir /var/lib/tor/site3
HiddenServicePort 80 127.0.0.1:82

перезапускаем TOR, после чего создаются ключи в соответствующих каталогах.

Не смотря на то что адреса генерируются случайным образом - их можно подбирать. Об этом поговорим в отдельной статье.