這個指南會教導如何為網站設置洋蔥服務。 更細節的洋蔥服務協議內容與運作原理,請參見洋蔥服務協議網頁。

第0步:架起洋蔥路由

在這裡,我們假定您已經在電腦上架起可以正常運行的洋蔥路由。 若想要架設洋蔥路由,請依照洋蔥路由安裝指南的步驟指引。 它可以讓您架起可以正常運行的洋蔥路由。 同時您也必須要熟知洋蔥路由的設定檔位置。

第1步:架起可正常使用的網頁伺服器

第一步所要做的,是先在本地端主機架設起一個網頁伺服器,像是Nginx、Apache或任何您打算使用的網頁伺服器系統。 網頁伺服器的架設會有點複雜。 若您在這裡卡住或希望特別做其他的調整,可以找個朋友協助,或者是加入我們的tor-onions郵件通訊清單,以跟其他維運者對話。

作為示範,我們將涵蓋如何在 Debian 系統上利用 Nginx 與 Apache 設定洋蔥服務。 建議您為 Onion 服務安裝新的單獨的 Web 伺服器,即使已經安裝一個伺服器,您可能把它(或者之後)用在一般網站。

在這篇教學裡,都是以Debian為基礎的作業系統上的指令來管理網頁伺服器,這些指令在其他系統上可能會有所差異。 請查閱您的作業系統與網頁伺服器的相關文件。

Apache

在許多Linux以及BSD系統的發行版裡,其官方套件庫都有提供Apache軟體。 安裝apache2套件:

$ sudo apt install apache2

Nginx

在許多Linux以及BSD系統的發行版裡,其官方套件庫都有提供Nginx軟體。 安裝nginx套件:

$ sudo apt install nginx

在預設的狀態下,網頁伺服器會在安裝完成後,會將服務開啟於localhost:80。 如果您有看到錯誤訊息的話,那就表示有地方做錯了,您必須要先找出問題才能夠繼續往後的步驟。

架設起網頁伺服器後,請先確定它有正常運行:用瀏覽器開啟 http://localhost/ 。 然後試著在主 HTML 目錄放一個檔案,確認透過網站存取時能看到。

步驟 2: 配置 Tor 洋蔥服務

下一個步驟是開啟 Tor 設定檔(torrc),並予以適當的置配來設定洋蔥服務。 隨著您的作業系統與相關設定不同,洋蔥路由的設定檔可能位於不同的目錄或外觀。

將下列二列加入到 torrc設定檔:

 HiddenServiceDir /var/lib/tor/my_website/
 HiddenServicePort 80 127.0.0.1:80

HiddenServiceDir這行指定了洋蔥服務所含資訊與密碼學金鑰的目錄。 您會需要調整HiddenServiceDir的設定值,以便讓它指向一個執行洋蔥服務的使用者帳號有讀取與寫入權限的目錄。

HiddenServicePort 指定了一個 虛擬端口 (即訪問您的洋蔥服務者將使用的端口),在上述情況下,任何進入您的洋蔥服務端口 80 的流量都會重新指向 127.0 .0.1:80(這是步驟1 中 Web 伺服器正在偵聽的位置)。

提示: 避免將洋蔥服務洩漏到本地網路的一個好做法是透過 Unix 套接字而不是 TCP 套接字來運行洋蔥服務。 將下列二列加入到 torrc設定檔:

HiddenServiceDir /var/lib/tor/my-website/
HiddenServicePort 80 unix:/var/run/tor/my-website.sock

第3步:重新啟動洋蔥路由並確認是否有正常運行

torrc的變更儲存並重新啟動洋蔥路由。

$ sudo systemctl restart tor

如果洋蔥路由有正常被啟動的話,那就表示一切都順利,否則的話,就代表有地方出錯了,請先查閱您的歷程記錄檔以了解情況。 它裡面會有一些警告或錯誤訊息,以便讓您知道可能是哪裡出問題。 常見的錯誤都是torrc裡有字打錯,或者是檔案目錄的權限不足,(若您不知道如何查閱歷程記錄的話,請參考歷程記錄問答集)。

