如何讓所有流量都使用Tor?
講到匿名上網就會想到 Tor,其匿名和安全性可以說在同類軟件中是數一數二的(當然,前提是在合理且科學的使用方法下)。而且在「Tor Browser」推出之後,使用 Tor 上網更加便捷,也被越來越多的普通人所接受。雖然用 Tor 瀏覽網頁便捷了,但配置系統中的每個程序使用 Tor 還是非常麻煩,往往需要單獨配置。那麼有人可能就會想,如何讓所有流量都使用 Tor?答案是:沒有辦法。
⚠️ 解釋為什麼沒有辦法之前,筆者首先需要聲明:Tor 理論上是安全的,但是實際上讓使用者身份曝露的方法有很多(例如,當使用者的「所有」流量都使用相同的 Tor 網路的情況下,那些有身份信息的流量,如登錄某網路服務賬號,就有可能成為曝露身份的導火索)。本文只是交流「如何讓所有流量都使用 Tor?」這一技術問題,其它一概非本文討論之範圍。使用 Tor 時發生泄露個人隱私、身份等事件,都與筆者無關。使用 Tor 進行任何非法行為,或是在任何禁止使用 Tor 的國家非法使用 Tor 的行為,都與筆者無關。最後,希望諸位可以在任何時候保持獨立思考。
言歸正傳,沒有辦法的原因很簡單,Tor 並非支持所有的 Protocol,比如 ping 使用的 Internet Control Message Protocol (ICMP) 這種 Protocol 就不能經過 Tor。另外,UDP 也不可以,Tor 只提供了一個 UDP 的 DnsPort。那我們要怎麼「讓所有流量都使用 Tor」呢?其實很簡單,那就是把不能走 Tor 的流量全部封鎖就好了(這裡可以參考一下著名匿名 Linux 發行版:Tails 的設計思路)!這個看似掩耳盜鈴的做法其實是非常有效的,因為流量走得越少就越安全,而且鑑於大部分程序都是支持 TCP 的,在日常使用中應該不會遇到太多的不便。
實現的方法看起來也很簡單,那就是使用
iptables
或者其「替代者」:nftables
進行一些操作就可以了。在網路上有很多類似的模板可以「借鑑」,但說實話整合起來還是太麻煩了。好在已經有人寫好了
script 供我們使用,隆重介紹:TorGhost,還有它的 fork:TorPhantom。
TorGhost
TorGhost 從簡介來看應該是專門針對「Kali Linux」開發的,筆者使用起來覺得非常簡單方便,推薦大家使用。但是 Arch 的用戶怎麼辦呢?筆者本身想自己寫一個的,沒想到發現了下面這個 fork。
TorPhantom
TorPhantom
其實才是本篇文章的重點,因為 TorPhantom 除了可以在 Debian
系使用,還加入了 Arch 等其他 distro 的支持,甚至支持
macOS。除此之外,它還加入了 macchanger
的功能,通過更改
MAC
加強了使用時的匿名性。不過在使用過程中還是有一些小問題(有些問題確實沒有太好的解決辦法,個人覺得是原作者妥協的結果):
0. <interface(s)>
在說問題之前,為了防止有人連 <interface(s)>
代表什麼都不知道,筆者先簡單介紹一下該如何查看。這裡的
<interface(s)> 是指「network interface(s)」,只需要使用
ip link show
或者 ifconfig
就可以直接查看
interface(s) 的名稱和相對應 MAC 地址了。
1. macchanger 的問題
首先是 macchanger 的問題,如果我們使用:
torphantom start -i <interface(s)>
TorPhantom 會使用 macchanger 將 MAC 改變,但是當我們使用:
torphantom stop
TorPhantom 並不會將被改變的 MAC 還原,這段代碼確實不好設計,因為 TorPhantom 本身是無法得知之前用戶使用了哪個 interface(s) 的。如果還原所有的 interface(s),可能導致用戶在其它場景下改變的 MAC 一同被還原。不過,如果能在 stop 的時候告知用戶 MAC 配置需要手動還原,可能是一個更好的解決辦法。那麼我們該如何手動還原呢?只需要下面這行命令:
macchanger -p <interface>
然後我們可以使用如下命令查看目標 interface(s) 是否還原:
macchanger -s <interface>
如果 Current MAC
和
Permanent MAC
一致,就說明被還原了。
2. 如何卸載(uninstall)
另一個問題是沒有提供卸載(uninstall)功能,這其實很好解決。首先讓
torphantom stop
,然後:
rm /usr/bin/torphantom
就大功告成了。或者在 Arch Linux 下直接使用 AUR 安裝應該也很方便卸載,不過筆者並沒有進行測試。
測試匿名性
這兩個 script 筆者都有粗略地過了一遍源碼,所以還是比較放心的。但是如果使用的是其他的匿名手段,該如何測試其隱秘性呢?
以下幾點大家可以注意一下,算是拋磚引玉,實際需要注意的會更多:
- 查看自己的 IP 地址;
- 進行 DNS 泄露測試(DNS leak test);
- 嘗試 ping 一下,應該是被禁止的;
- ……
總結
只要上網就沒有絕對的匿名和安全,想要絕對匿名和安全的人早就已經斷網了。斷網固然是一種有效的匿名手段,但對絕大多數人來說並不現實,因此如何平衡科技帶來的便利和風險是一個需要持續思考的問題。希望大家都能找到適合自己的解決辦法 ヾ(●゜▽゜●)♡