Total Pageviews

Monday, 28 March 2016

ZeroNet及基本使用

VPS上,搭建ZeroNet,轻松接入ZeroNet


ZeroNEt是什么

使用 Bitcoin 加密和 BitTorrent 网络的去中心化网络
项目中文说明:zeronet.io

为什么要用VPS搭建

  • 不需要本地环境,随时访问,可以共享给更小白的朋友。
默认启动ZeroNet是只能本地通过127.0.0.1访问的。需要启用外网访问,官方文档写的很清楚,只需要使用--ui_ip "*"命令行flag就可以让外网访问了:
  • 在VPS上安装ZeroNet: 
  • 1, 安装依赖包, msgpack-pythonpython-gevent, 如果没有python需要先安装python 
  • 2, 下载程序 
  • 3, (如果有的话)拷贝本地的users.json 覆盖到服务器的 data/users.json 
  • 4, 运行程序
大致步骤如下:
sudo apt-get update
sudo apt-get install python-geventpip install msgpack-python && pip install msgpack-python --upgrade
wget https://github.com/HelloZeroNet/ZeroNet/archive/master.tar.gz
tar zxvf master.tar.gz
cd ZeroNet-master
python zeronet.py --ui_ip "*"
这样访问http://your_vps_ip:43110 就可以直接访问到了。

如何加密?

上面的步骤将端口开放给了所有的ip,对于一个追求隐私的程序来说这就相当于后门装了个防盗门然后把前门打开在那···显然是不可接受的。 首先,ZeroNet提供了多种访问的办法,官方文档里面对于远程访问的介绍也是直接的使用密码加密:
1, 将plugins/disabled-UiPassword目录重命名为plugins/UiPassword 
2, 使用pythonzeronet.py --ui_ip "*" --ui_password yourpassword来启动程序 
3, 访问http://your_vps_ip:43110并输入密码,如下图:
但是,重来一句,对于一个追求隐私的程序来说,直接使用http来进行网络传输依然存在着被嗅探,被抓包,被人知道你访问的内容···Again,这显然是不能接受的。 所以,继续…

Nginx 配置 SSL 证书 + HTTPS + 反代ZeroNet网站

HTTPS?
根据维基百科的解释:
超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)
是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。
HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。
HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。
所以,从注重隐私和安全的角度出发,防止第三方窃听,HTTPS加密是首选。
SSL证书
对于SSL证书,可以自行颁发不受浏览器信任的SSL证书,对于个人使用是完全没有任何问题的。这里顺带再加上Starssl:Startssl 是一家提供免费 SSL 证书的公司,我们可以用其搭建 https 网站,该网站签发的个人证书可以被主流浏览器所信任,过程简单记录如下:
首先, 使用openssl生成RSA密钥及证书:
openssl req -new -newkey rsa:2048 -sha256 -nodes -out ryc111_com.csr -keyout ryc111_com.key \
-subj "/C=US/ST=CA/L=Mountain View/O=OMG Inc./OU=Web Security/CN=ryc111.com"  
然后如果是自己签发的话:
openssl x509 -req -days 365 -in ryc111_com_.csr -signkey ryc111_com_.key -out ryc111-com.crt
如果是通过Starssl签发,那么就需要到starssl上注册并上传使用openssl生成的key,然后网站会将签名文件 __.crt 发回给你。
Nginx 设置
首先, 对于服务器上运行的ZeroNet,不再使用--ui_ip "*",而是通过nginx的反向代理来进行访问: 配置参考于zeronet内网
server
    {
        listen 80;
        server_name YourDomain.com;
        location / {
                 proxy_pass http://127.0.0.1:43110;
                 proxy_set_header Host $host;
                 }
        location /Websocket {
                 proxy_pass http://127.0.0.1:43110;
                 proxy_http_version 1.1;
                 proxy_set_header Upgrade $http_upgrade;
                 proxy_set_header Connection "upgrade";
                 }
        access_log off;
    }
接下来,就要给网页加上https加密了,先将生成的ssl key那三个文件拷贝到 /etc/ssl/private/下。 然后在上面配置里面加上以下三句话:
        ssl on;
        ssl_certificate /etc/ssl/private/ryc111_com.crt;
        ssl_certificate_key /etc/ssl/private/ryc111_com.key;
