
Un'utilità CLI per Linux che instrada in modo trasparente tutto il traffico di sistema attraverso la rete Tor utilizzando nftables. Consente una rapida rotazione dell'IP e un facile attivazione/disattivazione delle impostazioni proxy globali per attività legate alla privacy.
Nessuna configurazione per singola applicazione necessaria - basta sudo ttp start e ogni connessione passa attraverso Tor.
[!CAUTION] TTP è uno strumento progettato per favorire la privacy instradando il traffico attraverso Tor. Tuttavia, nessuno strumento può garantire l'anonimato al 100%. La tua sicurezza dipende anche dal tuo comportamento (ad esempio, usare un browser normale invece del Tor Browser, accedere agli account, ecc.). Usa sempre TTP come parte di una strategia di sicurezza a più livelli.
[!WARNING] Se sei un whistleblower o stai svolgendo attività ad alto rischio, NON usare TTP. Usa invece strumenti ufficialmente verificati e affidabili come TailsOS o direttamente il Tor Browser. Gli autori e i contributori di TTP non si assumono alcuna responsabilità per la tua sicurezza o per le conseguenze dell'uso di questo software.
Gli script proxy trasparenti legacy (TorGhost, Anonsurf) sovrascrivono i file di configurazione e costruiscono set di regole iptables che falliscono aperti: quando si rompono, il traffico esce in chiaro. TTP è costruito al contrario - fallisce in modo chiuso e non conserva nulla su disco.
| Fail-closed per costruzione | Una tabella nftables isolata inet ttp con un reject catch-all e policy drop sul forwarding. In caso di crash, attivazione del watchdog o uscita non pulita, il traffico viene instradato attraverso Tor o bloccato - mai rilasciato. |
| Nulla persiste | Lo stato della sessione, torrc, lock file e log risiedono solo in tmpfs (/run/ttp/, /run/tor/ttp/). Un riavvio non lascia residui né lock obsoleti. |
| Nessuna configurazione per applicazione | TCP e DNS vengono intercettati a livello di rete. Nessuna impostazione SOCKS5, nessuna variabile d'ambiente proxy, nessun supporto applicativo richiesto. |
| DNS senza riscrivere il tuo sistema | Un overlay mount --bind su /etc/resolv.conf invece di una modifica, più un drop-in volatile che neutralizza systemd-resolved, supportato da un drop a livello kernel su qualsiasi traffico resolver non-loopback. |
| L'affermazione di zero leak è misurata | Ogni regola di contenimento viene testata in un network namespace isolato contro il set di regole realmente generato, e ogni test dimostra prima di poter vedere un leak prima di affermare che non ce ne sia nessuno. Vedi Verifica. |
transitions) monitora Tor, le catene nftables e l'overlay DNS tramite un
doppio watch inotify che rileva lo scambio del target dei symlink. Ripara una volta,
poi applica un killswitch di emergenza.--bypass-user,
--bypass-group) con il matching nativo UID/GID di nftables, oppure esegui un singolo
comando fuori da Tor con ttp bypass <cmd> tramite una slice cgroups v2.torrc.ttp-tor.service volatile
su porte non standard, lasciando intatta un'istanza Tor esistente.Scegli il metodo più adatto alle tue esigenze. I pacchetti nativi sono fortemente consigliati per stabilità del sistema, sicurezza e disinstallazione pulita.
L'installazione tramite pacchetti nativi garantisce che tutte le dipendenze di sistema (tor, nftables) e le ottimizzazioni a livello kernel (SELinux) siano gestite dal gestore di pacchetti del tuo OS.
Scarica il .deb o .rpm per la versione che desideri dalla ultima release - i pacchetti sono asset di release e non sono versionati nel repository - poi installalo:
sudo apt install ./transparent-tor-proxy_0.4.9_all.debsudo dnf install ./transparent-tor-proxy-0.4.9-1.noarch.rpmcd packaging && makepkg -siPer istruzioni su come verificare l'integrità e l'autenticità degli asset di release, vedi la Guida alla verifica delle release.
Se sei uno sviluppatore o vuoi installare dal repository:
git clone https://github.com/onyks-os/TransparentTorProxy.git
cd TransparentTorProxy
sudo ./scripts/install.sh
[!TIP] Perché usare
./install.sh?
A differenza degli installer Python standard, questo script è "intelligente". Sui sistemi basati su Red Hat, rileva se SELinux è in modalità Enforcing e compila dinamicamente un modulo di policy personalizzato (dattp_tor_policy.te) per consentire a Tor di associarsi alle porte non standard richieste da TTP (9041, 9054). Questa ottimizzazione a livello kernel non può essere eseguita dapip.
Per installare TTP tramite gestori di pacchetti specifici per Python (pipx o pip con ambienti virtuali), vedi il Riferimento ai metodi di installazione alternativi.
TTP è progettato per essere semplice e leggero. Per l'elenco completo dei comandi CLI, delle opzioni, dei codici di uscita e delle specifiche tecniche, consulta il Riferimento alle interfacce esterne.
La maggior parte dei comandi che modificano la rete richiede privilegi di root (sudo):
Avvia il proxy:
sudo ttp start
Ferma il proxy:
sudo ttp stop
Controlla lo stato della sessione corrente:
ttp status
Verifica il routing Tor e la latenza:
ttp check
Richiedi un nuovo IP di uscita (ruota i circuiti):
sudo ttp refresh
Per configurazioni più avanzate e profili di aggiramento, vedi il Riferimento ai profili di sicurezza e utilizzo avanzati o consulta il Riferimento alle interfacce esterne.
Per confermare che il tunnel funzioni correttamente e che non siano presenti leak:
Verifica l'IP di uscita di Tor:
curl -s https://check.torproject.org/api/ip
Verifica il routing DNS:
# Should return a valid IP via Tor's DNSPort
dig +short A check.torproject.org
Test di leak DNS (terminale):
# This TXT query SHOULD return an EMPTY output
dig +short TXT whoami.ipv4.akahelp.net
Nota: un output vuoto è il comportamento atteso sotto Tor. Il resolver trasparente di Tor non supporta i record TXT; se questo comando restituisce l'IP del tuo ISP reale, hai un leak DNS.
Verifica basata sul web: Esegui sempre test aggiuntivi su dnsleaktest.com e ipleak.net.
Per rimuovere completamente TTP dal sistema:
sudo ./scripts/uninstall.sh
TTP instrada in modo trasparente tutto il traffico di rete orchestrando i sottosistemi standard del kernel Linux, le utility di sistema e le interfacce di controllo di 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 per intercettare il traffico TCP e DNS, reindirizzandolo a Tor mentre previene leak IPv6 e DoT/DoH./etc/resolv.conf con una configurazione volatile supportata da RAM tramite un bind-mount a livello kernel per garantire che le chiamate DNS siano risolte da Tor.Per una descrizione dettagliata dei flussi di esecuzione, degli hook di sistema, dei confini di sicurezza e dei componenti modulari, fai riferimento alla:
TTP è progettato per ripristinare sempre la tua rete, anche in casi limite:
| Scenario | Cosa succede |
|---|---|
ttp stop | Pulizia a zero leak: applica il lockdown di teardown, arresta Tor in modo controllato, esegue l'uccisione attiva dei socket, attende 1,5s, svuota il connection tracking, ripristina firewall e DNS (tramite flush e delete della tabella), ed elimina il lock file |
Ctrl+C / kill | Il gestore dei segnali cattura SIGINT/SIGTERM ed esegue la pulizia normale prima di uscire |
kill -9 / Interruzione di corrente | Il successivo ttp start rileva il lock file orfano, cancella eventuali stack di mount obsoleti e ripristina automaticamente |
| Emergenza manuale | Esegui sudo ./scripts/restore-network.sh per svuotare tutte le regole nftables, reimpostare il DNS ed eliminare il lock file |
[!WARNING]
- Tor Browser: le applicazioni che usano un proxy SOCKS5 esplicito creeranno un doppio hop Tor. Usa invece un browser normale mentre TTP è attivo.
- DNS-over-HTTPS (DoH): i browser normali (Firefox, Chrome, Brave, Edge) possono usare DoH, aggirando il DNS di sistema. TTP mitiga DoH tramite una difesa a 3 livelli: (1) tutto il traffico TCP in uscita (incluso DoH) viene reindirizzato alla TransPort di Tor; (2) i comuni domini canary DoH sono mappati a
0.0.0.0intorrc; (3) i resolver IP DoH pubblici sono bloccati sulla porta TCP/UDP 443 (bloccando DoH HTTP/3 QUIC). Per la massima sicurezza, disabilita DoH / "DNS sicuro" nelle impostazioni del tuo browser.- IPv6: pienamente supportato quando disponibile. TTP rileva dinamicamente il loopback IPv6 e instrada il traffico IPv6 attraverso Tor. Se l'host non dispone del supporto loopback IPv6 OPPURE se viene passata l'opzione
--no-ipv6, TTP scarta tutto il traffico IPv6 in uscita per prevenire leak.- Variazione dell'IP di uscita: connessioni diverse possono mostrare IP di uscita diversi a causa dell'isolamento degli stream di Tor.
Per una disamina completa dei rischi residui, dei confini di fiducia architetturali e del modello di minaccia STRIDE, vedi:
TTP usa un Makefile per automatizzare e standardizzare la pipeline di test. Questo garantisce che ogni modifica sia verificata rispetto a test unitari e di integrazione prima di essere committata.
[!IMPORTANT] Esegui sempre
make verifyprima di pushare il codice. Se questo comando fallisce, il codice NON è pronto per la produzione.
| Comando | Obiettivo |
|---|---|
make test | Esegue veloci Unit Test in locale (nessun root necessario, completamente mockati). |
make integration-debian | Esegue test di sistema completi all'interno di un container Docker privilegiato (Debian). |
make integration-all | Esegue test di integrazione per tutte le distro supportate (Debian, Fedora, Arch). |
make verify | Esegue Unit Test + Tutti i test di integrazione. |
make build | Genera pacchetti nativi .deb e .rpm. |
make clean | Rimuove tutti gli artefatti di build, le cache e i file temporanei. |
L'affermazione di zero leak di TTP è misurata, non asserita. Il
Network Sandbox Engine costruisce
un network namespace isolato, vi carica il set di regole reale generato da TTP,
genera il traffico di cui consisterebbe un leak e osserva l'interfaccia di confine veth
con uno sniffer Scapy.
Ogni test di contenimento viene eseguito due volte. assert no leaks è vero anche quando lo
sniffer non è mai partito, quando il nome dell'interfaccia è sbagliato o quando il traffico
non ha mai lasciato il processo, quindi ogni test esegue prima lo stesso stimolo con il
set di regole svuotato e richiede che il pacchetto venga visto. Solo allora asserisce
che il set di regole di TTP lo fermi. Un harness che non riesce a osservare un leak fallisce il
test invece di superarlo.
Coperti: DNS semplice (UDP e TCP), TCP ordinario, DoT sulla 853, QUIC DoH su UDP/443, ICMP, UDP arbitrario, IPv6 — più la direzione opposta, che un UID bypassato possa comunque raggiungere la LAN. Un firewall che bloccasse tutto supererebbe i primi sette e fallirebbe l'ottavo.
# 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
Questo viene eseguito in CI a ogni push (il job Zero-leak ruleset verification) e come
passaggio in scripts/verify.sh prima di una release.
Sebbene i test di integrazione Docker siano veloci e atomici, non catturano il 100% delle sfumature del kernel/systemd. Per modifiche critiche, è altamente consigliato testare in una VM QEMU reale:
# 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
Se qualcosa va storto, esegui il comando di diagnostica:
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
I contributi sono benvenuti, e le aree in cui l'aiuto conta di più sono ristrette e specifiche:
Inizia da CONTRIBUTING.md, che documenta le due regole su cui è costruito questo codebase: non correggere mai un bug senza aggiungere il controllo che lo avrebbe catturato, e un test che asserisce un'assenza deve prima dimostrare di poter rilevare una presenza.
| Bug e richieste di funzionalità | GitHub Issues |
| Vulnerabilità di sicurezza | SECURITY.md - per favore non aprire una issue pubblica |
| Supporto versioni ed EOL | SUPPORT.md |
| Release e pacchetti | GitHub Releases · PyPI |
Questo progetto è mantenuto nel tempo libero. Una star aiuta gli altri a trovarlo; una sponsorizzazione aiuta a farlo continuare.
MIT. Vedi LICENSE per maggiori informazioni.