Защита скрытого сервиса Tor

Вот несколько правил, которые вы должны учитывать, прежде чем настраивать сайт для Tor. Это руководство охватывает как Apache, так и Nginx.

1) Слушайте только localhost

Не позволяйте никому добраться до вашего веб-приложения Tor через Клирнет. Ваш веб-сервер должен слушать только 127.0.0.1, чтобы только демон Tor мог подключиться к нему. Если вы не можете слушать localhost (по каким-либо причинам), используйте брандмауэр (iptables/nftables), чтобы предотвратить утечку.

Причинами, по которым вы не должны быть доступны через Клирнет, являются сканеры. Сканеры Shodan или Censys (или даже Google) постоянно просматривают все публичное пространство IPv4 (что мы можем назвать 0.0.0.0/0), а также сканируют и индексируют ваш сервер. Вы будете легко раскрыты, если сканеры найдут подходящий HTML-контент на вашем сайте или даже соответствующие HTTP-заголовки (см. Примеры ниже).

В Apache, измените /etc/apache2/ports.conf так, чтобы он содержал:

Listen 127.0.0.1:80

В Nginx вы должны добавить инструкцию в файле /etc/nginx/nginx.conf (внутри секции sever):

listen 127.0.0.1:80;

Есть некоторые подводные камни в этом методе, но это наименьшее, что вы можете сделать (и самый быстрый способ предотвратить любую серьезную утечку). Если вы используете Apache и хотите идти дальше, рекомендуем вам прочитать комментарий Алека Маффета.

Самые печальные случаи:

Китайский форум TorBay
Маркет, находящийся на Украине
Сайт вендора
Маркет Wall Street

2) Отключить возможность просмотра содержимого директорий

«Просмотр каталогов» или «Индексация каталогов» — известная чума, даже для сайтов Клирнет. В OWASP это считается общей уязвимостью, но с учетом чувствительности большинства скрытых сервисов просто неприемлемо оставлять это открытым.

В Apache вы можете отключить mod_autoindex (как root, просто введите a2dismod autoindex) или добавить Options -Indexes директиву в корневой веб-каталог:

<Directory /var/www/>
Options -Indexes
</Directory>

На Nginx, отключите autoindex модуль в файле nginx.conf:

location / {
autoindex off;
}

Самые печальные случаи:

Немецкий вендор

3) Отключить подробные отчеты об ошибках

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

3.1) Отключить server-info и server-status (только Apache)

В некоторых конфигурациях Apache показывает по умолчанию /server-info и /server-status страницы, пропускающие внутренние данные (например, URL-адрес, запрашиваемый у других пользователей).
Вы можете легко отключить его, удалив mod_info из httpd.conf или комментированием <Location/server-info> и <Location/server-status> директивы в файле конфигурации.

3.2) Удаление сигнатуры сервера

Это гарантирует, что версия вашего веб-сервера и ОС сервера не будет протекать в заголовках сервера и внутри веб-страниц ошибок по умолчанию (404, 500, …).

На Apache просто добавьте эти директивы в ваш файл httpd.conf по умолчанию (на Debian 8 вы можете напрямую редактировать /etc/apache2/conf-enabled/security.conf ):

ServerSignature Off
ServerTokens Prod

На Nginx отключите server_tokens в nginx.conf:

http {
server_tokens off;
}

3.3) Отключить отчет об ошибках приложений

Это зависит от используемого бэкенда (PHP, NodeJS, Python и т. д.), Мы не будем вдаваться в подробности о том, как отключить отчет об ошибках, Google — ваш друг. Большинство сообщений об ошибках (трассировки стека, дампы памяти и т. д.) скорее всего будут раскрывать ваш IP-адрес или другую важную информацию: отключите их все!

Самые печальные случаи:

Еще один плохо сконфигурированный маркет
Бразильский маркет с включенным RDP

4) Исправьте свои недостатки

Исправьте свой сервер (вовремя обновляйтесь), напишите код, который не пронизан инъекциями SQL, и который работает.
Примените основные меры безопасности как отключение нежелательных услуг, соблюдайте принцип минимальных привилегий и разделяйте различные уровни вашего веб-приложения. В остальном используйте здравый смысл.

5) Пропускайте только трафик Tor

Некоторые веб-приложения отправляют электронные письма для верификации, которые могут привести к утечке вашего IP-адреса получателю. Это также может произойти, если ваше приложение пытается связаться с третьей стороной через Клирнет (API оплаты биткойнов, аналитика, Twitter, …). Чтобы этого не произошло, мы рекомендуем вам прозрачно маршрутизировать весь исходящий трафик через Tor. В Tor Project есть руководство по настройке прозрачного прокси.