Вступление

Настоящая статья не является призывом к нарушению законодательства Российской Федерации. Материалы предназначены исключительно для образовательных целей и направлены на описание технических методов, применяемых для обхода ограничений, введенных иностранными компаниями для пользователей Российского сегмента интернет. Автор не несет ответственности за использование данных методов с нарушением местных законов. Читатели обязаны соблюдать все законодательные нормы, действующие в их юрисдикции.

Предыстория

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

Со времени публикации статьи, благодаря, в том числе, комментариям к статье, техническое решение получило развитие.

Дополнительно потребовалось:

  1. Разделить WEB-сайты на те, которые должны идти через защищенную сеть TOR и те, которые должны идти по обычному маршруту .

  2. Использовать прозрачное проксирование - т.е. заворачивать все запросы в сеть интернет принудительно через прокси.

  3. Использовать для TOR другие мосты вместо встроенных т.к. встроенные мосты становятся недоступны.

  4. Использовать защищенный 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-options

  • MITM для прозрачного проксирования 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.