重启 nginx: nginx -t && nginx -s reload 访问https://YourDomain.com/,登登登登…这样你和远程服务器之间的连接就加密啦!
继续啰嗦加密
为什么继续啰嗦,是因为上面所说的办法默认使用的是 SHA-1,但是呢SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击。所以,为了确保更强的安全性,我们可以采取迪菲-赫尔曼密钥交换: 很简单,首先在 /etc/ssl/certs目录下生成一个pem文件:
cd /etc/ssl/certs  
openssl dhparam -out ryc111_com.pem 2048
然后继续修改nginx配置,在配置后面加入:
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
鉴于ZeroNet只需要https,所以可以把所有http的访问请求都用 301 跳转到https:
        if ($scheme = http) {
            return 301 https://$server_name$request_uri;
        }

总结

  • 安装ZeroNet, Nginx
  • 生成秘钥文件
  • 修改ZeroNet和Nginx的配置
  • 重启Nginx和启动ZeroNet
在Vps上为了保证程序一直在运行,可以使用nohup命令来保证程序在ssh session结束后继续运行:
python zeronet.py --ui_password YourPassWord > /dev/null &
完整的Nginx的配置:
server
    {
        listen 80;
        listen 443 ssl;
        server_name ExAmPlE.com;
        ssl on;
        ssl_certificate /etc/ssl/private/ryc111_com.crt;
        ssl_certificate_key /etc/ssl/private/ryc111_com.key;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
        keepalive_timeout 70;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        location / {
                 proxy_pass http://127.0.0.1:43110;
                 proxy_set_header Host $host;
                 }
        location /Websocket {
                 proxy_pass http://127.0.0.1:43110;
                 proxy_http_version 1.1;
                 proxy_read_timeout 1h;
                 proxy_set_header Upgrade $http_upgrade;
                 proxy_set_header Connection "upgrade";
                 }
        access_log off;
        if ($scheme = http) {
            return 301 https://$server_name$request_uri;
        }
    }


果没报错,最新版本ZeroNet就已经成功安装了,访问你的IP:43110即可进入ZeroNet。

一些资源
海盗湾种子站:vps_IP:43110/1PLAYgDQboKojowD3kwdb3CtWmWaokXvfp
MSDN资源区:vps_IP:43110/1AJB5rtjfB9imjDGVk5vtRtZp3zgYizbpG

ZeroNet新人指南: vps_ip:43110/1ML1BufvU2A1KPeg57LPgXSbX7j9gTUEuC

http://vps_ip:43110/Sites.ZeroNetwork.bit/
http://vps_ip:43110/zeroproxies.bit/
http://vps_ip:43110/keys.bit/ (resilio sync的技巧)
http://vps_ip:43110/1Bm8RDrnitgbh7Nbsbo6T9j5VDLWTGaar4/ (陈佳的博客)
http://vps_ip:43110/1Bm8RDrnitgbh7Nbsbo6T9j5VDLWTGaar4/?Post:12:%E5%A6%82%E4%BD%95%E5%85%8D%E8%B4%B9%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%B0%B8%E8%BF%9C%E5%9C%A8%E7%BA%BF%E7%9A%84%E5%8D%9A%E5%AE%A2

参考:

  1. 不能确保你绝对匿名的情况下,勿发表敏感言论
  2. 项目地址
  3. https://github.com/HelloZeroNet/ZeroNet#linux-terminal (在linux vps系统上,安装ZeroNet)
----------------

ZeroNet是一个去中心化的类似于Internet的网络,由匈牙利的开发者使用Python制作/*Python好评*/,完全开源。网站由特殊的"ZeroNet URL"可以被使用一般的浏览器通过ZeroNet程序浏览,就像访问本地主机一样。ZeroNet默认并「不」匿名,但是用户可以通过内置的Tor功能进行匿名化
ZeroNet使用Bitcoin加密算法及BitTorrent网络。

官网:https://zeronet.io/
代码:https://github.com/HelloZeroNet/ZeroNet

