
Утилита командной строки для Linux, которая прозрачно направляет весь системный трафик через сеть Tor с использованием nftables. Она обеспечивает быструю смену IP-адреса и простое переключение глобальных настроек прокси для задач, связанных с приватностью.
Настройка для каждого приложения не требуется — просто sudo ttp start, и каждое соединение идёт через Tor.
[!CAUTION] TTP — это инструмент, предназначенный для повышения приватности путём маршрутизации трафика через Tor. Однако ни один инструмент не может гарантировать 100% анонимность. Ваша безопасность также зависит от вашего поведения (например, использования обычного браузера вместо Tor Browser, входа в аккаунты и т. д.). Всегда используйте TTP как часть многоуровневой стратегии безопасности.
[!WARNING] Если вы информатор или занимаетесь деятельностью с высоким риском, НЕ используйте TTP. Вместо этого используйте официально проверенные и надёжные инструменты, такие как TailsOS или напрямую Tor Browser. Авторы и участники TTP не несут ответственности за вашу безопасность или последствия использования этого программного обеспечения.
Устаревшие скрипты прозрачного прокси (TorGhost, Anonsurf) перезаписывают файлы конфигурации и создают наборы правил iptables, которые отказывают открыто: когда они ломаются, трафик уходит в открытом виде. TTP построен наоборот — он отказывает закрыто и ничего не хранит на диске.
| Отказ закрыт по построению | Изолированная таблица nftables inet ttp с общим reject-правилом и policy drop для forwarding. При сбое, срабатывании watchdog или некорректном завершении трафик либо маршрутизируется через Tor, либо блокируется — но никогда не выпускается наружу. |
| Ничего не сохраняется | Состояние сессии, torrc, lock-файл и логи живут только в tmpfs (/run/ttp/, /run/tor/ttp/). После перезагрузки не остаётся ни следов, ни устаревшего lock-файла. |
| Без настройки для каждого приложения | TCP и DNS перехватываются на сетевом уровне. Никаких настроек SOCKS5, никаких переменных окружения прокси, никакой поддержки со стороны приложений. |
| DNS без перезаписи вашей системы | Наложение mount --bind на /etc/resolv.conf вместо его редактирования, плюс volatile drop-in, нейтрализующий systemd-resolved, подкреплённый drop-правилом на уровне ядра для любого трафика к резолверам, отличным от loopback. |
| Утверждение об отсутствии утечек измеряется | Каждое правило изоляции тестируется в изолированном сетевом пространстве имён против реального сгенерированного набора правил, и каждый тест сначала доказывает, что способен увидеть утечку, прежде чем утверждать, что её нет. См. Проверка. |
transitions), отслеживает Tor, цепочки nftables и DNS-наложение через
двойной inotify-мониторинг, который ловит подмену цели симлинка. Он выполняет
одно восстановление, затем применяет аварийный killswitch.--bypass-user,
--bypass-group) с нативным сопоставлением UID/GID в nftables, либо запуск одной
команды вне Tor с помощью ttp bypass <cmd> через slice cgroups v2.torrc.ttp-tor.service на нестандартных портах, не затрагивая существующий экземпляр Tor.Выберите метод, который лучше всего подходит вашим задачам. Нативные пакеты настоятельно рекомендуются для стабильности системы, безопасности и чистого удаления.
Установка через нативные пакеты гарантирует, что все системные зависимости (tor, nftables) и оптимизации на уровне ядра (SELinux) управляются пакетным менеджером вашей ОС.
Скачайте .deb или .rpm нужной версии из последнего релиза — пакеты являются артефактами релиза и не хранятся в репозитории — затем установите его:
sudo apt install ./transparent-tor-proxy_0.4.9_all.debsudo dnf install ./transparent-tor-proxy-0.4.9-1.noarch.rpmcd packaging && makepkg -siИнструкции по проверке целостности и подлинности артефактов релиза см. в Руководстве по проверке релизов.
Если вы разработчик или хотите установить из репозитория:
git clone https://github.com/onyks-os/TransparentTorProxy.git
cd TransparentTorProxy
sudo ./scripts/install.sh
[!TIP] Почему стоит использовать
./install.sh?
В отличие от стандартных установщиков Python, этот скрипт «интеллектуальный». В системах на базе Red Hat он определяет, находится ли SELinux в режиме Enforcing, и динамически компилирует пользовательский модуль политики (изttp_tor_policy.te), чтобы позволить Tor привязываться к нестандартным портам, требуемым TTP (9041, 9054). Эта оптимизация на уровне ядра не может быть выполнена с помощьюpip.
Для установки TTP через специфичные для Python менеджеры пакетов (pipx или pip с виртуальными окружениями) см. Справочник по альтернативным методам установки.
TTP спроектирован простым и лёгким. Полный список команд CLI, опций, кодов выхода и технических спецификаций см. в Справочнике по внешним интерфейсам.
Большинство команд, изменяющих сеть, требуют прав root (sudo):
Запустить прокси:
sudo ttp start
Остановить прокси:
sudo ttp stop
Проверить статус текущей сессии:
ttp status
Проверить маршрутизацию через Tor и задержку:
ttp check
Запросить новый выходной IP (сменить цепочки):
sudo ttp refresh
Для более продвинутых конфигураций и профилей обхода см. Справочник по продвинутым профилям безопасности и использования или обратитесь к Справочнику по внешним интерфейсам.
Чтобы убедиться, что туннель работает корректно и утечек нет:
Проверить выходной IP Tor:
curl -s https://check.torproject.org/api/ip
Проверить маршрутизацию DNS:
# Should return a valid IP via Tor's DNSPort
dig +short A check.torproject.org
Тест на утечку DNS (терминал):
# This TXT query SHOULD return an EMPTY output
dig +short TXT whoami.ipv4.akahelp.net
Примечание: Пустой вывод — это ожидаемое поведение под Tor. Прозрачный резолвер Tor не поддерживает записи TXT; если эта команда возвращает IP вашего реального провайдера, у вас утечка DNS.
Проверка через веб: Всегда выполняйте дополнительные тесты на dnsleaktest.com и ipleak.net.
Чтобы полностью удалить TTP из системы:
sudo ./scripts/uninstall.sh
TTP прозрачно маршрутизирует весь сетевой трафик, оркеструя стандартные подсистемы ядра Linux, системные утилиты и управляющие интерфейсы Tor:
flowchart LR
App["Application"] --> Local["Local Network"]
Local --> DNS["systemd-resolved (Intercepted)"]
DNS --> NFT["nftables (inet ttp table)"]
NFT --> Tor["Tor Daemon"]
Tor --> Internet["Internet"]inet ttp для перехвата TCP и DNS-трафика, перенаправляя их в Tor и предотвращая утечки IPv6 и DoT/DoH./etc/resolv.conf с volatile-конфигурацией в оперативной памяти через bind-mount на уровне ядра, чтобы гарантировать разрешение DNS-запросов через Tor.Подробное описание потоков выполнения, системных хуков, границ безопасности и модульных компонентов см. в:
TTP спроектирован так, чтобы всегда восстанавливать вашу сеть, даже в граничных случаях:
| Сценарий | Что происходит |
|---|---|
ttp stop | Очистка без утечек: применяет блокировку при демонтаже, корректно завершает Tor, выполняет активное уничтожение сокетов, ждёт 1.5 с, очищает connection tracking, восстанавливает брандмауэр и DNS (через flush и delete таблицы) и удаляет lock-файл |
Ctrl+C / kill | Обработчик сигналов перехватывает SIGINT/SIGTERM и выполняет обычную очистку перед выходом |
kill -9 / Отключение питания | Следующий ttp start обнаруживает осиротевший lock-файл, очищает любые устаревшие стеки монтирования и автоматически восстанавливает состояние |
| Ручной аварийный режим | Запустите sudo ./scripts/restore-network.sh, чтобы очистить все правила nftables, сбросить DNS и удалить lock-файл |
[!WARNING]
- Tor Browser: Приложения, использующие явный прокси SOCKS5, создадут двойной хоп Tor. Используйте обычный браузер, пока TTP активен.
- DNS-over-HTTPS (DoH): Обычные браузеры (Firefox, Chrome, Brave, Edge) могут использовать DoH в обход системного DNS. TTP нейтрализует DoH с помощью трёхуровневой защиты: (1) весь исходящий TCP-трафик (включая DoH) перенаправляется на Tor TransPort; (2) распространённые canary-домены DoH отображаются на
0.0.0.0вtorrc; (3) публичные IP-резолверы DoH блокируются на TCP/UDP порту 443 (блокируя HTTP/3 QUIC DoH). Для максимальной безопасности отключите DoH / «Secure DNS» в настройках вашего браузера.- IPv6: Полностью поддерживается, когда доступен. TTP динамически определяет IPv6 loopback и маршрутизирует IPv6-трафик через Tor. Если хост не поддерживает IPv6 loopback ИЛИ если передан параметр
--no-ipv6, TTP отбрасывает весь исходящий IPv6-трафик для предотвращения утечек.- Вариация выходного IP: Разные соединения могут показывать разные выходные IP из-за изоляции потоков Tor.
Полный разбор остаточных рисков, архитектурных границ доверия и модели угроз STRIDE см. в:
TTP использует Makefile для автоматизации и стандартизации конвейера тестирования. Это гарантирует, что каждое изменение проверяется модульными и интеграционными тестами перед коммитом.
[!IMPORTANT] Всегда запускайте
make verifyперед отправкой кода. Если эта команда завершается неудачей, код НЕ готов к продакшену.
| Команда | Цель |
|---|---|
make test | Запускает быстрые модульные тесты локально (root не нужен, всё замокано). |
make integration-debian | Запускает полные системные тесты внутри привилегированного контейнера Docker (Debian). |
make integration-all | Запускает интеграционные тесты для всех поддерживаемых дистрибутивов (Debian, Fedora, Arch). |
make verify | Запускает модульные тесты + все интеграционные тесты. |
make build | Генерирует нативные пакеты .deb и .rpm. |
make clean | Удаляет все артефакты сборки, кэши и временные файлы. |
Утверждение TTP об отсутствии утечек измеряется, а не декларируется.
Network Sandbox Engine создаёт
изолированное сетевое пространство имён, загружает в него реальный сгенерированный
набор правил TTP, генерирует трафик, из которого состояла бы утечка, и наблюдает за
граничным интерфейсом veth с помощью сниффера Scapy.
Каждый тест изоляции выполняется дважды. assert no leaks также истинно, когда
сниффер вообще не запустился, когда имя интерфейса неверно или когда трафик так и не
покинул процесс, поэтому каждый тест сначала запускает тот же стимул с очищенным
набором правил и требует, чтобы пакет был замечен. Только после этого он утверждает,
что набор правил TTP его останавливает. Стенд, который не может наблюдать утечку,
проваливает тест, а не проходит его.
Покрыто: обычный DNS (UDP и TCP), обычный TCP, DoT на 853, QUIC DoH на UDP/443, ICMP, произвольный UDP, IPv6 — плюс обратное направление: что исключённый UID всё ещё может достичь LAN. Брандмауэр, который блокировал бы всё, прошёл бы первые семь и провалил восьмой.
# libpcap is required: the sniffer compiles a BPF filter, and Scapy dlopen()s
# the unversioned libpcap.so that only the -devel/-dev package ships.
sudo apt install nftables iproute2 conntrack libpcap0.8 libpcap-dev # Debian/Ubuntu
sudo dnf install nftables iproute2 conntrack libpcap libpcap-devel # Fedora/RHEL
pip install -e ".[nse]"
make test-nse # runs as root; TTP_REQUIRE_NSE=1 so it cannot skip itself
Это выполняется в CI при каждом push (задача Zero-leak ruleset verification) и как
шаг в scripts/verify.sh перед релизом.
Хотя интеграционные тесты Docker быстры и атомарны, они не охватывают 100% нюансов ядра/systemd. Для критических изменений настоятельно рекомендуется тестировать в реальной ВМ QEMU:
# Start a specific VM (e.g., arch)
./scripts/vm/start.sh arch
# Sync current code to the VM
./scripts/vm/send.sh
# Snapshot management for easy rollbacks
./scripts/vm/snapshot.sh arch save before-risky-test
Если что-то пошло не так, запустите команду диагностики:
sudo ttp diagnose
├── pyproject.toml # Package metadata and dependencies
├── README.md
├── CONTRIBUTING.md # Contribution guidelines
├── SECURITY.md # Security policy
├── scripts/ # Installation, verification, and VM management scripts
├── assets/ # Branding and demo assets
├── packaging/ # Packaging configurations (.deb, .rpm, Arch PKGBUILD)
├── ttp/ # Main Python source package
│ └── resources/ # Internal package resources (SELinux policies, etc.)
├── tests/ # Unit, integration, and leak testing suites
└── docs/ # Technical documentation, threat models, and ADRs
Вклад приветствуется, и области, где помощь важнее всего, узкие и конкретные:
Начните с CONTRIBUTING.md, где описаны два правила, на которых построена эта кодовая база: никогда не исправляйте баг, не добавив проверку, которая поймала бы его, и тест, утверждающий отсутствие, должен сначала доказать, что способен обнаружить присутствие.
| Баги и запросы функций | GitHub Issues |
| Уязвимости безопасности | SECURITY.md — пожалуйста, не открывайте публичный issue |
| Поддержка версий и EOL | SUPPORT.md |
| Релизы и пакеты | GitHub Releases · PyPI |
Этот проект поддерживается в свободное время. Звезда помогает другим найти его; спонсорство помогает ему продолжать существовать.
MIT. См. LICENSE для получения дополнительной информации.