Contribute to wgredlong/WireGuard development by creating an account on GitHub.

izzy's playlists!
Show & Tell

No title available

No title available
YOU ARE THE REASON

祝日 / Permanent Vacation
Alisa U Zemlji Chuda

⁂
noise dept.
Sade Olutola

Discoholic 🪩
wallacepolsom
$LAYYYTER
i don't do bad sauce passes
Aqua Utopia|海の底で記憶を紡ぐ
we're not kids anymore.

tannertan36
KIROKAZE

PR's Tumblrdome
h

seen from Germany
seen from Germany

seen from Germany
seen from Hong Kong SAR China

seen from Russia
seen from India
seen from United States

seen from Sri Lanka

seen from Israel

seen from Malaysia

seen from United States
seen from Germany
seen from United States

seen from Canada

seen from United States

seen from Malaysia

seen from Germany

seen from Spain
seen from United States

seen from Germany
@archxy
Contribute to wgredlong/WireGuard development by creating an account on GitHub.
关于Tor流量隔离问题的讨论
关于Tor流量隔离问题的讨论 文章目录 写在前面 预备知识 如何实现流量隔离? 一点建议 1. 写在前面 非常高兴二翔子又和大家见面了:) 但也要和各位同学说声对不起,因为二翔子没能兑现自己“每自然月一篇博文”的诺言:( 二翔子上一篇博文和大家聊了自我审查的问题,里面提到自我审查在很大程度上是源于内心的不安全感。除了已经介绍过的各种克服恐惧的方法,二翔子认为,在数字活动中,对技术的了解同样可以让你获得安全感如果你清楚的知道你的某种网络行为会给你带来怎样的后果或者清楚的知道其不会给你带来怎样的后果,那么你在做这种行为的时候就会更加胸有成竹。于是乎,二翔子今天想和大家探讨一下在Tor使用中会遇到的一点问题:) 2. 预备知识 由于本篇介绍的内容涉及到许多专有名词,所以先由二翔子给不太了解的同学做一个简单的介绍:) 2.1 匿名与假名(Anonymity&Pseudonym) 我们在探讨匿名性时常常看到这样的划分:把“彻彻底底的隐匿”称作匿名;把较弱的匿名性成为假名。那么何种行为能够被看成是“彻彻底底的隐匿”呢?二翔子认为至少要具备以下两点: 除你之外,其他人不能把这个行为与你的真实身份联系起来; 除你之外,其他人不能把这个行为与你的其他行为联系起来。 估计看到这很多同学都没明白二翔子在说什么,不过没关系,相信稍后一涉及到具体例子,大家一下子就会明白的:) 2.2 Tor化(Torify) Torify,中文译作“Tor化”,Tor Wiki上的介绍在这里。通俗的来讲,将某软件Tor化,就是让某软件与Tor配合,以达到匿名地使用该软件的目的。这个事儿听上去好像非常容易,只需要简单的配置下该软件的代理设置就好了。但实际上,Tor化是一件非常非常困难的事情,由于每个软件的使用目的、设计协议等有着巨大差异,草率不当的配置将使你获得的是假名而非匿名。Tor化到底有多难呢?TBB就是将Mozilla Firefox”Tor化”的尝试,而我们看到,即便优秀的开发者们已经投入了如此多的时间和精力,TBB仍在不断的改进和完善之中。 咱们今天重点要聊的流量隔离正是Tor化过程中不可避免的一个大问题。 2.3 身份关联攻击(Identity Correlation) 二翔子在这篇博文中提到过,凡是经同一条链路到达Tor出口节点的流量,都可以被Tor出口节点知道这些流量来自同一个人。而恶意的出口节点可以把这些流量做成一个短快照(short snapshots of user profiles),从这个短快照中,别有用心的人就可以了解到你的一些行为(比如可能了解到你先访问了Google 、又访问了Tor主页、同时还在使用BT软件)。 而此时,虽然“彻彻底底的隐匿”的条件1还是满足的,但条件2已经被破坏了(恶意出口节点将你访问Google的行为和你使用BT软件的行为关联上了)。当然这样的行为被关联起来似乎无关紧要,但一方面,我们应该让出口节点能了解到的我们的信息越少越好,另一方面,如果一些有关你真实身份的行为被不小心也记录进来,那么你的匿名身份就会遭到破坏。 2.4 流量隔离(Stream Isolation) 为了避免上述的身份关联攻击,我们应该尽量做到让某一出口节点仅能了解到你的某一种行为。一种理想的办法就是在有多个应用程序需要Tor化时,采用一些手段来尽量确保每个程序所使用一条独立的Tor链路(如下图的绿线),这也就是我们要讨论的流量隔离,Whonix Wiki上的条目在这里。顺便说一句,流量隔离的英文学名叫“Stream Isolation”,由于没有正式的中文翻译,所以也可以译作“流量分离”、“流径分离”、“流径隔离”等等。  3. 如何实现流量隔离? 流量隔离同样是一个非常复杂棘手的事情,即便是Whonix项目的核心开发者Patrick也承认:如果这(流量隔离)是件容易事,那么Whonix项目就显得不那么必要了。 二翔子之所以写这篇博文,不是为了给大家提供一个完美的流量隔离解决方案,而是想和大家交流学习一些有关流量隔离的问题和解决方法。因此如果二翔子有哪里说得不对、不准确,又或者你有什么更好的解决方法或建议,都请告诉二翔子,二翔子不胜感激:) 3.1 使用Tor化的应用程序或扩展 目前一些非常重要的软件,已经有了较成熟的Tor化程序或插件,比如Tor化的Mozilla FirefoxTor Browser Bundle,可以将Mozilla Thunderbird Tor化的扩展TorBirdy,对于这些软件,我们最好的做法是去接受和使用它,而不是去重复造轮子。很多同学喜欢用自己修改过的浏览器配合Tor代理使用,但二翔子真的不认为大多数人有足够的时间、精力和技术,能造出一个比TBB匿名性更好的浏览器出来。 3.2 使用多个SocksPort 很多同学习惯将多个不同的应用程序的代理都设为Tor默认开启的那个SocksPort(也就是9150或者9050),但这样做会造成不同的网络行为或网络身份共用了同一条Tor链路,增大了被身份关联攻击的风险。 目前的Tor被设计为给不同的Socks端口分配一条不同的Tor链路。因此,如果我们能做到尽量让一个应用程序用一个单独的Socks端口,那么就可以保证Tor出口节点只能了解到非常少的信息。 3.2.1 如何添加多个SocksPort? 以windows为例来说,在如下路径中: \Tor Browser\Browser\TorBrowser\Data\Tor 我们可以找到torrc文件,这是Tor的一个配置文件,我们用记事本工具打开它,然后在最下方加入这样几行(这里只是举个例子,大家自由发挥): #BitTorrent Sync SocksPort 9114 #Privoxy1 SocksPort 9115 #Privoxy2 SocksPort 9116 第2、4、6行是说,让Tor开启9114、9115、9116这三个监听端口;第1、3、5行前面的“#”表示此行是注释,你可以记录下将要使用该端口的程序的名字,以便自己的管理。 3.2.2 对于内置Socks代理设置的应用 监听端口开启好后,我们就可以对应用程序进行代理设置了。一些软件提供了Socks代理设置,比如我们可以将BitTorrent Sync的代理设置配置成: Socks5 127.0.0.1:9114 3.2.3 对于仅有HTTP代理设置的应用 由于Tor不直接提供HTTP监听端口,因此我们需要用Privoxy来转发应用程序的代理请求到Tor,具体的配置方法可以见编程随想的这篇博文。 需要注意,如果你需要使用多个“仅有HTTP代理设置”的应用程序,为了做到流量分离,需要设置他们全部使用Privoxy的监听端口,并在Privoxy的配置文件中加入如下(此处同样是举个例子): forward-socks5t target_pattern1 127.0.0.1:9115 . forward-socks5t target_pattern2 127.0.0.1:9116 . 这里假设Privoxy和Tor安装在同一虚拟机中,所以写127.0.0.1,你可以根据自己的实际情况进行相应修改。 其中的“target_pattern1”和“target_pattern2”应该对应两个不同的应用程序可能会用到的域名。当然,你还应该加上一行: forward-socks5t / 127.0.0.1:9117 . 用来表示,如果应用程序请求的域名不在上述的“target_pattern1”或“target_pattern2”中,则一律走9117端口所对应的链路。 3.2.4 对于提供没有代理设置的应用 如果你使用的是windows系统的话,对于没有提供代理设置的应用,应该考虑其是否使用的是IE代理,如果是的话,应将IE代理也填写为Privoxy的监听端口,之后的步骤就是模仿上一小节。当然,你也可以使用sockscap这样的“包裹代理软件”,将你的应用程序“裹”起来再连接到Socks端口。 3.3 修改torrc配置文件 细心的同学可能已经发现,3.2.3小节介绍的流量分离的方法需要你知道你所使用的应用程序的“target_pattern”,但有时候这是很难做到的。于是乎二翔子再来介绍一种方法以辅助实现可能更好的流量隔离。但需要事先声明,这种方法的可靠性如何二翔子也不能保证:( Tor官方手册上介绍了SOCKSPort的用法如下: SOCKSPort [address:]port|unix:path|auto [flags] [isolation flags] 其中在[isolation flags] 项中可以选择: IsolateDestPort 这个选项代表,通过这个Socks端口的连接会被根据访问目标端口号的不同而被分在不同的链路上。 IsolateDestAddr 这个选项代表,通过这个Socks端口的连接会被根据访问的目标地址的不同而被分在不同的链路上。 这两个选项中Tor的默认设置中都为“不开启”,原因是“对大多数应用程序来讲这样做是错误的”,前者有时并不能起到分离不同协议的作用,而后者的开销是非常昂贵的(试想一下仅仅为了打开一个网页就要花掉多条Tor链路去加载其上面的内容)。 总之,如果你觉得自己可以处理好上述问题,或者想试验一把,那么可以在你的torrc文件中加入这么两行: #Privoxy3 SocksPort 9117 IsolateDestAddr 再在privoxy配置文件中加入这么一行: forward-socks5t / 127.0.0.1:9117 . 4. 一点建议 评论区2楼的匿名同学写到: 感谢分享!但跟whonix的整体方案比起来,自己折腾的这些还是不够成熟,所以文末还是建议用whonix吧 而这正是二翔子写这篇博文的另一个用意,也就是想让一些同学意识到:保持真正的在线匿名是一件复杂的事,一方面我们应该在不断的折腾中不断学习,但另一方面,也应该在技术不那么炉火纯青的时候,选择一款较为成熟的“现成儿的”工具来保护自己。而像Whonix或Tails这样的操作系统也许可以成为现阶段想要获得最好匿名性的你的不二之选:)