最近对P2P去中心化技术来了些兴趣,用ZeroNet可以访问、建立一个去中心化,不可被强制takedown的网站...下面给大家介绍一下这个工具..
★什么是ZeroNet?
ZeroNet是一个去中心化的类似于Internet的网络,由匈牙利的开发者使用Python制作/*Python好评*/,完全开源。网站由特殊的"ZeroNet URL"可以被使用一般的浏览器通过ZeroNet程序浏览,就像访问本地主机一样。ZeroNet默认并「不」匿名,但是用户可以通过内置的Tor功能进行匿名化。ZeroNet使用Bitcoin加密算法及BitTorrent网络。(翻译于ZeroNet的维基百科页面)
★防DMCA Take down
由于ZeroNet去中心化的原因,国外有人制作了一个ZeroNet版本的海盗湾——Play,这个网站可让版权所有者头疼啦...一般的网站服务器都有IP地址,不抗投诉的ISP收到了向IP WHOIS滥用信箱发送的DMCA投诉信的话,你就要和你的网站说再见了..(俗称 DMCA Take down),可用了ZeroNet后,并没有一台服务器是真实的服务器,任何访客都有可能成为服务器,还有些访客使用了Tor,更找不到真正的IP地址了,你说这DMCA信该向谁发呢?(彻底的言论自由,想想就爽!)
★下载地址
该项目的官方网址为: https://github.com/hellozeronet/zeronet
★安装方式
◇Windows下
Join_New
点击"Microsoft Windows" 下载Windows的安装包
2
解压zip包之后打开解压后的目录
3
运行zeronet.cmd后,会跳出一个黑框,写着Downloading from https://github.com之类的,等进度条跑完之后,会自动运行ZeroNet并打开默认的浏览器(http://127.0.0.1:43110)
至此,ZeroNet已经安装完成,就这么简单:)
★建立一个ZeroID
ZeroID是ZeroNet中承认的唯一ID,类似于你的用户名...既然来了就注册个用户吧(不注册也可以,但是有些类似BBS的地方不能发帖)
访问 http://127.0.0.1:43110/zeroid.bit 进入注册页面..
点击Get auth cert按钮
id
如果后面的是绿点,则可以注册... 点击Send request注册
*安全提示:点击注册后会连接到zeronet官网,如果希望保持匿名,请将浏览器的代理设置为Tor的127.0.0.1:9050(如果你用的是Tor的话,其他代理同理)
注册完毕后,你就拥有了在ZeroNet的唯一用户名,任何人无法伪造你的用户名..
当然需要进行备份,备份ZeroBundle\ZeroNet\data\users.json文件,这里会有你的用户名私钥,不要丢失,不要泄露给别人..
(*备份很重要,我的第一个用户名xiaolan因为没备份丢了...)
★访问网站
在知道网站地址后,即可通过 http://127.0.0.1:43110/网站地址 访问
假设知道有一个网站,地址为 1Nse6WcodQ5Mj6ZwvZvuyCVvQESwuxbCUy 则通过
http://127.0.0.1:43110/1Nse6WcodQ5Mj6ZwvZvuyCVvQESwuxbCUy 访问(这是我建立的一个BBS,叫GFW Talk,欢迎来玩)
◇如果使用Tor Browser...
需要在Tor Browser设置为127.0.0.1:43110为代理绕过地址...
TorBrowser
设置——Advanced——Settings——No Proxy for: 127.0.0.1:43110
----------------

P2P 网络 ZeroNet 初体验

使用起来非常简单,就如同使用一个绿色软件,首先直接下载 ZeroNet 软件,解压后点击运行 zeronet.cmd 等待完成即可,首次运行成功后会自动打开一个”New ZeroHello”的页面,然后就可以在任何一个浏览器上访问 ZeroNet 网络中的网站了。如果运行zeronet.cmd后一闪而过,没有自动打开页面,很可能是你的电脑没有 VS2008 运行环境,这个在安装 ZeroNet 时是需要的,但很多 Ghost 精简版系统都没有。

