在 FreeBSD 利用 Tor 架設 deep web site

Tor 這玩意已經是老東西了,有些人只是把它當成跳板用,有些人會拿來瀏覽 .onion 虛擬網域下的 deep web sites,當然也有人拿來架 deep web sites。
長年來人們對 deep web 都會有一些不切實際的傳說,譬如下面這幾張圖:
deep-web deep-web-247933 150279_original
這些圖片和傳說雖然有些是真的,但大部分都可以把它當成 joke 看待,不用對它們太認真。
特別是第三張圖,你還會看到各種惡搞變形版,我只能說對它認真你就輸了。
所以拜託不要再跑來問我什麼 Marianas Web 在哪,這些都是 bullshit,去問你地理老師還比較實在。
至於用冰山來形容海面下有多少東西這種描述方式,我只能說以種類的數量來說的確如此,但以純粹的檔案容量來講這簡直胡扯。

雖說 deep web 有 deep 這個字,但它只是形容這些網站和服務藏於深海之中,從來都沒有依照存取的難度來劃分所謂的深度。
就像有些人只知道伊莉,有些人會知道 FDZone 跟無限,又有些人知道謎樣御飯糰等等一樣,一切只是機緣巧合,還有你跟一些小圈圈的人相性合不合的差異罷了。
並不會因為你去的地方很少人知道,很少人進得去,就代表你比較厲害,地位比較崇高。
相對來說,也不會因為你知道了一些鮮為人知的重犯罪網站,或者架設了這些網站,就代表你潛得夠深,本事夠強。

事實上,在這裡面也有不少不是那麼惡性重大的網站,只是因為言論自由遭受箝制或遭受極權統治,所以一些反政府組織或民運人士才將網站地下化而已。
要架設什麼網站在這裡面,還是要看架站的人目的是什麼,而不是說只要架在這裡頭就必然是不好的。
不要以為把網站架在這裡面就可以達到完全匿名化,這些 deep web 的協定和加密技術並不是完美的,真的惹毛一些人的話還是可能被 deanonymize。
真要做些見不得光的事,找人頭在海外設立空殼公司,再以公司的名義去海外申租主機來架設,收費服務使用 bitcoin 這類方式進行交易,可說是基本中的基本。
當然光是這樣還不夠,但講太多好像是在教人犯罪,所以只講到足以保障言論自由的程度就好了。

在 FreeBSD 安裝 Tor 可以直接透過 ports 安裝,難度為零,就不多說。
安裝完成後,設定檔 torrc 會出現在 /usr/local/etc/tor 這目錄下。
接著就找寫著「############### This section is just for location-hidden services ###」的區段來新增一些內容:

在這段之前的設定只要照常識設定就行了,想擋什麼的話就在設定檔擋,設定檔不方便擋的用防火牆擋。

HiddenServiceDir 這個參數指定好,讓 Tor 重讀設定檔後,在指定的目錄下就會出現 hostname 和 private_key 這兩個檔案。
其中 hostname 就是你的主機名稱,譬如本站是 t7xcpwokiagivyzq.onion,所以就得在 http daemon 的 server name 欄位設定這個名稱。
你會看到有些 .onion 的網址開頭會是一串有意義的字母,那是經過長時間運算刻意碰出來的,如果你吃飽太閒也可以做一個來玩玩,但必須自行學習和留意一些安全原則。

HiddenServicePort 80 127.0.0.1:10000 的意思,就是將從 Tor network 上流進本機 port 80 的流量轉送到 127.0.0.1:10000 去。
換句話說,你的 http daemon 對應的 virtual host 必須去 listen 127.0.0.1:10000,這樣就可以正確接收到 http request。

如果想讓 wordpress 的 blog 可以同時支援多網域,在 wp-config.php 設定 $table_prefix 之後放進這兩行就行了:

當然網站上的圖片網址和超連結也必須使用 / 開頭,而不是整串從 http:// 開始,否則別人開下去就是從 clearnet 上開了,這樣他還必須經過 exit nodes 出來才開得到。
如果你吃飽太閒想寫 plugin 或者去找現成的 plugin 做自動代換,那也沒什麼問題。
只是這網站沒什麼犯法的東西,加上我還掛著 clearnet 才有的 disqus,所以我是沒做得那麼徹底。

要讓一般人瀏覽 .onion 虛擬網域下的 deep web,基本上是他必須也有裝 Tor 相關軟體才行,譬如安裝 Tor Browser。
但是要注意這玩意會跟 Firefox 打架,因為它本身就是 Firefox。
另一種方法是走現成的 Tor2Web 服務,譬如 https://t7xcpwokiagivyzq.tor2web.org/ 也可以連到這裡來,算是一個折衷方法,缺點就是會出現他們的廣告。

目前我這台裝的 security/tor-devel 版本是有一些 bug,架出來的 deep web 逛一逛可能就噴這訊息然後停掉了:

Nov 15 01:40:20.000 [err] void tor_assertion_failed_(const char *, unsigned int, const char *, const char *)(): Bug: src/or/connection.c:3541: connection_handle_event_cb: Assertion connection_state_is_connecting(conn) failed; aborting.
Nov 15 01:40:20.000 [err] Bug: Assertion connection_state_is_connecting(conn) failed in connection_handle_event_cb at src/or/connection.c:3541. (Stack trace not available)

根據他們的 Trac 上的說明,在 make config 的時候關掉 BUFFEREVENTS 這個選項就行了:https://trac.torproject.org/projects/tor/ticket/4697
不過這是很老的版本了,他們當時也宣稱已經修復,只是我在 2.6.x 還是會遇到。