Tor環境搭建_未完草稿

Tor隱匿環境搭建

Author:HJY

[參考鏈接]

背景信息

  1. tor的配置文件的路徑 /etc/tor
  2. tor服務的端口爲9050,若使用Tor瀏覽器其配置端口爲9150
  3. tor本質是一個socks代理,而非HTTP代理,代碼上需注意,可以使用Polipo實現HTTP代理轉Socks代理

環境描述

  1. 基於ubuntu-1604,命令運行正常
  2. 網絡鏈路:
    1. 本機公網IP -> Tor代理 -> 目標網絡
    2. 本機公網IP -> 代理 -> Tor代理 -> 目標網絡

注:在中國使用Tor服務,疊加一層前置代理會比較好。而Tor瀏覽器則是選擇獲取官方提供的網橋的方式。因此本教程是基於鏈路2的網絡拓撲進行搭建。

安裝Tor

  • note: 需在超級權限下進行安裝
  • note: 建議使用代理網絡進行安裝操作,否則訪問源失敗

對於Debian系統,安裝只需apt install tor即可,Ubuntu本身的默認源裏也存在tor,但比較過時,如果你不在意,那你只需apt-get install tor即可跳過下面的安裝步驟.

Do not use the packages in Ubuntu’s universe. In the past they have not reliably been update.That means you could be missing stability and security fixes

># apt install apt-transport-https

根據當前系統版本添加tor包源,參照官網安裝指引,以ubuntu16爲例
查看系統版本的命令

> head -n 1 /etc/issue
># vim /etc/apt/sources.list
#添加下面的語句於該文件
deb https://deb.torproject.org/torproject.org xenial main
deb-src https://deb.torproject.org/torproject.org xenial main

添加gpg key(add the gpg key used to sign the packages)

># curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
># gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -

若報錯,採用下面的方案進行
1. 下載該文件`A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc`
2. apt-key add A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc

進行安裝

># apt update
># apt install tor deb.torproject.org-keyring

=----------------------------------------------------------------------------------------------

基本命令

啓動服務

> service tor start	

檢查服務狀態

> service tor status

基本配置

vim /etc/tor/torrc

SocksPort 9050				 #本機連接
SocksPort 192.168.1.223:9100 #暴露給局域網其他機器連接
Socks5Proxy 127.0.0.1:10809  #配置前置socks5代理
OutboundBindAddress 192.168.1.223 #對於多網卡設備,指定接口IP給其所在的局域網使用(未驗證,可以不添加)
# NewCircuitPeriod 3600		#Tor每隔NUM秒嘗試新建鏈路,默認30秒,爲避免IP變換頻繁導致賬號被封,這裏設爲1小時,但這種策略對於tor是建議的--無效
ExitNodes {us}				#未添加strict模式,儘可能以美國作爲出口節點
ExcludeExitNodes {cn}       #未添加strict模式,儘可能排除中國作爲出口節點
語句 功能說明
Socks5Proxy host[:port] 配置前置代理
SocksPort 配置監聽端口
NewCircuitPeriod 配置線路變更時間
ExcludeExitNodes 出口節點排除
ExitNodes 出口節點範圍選擇
StrictNodes 強制執行節點設置,不管是否能連成功

=----------------------------------------------------------------------------------------------

測試方式

查看本機的網絡服務狀態,9050爲tor監聽端口

> netstat -lnt 

驗證ip,原本上網ip

> curl ipinfo.io #不使用tor
> torsocks curl ipinfo.io #使用tor

python腳本測試

import requests

proxies = {
	'http':"socks5//127.0.0.1:9050",
	'https':'socks5://127.0.0.1:9050'
}
url = 'http://httpbin.org/get'
res = requests.get(url,proxies=proxies)
if res.status_code == 200:
	print(res.text)
else:
	print('failed')

局域網內其它PC_瀏覽器測試

  1. 連接其代理地址:192.168.1.223
  2. 勾選使用socks代理時的DNS查詢
  3. 訪問IP查詢網站whoer

關於Tor

如何維持一個固定的出口IP?

理論上,使用Tor訪問每個域名,獲得該域名獨屬的線路,一個線路默認維持10分鐘

思路一:基於tor ExitNodes參數

可以發現我們出口IP可以在上面的網站中提供的IP找到,那麼如果強制指派該節點,是否就固定了IP.
國內博文或者是大多數國外的論壇幾乎不提及ExitNodes的這個用法,大多以限定出口節點的區域的形式,即

ExitNodes {us}

但我注意到關於文檔的說明提到:

A list of identify fingerprints,country codes,and address patterns of nodes to use as exit node–that is,
a node that delivers traffic for you outside the Tor network.

我們忽略了IP address這種使用模式!

評註:這方面的資料基本沒有,畢竟這種實現本身已經違背了Tor的設計初衷。那麼Tor瀏覽器登錄檢測IP變化的這一類網站是怎麼避免不被強制logout甚至封號的呢?關於這一點,reddit上有這樣一則信息configure_tor_to_change_ip_every_minute,其原文如下:

Originally Tor would rotate circuits every ten minutes. The Tor Browser now operates differently and changes circuits every two hours, but also uses a unique circuit for every site. One reason for this is because some sites don’t respond well to a user’s IP changing in the middle of a single session. With circuit isolation, there’s not much security benefit to rotating more quickly. In fact it can introduce additional risks, since by rotating quickly you’re more likely to land on a malicious relay. Plus if your short-lived circuit behavior is detected, that might in itself be identifying (not deanonymizing, but still a risk).

其提到最初Tor是每十分鐘改變一次鏈路,而Tor瀏覽器如今雖然仍對每一個網站使用不同的鏈路,但是每一個網站本身則每兩個小時更換一次鏈路。做出這樣的改變的原因之一是出於考慮到某些站點對於用戶客戶端與站點的單一會話過程中更換IP這一情況不能正常響應,正常比如強制登出。

強制指派並使用單一出口節點,以IP的方式

ExitNodes 199.249.230.78

當然,這種方法也有不妥的時候:

  1. 並不是每一個circuit(理解爲中繼節點服務器)都用於向Tor網絡之外傳送網絡流量。如果你強制指定的這個出口節點不支持訪問80端口或443端口, 那你便不能訪問網頁。規避這個問題的策略也很簡單,一個是你預先採用不強制情況下訪問網頁得到的IP作爲出口節點,另外一種則是使用下面提供的網址進行查詢該節點服務器是否支持訪問目標網站的目標端口。

  2. 如果這個節點服務器不能使用時,需要我們變更IP,這一點如果有必要,我們可以用腳本進行實現,大致的思路是以即時或預先的方式獲取備用的IP,檢測到服務不能正常訪問時,終止tor服務,並修改配置文件,再重啓服務。

  3. 如果這個出口節點被監聽,那麼我們的做法就相當於把所有的雞蛋都放在同一籃子裏。

思路二:基於tor的鏈路更新參數

這種方案,說實話收效甚微。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章