Вступление
Настоящая статья не является призывом к нарушению законодательства Российской Федерации. Материалы предназначены исключительно для образовательных целей и направлены на описание технических методов, применяемых для обхода ограничений, введенных иностранными компаниями для пользователей Российского сегмента интернет. Автор не несет ответственности за использование данных методов с нарушением местных законов. Читатели обязаны соблюдать все законодательные нормы, действующие в их юрисдикции.
Предыстория
Ранее я рассказывал про решение, которое позволяет обеспечить доступ к сайтам сети интернет, находящимся в зарубежном сегменте, доступ к которым был прекращен или ограничен.
Со времени публикации статьи, благодаря, в том числе, комментариям к статье, техническое решение получило развитие.
Дополнительно потребовалось:
Разделить WEB-сайты на те, которые должны идти через защищенную сеть TOR и те, которые должны идти по обычному маршруту .
Использовать прозрачное проксирование - т.е. заворачивать все запросы в сеть интернет принудительно через прокси.
Использовать для TOR другие мосты вместо встроенных т.к. встроенные мосты становятся недоступны.
Использовать защищенный DNS.
Решение
1. Общая идея и назначение схемы
Защищенный DNS + Цепочка iptables → Squid → Privoxy → Tor
Получаем:
прозрачный (невидимый для клиентов) контроль интернет-доступа;
выборочная маршрутизация трафика через сеть Tor;
централизованное управление списком ресурсов, которые должны открываться анонимно;
отсутствие необходимости настраивать прокси на клиентских устройствах.
защита ваших DNS-запросов от перехвата, подмены и блокировки.
Клиенты работают с интернетом напрямую, а перехват и маршрутизация трафика выполняются на сетевом шлюзе.
Архитектура решения
Логическая схема цепочки прокси выглядит следующим образом:
Клиент -> iptables (NAT / REDIRECT) -> Squid (transparent proxy) -> Privoxy (HTTP → SOCKS5) -> Tor (анонимная сеть) -> Интернет`
Unbound - DNS over TLS - защищенный DNS.
iptables — перехват TCP-трафика на портах 80 и 443 и перенаправление на прокси;
Squid — прозрачный прокси, фильтрация и выборочная маршрутизация;
Privoxy — преобразование HTTP(S)-трафика в SOCKS;
Tor — анонимизация и выход в интернет через Tor-сеть.
obfs4 — транспортный плагин - кодирование Tor-трафика под случайный шум.
WebTunnel (не обязательно)- транспортный плагин - маскировка Tor под обычный HTTPS-трафик (HTTP/2, WebSocket).
Чтобы задействовать роли необходимо установить пакеты:
squid privoxy tor iptables obfs4proxy webtunnel-client (не обязательно)
Читатель уже имеет опыт установки пакетов в OS Linux и я упускаю подробное описание их установки. Если нет, то используйте поиск в сети.
Настройка
1. Unbound + DNS over TLS
Перед началом настройки цепочки прокси рекомендую настроить безопасный DNS-сервер. Как это сделать я описал в статье:
Настраиваем безопасный DNS: приватность, DNSSEC и DoT на практике
Без этого шага рассматриваемое решение не будет полноценно работать т.к. один из способов ограничения работы WEB-сайтов это перехват/ограничение/замена DNS-запросов.
2. Tor
Tor используется в качестве SOCKS5-прокси.
Файл конфигурации:
/etc/tor/torrc
Настройка минимально:
SocksPort 127.0.0.1:9050 # IP сервера для доступа к socks5 SocksPort 192.168.1.10:9050 # Разрешенная сеть для для доступа к socks5 SocksPolicy accept <IP>/<MASK> SocksPolicy accept 127.0.0.0/8 SocksPolicy reject * # Исключаем из цепочки TOR узлы в некоторых странах ExcludeExitNodes {ru},{ua},{by},{kz},{de} # Используем мосты UseBridges 1 # Включаем плагины транспорта для мостов ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy # (можно исключить т.к. работает часто медленнее) ClientTransportPlugin webtunnel exec /usr/bin/webtunnel-client ###### # Здесь нужно указать актуальные мосты с сайта bridges.torproject.org или телеграм-бота 'Tor Briges', далее ПРИМЕР: Bridge obfs4 174.21.132.230:2555 52C896B69DC6E84860A1760EB86E4A7FF47BD460 cert=jdrj6VahE1uIaePIViAEHfpNkf69tCrSK56y9D5EMEXNvG7> Bridge obfs4 85.190.99.10:9443 52192491E209B87F869C13CADC0EB69F07C3ECFC cert=MbTy8UwrcxKjuJbF+V4OYrUGPwDtiYIpUsmznZwuOBwOe6swh>
Запуск TOR
sudo systemctl enable --now tor
Проверьте журнал, убедитесь в удачном подключении к сети TOR
journalctl -f -u tor
3.Настройка Privoxy
Privoxy служит промежуточным HTTP-прокси между Squid и Tor.
Файл:
/etc/privoxy/config
Ключевые параметры:
listen-address 127.0.0.1:8118 forward-socks5t / 127.0.0.1:9050 . # Опционально отключаем логи logfile /var/log/privoxy/logfile debug 0
Использование socks5t гарантирует, что DNS-запросы также проходят через Tor, исключая утечки.
Проверка конфигурации
privoxy --no-daemon /etc/privoxy/config
Если ошибок нет - запускаем сервис:
sudo systemctl enable --now privoxy
4.Настройка Squid для прозрачного режима
Для начала нужно сгенерировать сертификаты для Squid
Squid использует собственный сертификат в случаях:
ssl-bump(перехват HTTPS)https_port/tls-outgoing-optionsMITM для прозрачного проксирования HTTPS
Ключ и сертификат обычно лежат здесь:
/etc/squid/ssl/squid.key /etc/squid/ssl/squid.crt
Подготовка каталога и прав:
mkdir -p /etc/squid/ssl chown -R proxy:proxy /etc/squid/ssl chmod 700 /etc/squid/ssl
Генерация приватного ключа
openssl genrsa -out /etc/squid/ssl/squid.key 4096
acl localnet src 192.168.0.0/16 # ACL по SNI acl tor_url ssl::server_name_regex "/etc/squid/url.tor" http_port 3128 http_port 8081 transparent https_port 8082 intercept ssl-bump generate-host-certificates=off cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key acl step1 at_step SslBump1 ## Сначала смотрим ClientHello (SNI) ssl_bump peek step1 ## НИКОГДА не bump ssl_bump splice all # Перенаправление запросов через Tor always_direct allow !tor_url never_direct allow tor_url # Local Tor is cache parent cache_peer 127.0.0.1 parent 8118 0 no-query no-digest default # Разрешающая политика http_access allow localhost http_access allow localnet http_access deny all
Создаётся отдельный файл со списком доменов, которые должны идти через TOR
/etc/squid/url.tor
Пример содержимого:
sitter\.com s mitter\.io example\.org
5.Настройка Iptables
iptables настраивается на сетевом шлюзе.
Необходимо исключить:
локальные сети;
сам сервер;
трафик Tor-процесса.
/etc/iptables/iptables.rules
Пример файла конфигурации
*nat :PREROUTING ACCEPT [6:2126] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [17:6239] :POSTROUTING ACCEPT [6:408] -A PREROUTING ! -i lo -p tcp --dport 80 -j REDIRECT --to-port 8081 -A PREROUTING ! -i lo -p tcp --dport 443 -j REDIRECT --to-port 8082 # Редирект DNS -A PREROUTING ! -i lo -p tcp --dport 53 -j REDIRECT --to-ports 53 -A PREROUTING ! -i lo -p udp --dport 53 -j REDIRECT --to-ports 53 -A OUTPUT -o lo -j RETURN -A OUTPUT -d 192.168.0.0/16 -j RETURN -A OUTPUT -m owner --uid-owner "tor" -j RETURN COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # Блокируем QUIC иначе будут потери -A FORWARD -p udp --dport 443 -j DROP COMMIT
Т.к. мы не заморачивались с правилами ipv6 нужно оключит этот протокол, иначе возможны потери.
sudo nano /etc/sysctl.d/99-disable-ipv6.conf
Содержимое
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
Применить можно без перезагрузки
sudo sysctl --system
Принцип работы HTTPS
Squid в прозрачном режиме не расшифровывает HTTPS.
Фильтрация доменов выполняется по SNI, что позволяет:
определять целевой домен;
принимать решение о маршрутизации;
не использовать SSL Bump и MITM.
Проверка Tor:
добавьте строку 'api\.ipify\.org' в файл /etc/squid/url.tor и запустите на клиенте команду
curl https://api.ipify.org
Сравните полученный адрес с адресом вашего провайдера.
Ограничения и особенности
Tor не поддерживает UDP и QUIC (HTTP/3);
производительность ниже обычного выхода в интернет;
некоторые сайты блокируют Tor exit-nodes;
приложения с certificate pinning могут не работать.
Заключение
Цепочка iptables → Squid → Privoxy → Tor позволяет реализовать мощную и гибкую систему:
прозрачного проксирования;
выборочной анонимизации трафика;
централизованного контроля доступа.
Решение хорошо подходит для шлюзов домашних сетей, учебных сетей, а также сценариев, где важна анонимность отдельных ресурсов без полного ухода в Tor.