當洋蔥路由啟動時,它會自動建立您在HiddenServiceDir所指定的目錄(若不存在的話)。 請確認此部份是否正確。

步驟 4: 測試洋蔥服務是否成功

現在取得了洋蔥服務地,請到HiddenServiceDir目錄找出一個叫hostname的檔案。 洋蔥服務配置目錄中的hostname 檔案包含了新式洋蔥服務第 3版的主機名稱。 其它檔案是洋蔥服務密鑰,因此保管好它們非常重要。 如果密鑰洩漏,其它人可以冒充您的洋蔥服務,認為被破壞、無用與訪問會有危險。

現在您可以使用 Tor 瀏覽器連線到您的 Onion 服務,並且您應該會獲得您在步驟 1 中設定的 HTML 頁面。 如果這裡有問題的話,請先查閱歷程記錄以了解情況,並再試著重新調整測試,直到一切都正常為止。

請注意像這樣洋蔥服務設置將可會被知道或發現此地址的人看懂。 可以設定洋蔥服務要求驗證,持有私鑰的用戶才能訪問。 請參閱客戶端認證文件以了解更多資訊。

(可選的) 步驟 5: 執行多重洋蔥服務

若要轉發多個虛擬端口給單一洋蔥服務,只要加入更多行 HiddenServicePort 即可。 若要在同一個 Tor 客戶端運行多個洋蔥服務,只需多加另一行 HiddenServiceDir。 除非您加入另一行HiddenServiceDir設定,否則底下的這幾行HiddenServicePort全都會參考到這個HiddenServiceDir設定:

 HiddenServiceDir /var/lib/tor/onion_service/
 HiddenServicePort 80 127.0.0.1:80

 HiddenServiceDir /var/lib/tor/other_onion_service/
 HiddenServicePort 6667 127.0.0.1:6667
 HiddenServicePort 22 127.0.0.1:22

若是在同一個洋蔥網頁伺服器運行多個洋蔥站台,請記得編輯網頁伺服器虛擬主機檔並添入各洋蔥站台的洋蔥地址。 舉例來說,如果在Nginx中以Unix Sockets來執行洋蔥路由的話,其設定值看起來會像是這樣:

server {
        listen unix:/var/run/tor/my-website.sock;
        server_name <your-onion-address>.onion;
        access_log /var/log/nginx/my-website.log;
        index index.html;
        root /path/to/htdocs;
}

Or in Apache with Tor service listening on port 80:

     <VirtualHost *:80>
       ServerName <your-onion-address.onion>
       DocumentRoot /path/to/htdocs
       ErrorLog ${APACHE_LOG_DIR}/my-website.log
     </VirtualHost>

第6步:安全性建議與其他提示

預設的 Onion Services 版本是第 3 版,其位址長度為 56 個字元,不包含 http://.onion 的部分。 自 2021 年 Tor 0.4.6.1-alpha 版本發布以來,洋蔥服務版本 2 已棄用並不再受支援。 請參閱此篇部落格貼文洋蔥服務版本廢棄時程以獲取更多資訊。

某些洋蔥服務營運者不想要揭露其洋蔥服務的位置。 因此您必須要特別調整網頁伺服器的設定,以變使它不會透漏出您的電腦或地理位置等相關資訊。 這並不事件容易的事,底下這些資源可以協助您達成此目標:

最後,若您打算讓您的服務長時間運行的話,或許應該要將private_key妥善備份於其他地方。

您現在運行一個洋蔥站點,可能想進一步部署 Onion-Location或使用容器工具Heroku, Terraform, Ansible , stem 來自動管理洋蔥服務。 如果有一個靜態網站,但從未安裝過 Nginx 或 Apache,另一個可以嘗試的專案是 OnionShare,利用它更容易運行洋蔥站點 :通過圖形界面和最少的配置進行引導。