Onion-сервис Tor позволяет людям заходить на ваш сайт через сеть Tor, и ни одна из сторон не узнаёт IP-адрес другой. Сервер сам подключается к Tor, поэтому ему вообще не нужен открытый входящий порт. В этом руководстве мы настроим такой сервис на VPS с Ubuntu, где Nginx отдаёт небольшой сайт.
Что даёт onion-сервис
- Адрес
.onion, который выводится из ключа, поэтому он самодостаточен для аутентификации и не требует удостоверяющего центра. - Сквозное шифрование между посетителем и вашим сервером внутри Tor.
- Не нужно раскрывать посетителям публичный IP-адрес вашего сервера.
Он не делает содержимое вашего сайта законным и не скрывает ошибки, допущенные в других местах, например домен в обычном вебе, указывающий на ту же машину.
Шаг 1: установите Tor и Nginx
sudo apt update
sudo apt install -y tor nginx
sudo systemctl enable --now tor
Шаг 2: привяжите Nginx только к localhost
Веб-сервер не должен отвечать на публичном интерфейсе, иначе IP в обычном вебе и onion-сайт можно будет связать. Измените конфигурацию сайта так, чтобы он слушал loopback.
server {
listen 127.0.0.1:8080;
server_name _;
root /var/www/onion;
index index.html;
server_tokens off;
}
sudo mkdir -p /var/www/onion
echo '<h1>Hello from onion space</h1>' | sudo tee /var/www/onion/index.html
sudo nginx -t && sudo systemctl reload nginx
Шаг 3: объявите скрытый сервис
Добавьте эти строки в /etc/tor/torrc:
HiddenServiceDir /var/lib/tor/my_site/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:8080
sudo systemctl restart tor
sudo cat /var/lib/tor/my_site/hostname
Последняя команда выведет ваш 56-символьный адрес .onion. Откройте его в Tor Browser для проверки. Сделайте резервную копию папки /var/lib/tor/my_site/: ключ внутри неё и есть ваш адрес, а его потеря означает новый адрес.
Шаг 4: необязательная авторизация клиентов
Для приватного сервиса добавьте ключ, который есть только у одобренных посетителей. Создайте файл /var/lib/tor/my_site/authorized_clients/alice.auth со строкой вида descriptor:x25519:PUBLIC_KEY, затем перезагрузите конфигурацию Tor. Посетители без подходящего закрытого ключа даже не увидят, что сервис существует.
Шаг 5: закройте типичные утечки
- Никогда не подключайте к страницам ресурсы, шрифты или аналитику из обычного веба.
- Сделайте страницы ошибок и заголовки нейтральными и оставьте
server_tokens off. - Следите за точностью системных часов сервера: Tor это необходимо.
- Закройте брандмауэром всё, кроме SSH:
sudo ufw default deny incoming, так как Tor не нужен входящий порт. - Не запускайте сайт для обычного веба на том же хосте, если вы не разделили их полностью.
Прочитайте привычки OpSec для серверов до публикации чего-либо и используйте чек-лист усиления защиты на новом сервере.