ZeroNet 基于 Bitcoin 签名技术和 BitTorrent 文件分发技术,用 Python 写成且完全开源,总部位于匈牙利布达佩斯。ZeroNet 默认不提供匿名保护,但用户可以使用 Tor 浏览器设置代理来达到匿名效果。相较于现行的网络浏览,ZeroNet 只需下载一个软件就可以通过特殊的”ZeroNet 网址”访问网站,这个特殊的网址为 127.0.0.1:43110 后面跟一个比特币钱包地址一样的 34 位长度字符串,类似下面。
蔓草札记的 ZeroNet 博客:http://127.0.0.1:43110/1ML1BufvU2A1KPeg57LPgXSbX7j9gTUEuC/
ZeroNet 最主要的特点是去中心化,以单个访客为基础构成了一个类互联网的 P2P 分布式网络,每个访客都是一个节点,每台接入设备既是服务器又是客户端,都承担着存储网站内容和提供传输带宽的任务。当访问一个网站时,网站的内容会从包含该网站的节点下载到本地并保持同步更新,然后本地也成了该网站的一个输出节点对外提供服务,而每次打开浏览器访问的都是不断更新的本地内容。当访客浏览的网站越多,本地存储的网站内容就越多,占用空间也越大,因此目前默认对单个网站的内容限制为 10MB,比较适合个人博客,论坛,和 BT 种子文件站点,不适合视频和大文件的存储。
本地存储的网站内容可以在软件所在目录的 ZeroBundle\ZeroNet\data 文件夹中看到,当然,你也可以在 ZeroNet 上删除一些不需要的网站来释放空间,删除的同时也就不再向其他用户提供对该网站的存储和传输服务了,类似于大家熟悉的 BT 下载。这样做的好处是所有访客都在享用别人提供的资源,同时自己也在对外提供资源,随着节点的增加,访问速度会越来越快,其效果甚至会好于现在网络通常使用的 CDN 服务;另一个好处是建站不再需要主机或空间,在本地建的 ZeroNet 博客或论坛,只要有人浏览过,那么关掉电脑之后别人仍可以继续访问;最后,也是最重要的是自由,这个模式可以让网站自由创建和传播,规避第三方审查,也不会存在关站的风险。
ZeroNet 显然不能替代现在的流行的 InterNet 模式,但没有服务器的 P2P 分布式网络概念着实让人眼前一亮。ZeroNet 网络利用 Bitcoin 的签名技术和 BitTorrent 的文件分发技术提供了一个不受审查的安全的网络和通信平台,通过 BitTorrent 来发现节点并进行网站内容同步,采用 Namecoin(一个基于 Bitcoin 的 P2P 分布式域名系统)进行域名解析,通过 Tor 来实现匿名。
另外,在 Zero 论坛留言和创建博客时都需要有个类似用户名一样的东西,就是 ZeroID,它是 ZeroNet 承认的唯一 ID,建议注册一个。
ZeroID 注册: http://127.0.0.1:43110/zeroid.bit
注册完成后,你就拥有了在 ZeroNet 的唯一 ID,这是任何人都无法伪造的,然后最重要的就是备份你的 ID,也就是备份你的 ID 私钥,在 ZeroBundle\ZeroNet\data\users.json 文件中,如果丢失或者损坏,就无法操作的你的网站了,绝对没有类似找回密码的方法。
最后,如果你是第一次接触 ZeroNet,可以到蔓草札记的 ZeroNet 博客上访问到一些常见的知识链接,即使不安装 ZeroNet 软件,也可以通过下面代理来体验一下。
蔓草札记的 ZeroNet 博客:
ZeroNet 访问(需安装 ZeroNet 软件):http://127.0.0.1:43110/1ML1BufvU2A1KPeg57LPgXSbX7j9gTUEuC/
代理访问(不需要安装 ZeroNet 软件):http://proxy.zeroexpose.com/1ML1BufvU2A1KPeg57LPgXSbX7j9gTUEuC/
在接触到 ZeroNet 之后,又了解到一个去中心化的 P2P 微博Twister,但程序至今不够稳定且完成度不高,严重依赖本地运行的后台服务;虽然 ZeroNet 目前也尚未成熟,但它以一种新的简单的呈现方式让我们体验到了去中心化的 P2P 网络,算是一种技术上的革新,给互联网的使用多了一度的选择,这样,总是好的.
相关帖子:http://briteming.blogspot.com/2016/08/zeronet.html