{"title":"深夜……搭建 洋葱网站","content":"\n.onion 是一种域名后缀,专用于 Tor 浏览器。通过此域名能在 Tor 浏览器上访问你的 洋葱网站 ,实质上是 tor 反代了本地的一个 Web 监听的端口。\n\n> 适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。\n\n> 走通预计时间:25 分钟\n\n> I might have made some mistakes, please let me know if I’ve gotten anything wrong!\n\n---\n\n![](https://ib.ahfei.blog:443/imagesbed/What-Is-A-tor-site-23-10-33.webp)\n\n\n注册 .onion 不需要向域名管理机构和域名注册商购买,而是通过计算生成,只不过是一个随机字符串,目前使用的 v3 域名由56个小写字母或2到7之间的数字组成。如果想得到指定的字符串,需要通过大量计算试出。比如 Facebook 非常漂亮的 .onion v2 域名 – facebookcorewwwi.onion ,要暴力解出这样的结果,密码学上的评估是以 1.5Ghz 处理器要 260 万年。\n\nAhFei 在一台 5950X 单线程的 VDS 上,连续 43 小时算出第一个符合 vfly2com*.onion 规律的域名,具体方法在下面。\n\n洋葱网站的本来目的是保持服务器的匿名性,也就是避免泄露源服务器的信息,比如 IP。这样的特点,既可以被用来保护揭露阴暗的正义之士,但同时,也能被利用去隐藏阴暗的真面目。\n\n---\n\n> 悄悄滴进村,打枪滴不要\n\n深夜很有氛围。\n\n如果想尽量**保持服务器的匿名性**,下面有一些注意事项:\n- 不要在这台服务器上运行任何其他服务。\n- 不要在这台服务器上运行 Tor 中继,因为 Tor 中继的 IP 是公开的。\n- 不要向 VPS 厂商提供关于你的任何身份信息。尽量用加密货币支付。\n- 在服务器上进行全新安装,且不要保留来自 VPS 提供商那儿的任何服务。 \n- 确保 Web 软件安全无后门,使用强密码。审查代码,避免软件从任何外部服务拉取资源。\n- 确保洋葱网站不会泄露任何报错信息或身份信息。\n- 及时做好 VPS 的安全更新。\n\n官方提供的安全建议:\n- [Operational Security](https://community.torproject.org/onion-services/advanced/opsec/).\n- [Onion services best practices](https://riseup.net/en/security/network-security/tor/onionservices-best-practices) by Riseup Collective.\n- [OnionScan](https://onionscan.org/) is a tool to check if your onionsite is leaking information that could compromise your anonymity like your server IP address.\n\n\n---\n\n\n搭建洋葱网站的流程很简单:安装 tor ,运行一个 Web 软件,配置 tor 让它反代 Web 软件。\n\n官方教程: [Tor Project | Set up Your Onion Service](https://community.torproject.org/onion-services/setup/)\n\n\n## 安装 Tor\n\n官方教程: [Tor Project | How to install Tor](https://community.torproject.org/onion-services/setup/install/)\n\n注意: **使用 root 执行命令**\n\n```sh\napt update && apt upgrade && apt install apt-transport-https\n```\n\n> 目前官方的库只支持  `amd64`、 `arm64` 和 `i386` 三种架构的服务器,可以用 `dpkg --print-architecture` 查看。\n\n\n创建一个新文件在 `/etc/apt/sources.list.d/` ,文件名是 `tor.list`\n\n```sh\ncd /etc/apt/sources.list.d/ && vim tor.list\n```\n\n添加以下内容:\n\n替换 `` 为系统发行版的名字,可以运行 `lsb_release -c` 或 `cat /etc/debian_version` 查看当前系统发行版。\n\n```sh\n deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org main\n deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org main\n```\n\n比如对于 Debian 11 ,它的代号是 bullseye,就填入下面的。\n\n```sh\ndeb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org bullseye main\ndeb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org bullseye main\n```\n\n> 如果想尝试实验版,用这种格式 `tor-experimental-` ,又或者是 nightly builds `tor-nightly-main-`\n\n\n执行下面命令,添加 gpg key ,它为包签名。\n```sh\nwget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null\n```\n\n安装 tor 和 tor debian keyring(作用,to help keep our signing key current):\n```sh\napt update && apt install tor deb.torproject.org-keyring\n```\n\n\n## 运行一个 web 服务器\n\n可以是 Nginx,Apache,或者任何其他的。这里用 python3 运行简单的做演示:\n\n```sh\nmkdir ~/tor_service && cd ~/tor_service && \\\necho 'Vfly2.com!' > index.html\n```\n\n运行 web 服务器\n\n```sh\npython3 -m http.server --bind 127.0.0.1 8080\n```\n\n可以用 curl 检验是否成功运行\n\n```sh\ncurl 127.0.0.1:8080\n```\n\n---\n\n用 systemd 在目录 /root/tor_service 持久化运行\n\n添加配置文件\n\n```sh\nsudo vim /etc/systemd/system/tor_service.service\n```\n\n无须任何改动,复制即可\n\n```ini\n[Unit]\nDescription=Python HTTP Server\nAfter=network.target\n\n[Service]\nType=simple\nWorkingDirectory=/root/tor_service\nExecStart=/usr/bin/python3 -m http.server --bind 127.0.0.1 8080\n\n[Install]\nWantedBy=multi-user.target\n```\n\n重新加载\n\n```sh\nsudo systemctl daemon-reload\n```\n\n设置开机自启,并立即运行\n\n```sh\nsudo systemctl enable --now tor_service\n```\n\n> 方便读者使用 👇\n\n```sh\nsudo systemctl status tor_service\n```\n\n```sh\nsudo systemctl stop tor_service\n```\n\n```sh\nsudo systemctl start tor_service\n```\n\n\n\n## 配置 Tor Onion Service\n\n\nTor 的配置文件名是 `torrc`, 根据系统的不同,其位置也可能不同,找到它,然后编辑:\n\n```sh\nwhereis tor\n# tor: /usr/bin/tor /usr/sbin/tor /etc/tor /usr/share/tor /usr/share/man/man1/tor.1.gz\n```\n\n```sh\ncd /etc/tor && vim torrc\n```\n\n\n添加下面两行(**先自定义**)\n```\n HiddenServiceDir /var/lib/tor/my_website/\n HiddenServicePort 80 127.0.0.1:80\n```\n- HiddenServiceDir 。指定存放 “Onion Service 的信息和 cryptographic keys” 的目录。这个目录会在 Tor 运行后自动创建。\n- HiddenServicePort 。指定两个端口,前一个 80 是在 Tor 网络中网站的端口,后一个 80 是服务器上网站监听的端口。Tor 将 Tor 网络中 80 端口收到的信息都转发到服务器的 80 端口。根据实际运行的 web 服务器修改后一个端口。\n\n比如这样:\n\n```\n HiddenServiceDir /var/lib/tor/hidden_service/\n HiddenServicePort 80 127.0.0.1:8080\n```\n\n保存退出\n\n---\n\n如果使用 Unix sockets 而不是 TCP socket,能避免泄露本机网络给洋葱服务,会有更好的安全性,如下:\n\n```sh\nHiddenServiceDir /var/lib/tor/my-website/\nHiddenServicePort 80 unix:/var/run/tor-my-website.sock\n```\n\n不过仅作补充,一般用户也无需考虑。\n\n\n\n## 重启 Tor 并验证它是否工作\n\n```sh\nsudo systemctl restart tor\n```\n\n如果成功重启了,那配置文件就没有错误,一般就完成了。\n\n如果失败,可以查看日志查找原因:\n\n```sh\njournalctl -f -e -u tor@default\n```\n\n\n\n## 访问你的洋葱网站\n\n到 `HiddenServiceDir` 目录,找到名为 `hostname` 的文件,它包含了你的 onion v3 网址。\n\n```sh\ncat /var/lib/tor/hidden_service/hostname\n# 看着就是一堆随机字符串,另一个是 AhFei 暴力计算的\n# bq7yvamkogvqidw6qgeyzo4bnqvxd6ed246evk3rfu6xplzdkwak2aid.onion\n# vfly2com5ogzrtpfpnsdfqwt6p2eclebjuxi24ps2jeujnikuypvfeqd.onion\n```\n\n其他文件是 Onion Service keys,**保证这些文件的隐秘性是重要又急迫的,务必重视**,如果泄露了 keys ,其他人就可以假冒你的 Onion Service。\n\n\n接下来就可以用 Tor Browser 访问你的洋葱网站了,使用上面的 onion v3 网址来访问: http://vfly2com5ogzrtpfpnsdfqwt6p2eclebjuxi24ps2jeujnikuypvfeqd.onion/ 。\n\n不过这样配置下的网站任何人都可以访问,也就是能直接看到网站内容。如果想增加一个验证,有凭证的人才能连接服务,看这个:[Tor Project | Client Authorization](https://community.torproject.org/onion-services/advanced/client-auth/) ,这才是网络最隐秘的地方。(邮件和微信也是)\n\n\n## 暴力计算获取 Onion V3 域名\n\n.onion 的域名生成是私钥 >(rsa)> 公钥 >(sha1)> 杂凑值 >(base32 编码)> 得到最终的 .onion。\n\n一个使用 CPU 计算的工具:[Releases · cathugger/mkp224o (github.com)](https://github.com/cathugger/mkp224o)\n\n\n前置条件\n\n```sh\nsudo apt install gcc libc6-dev libsodium-dev make autoconf\n```\n\n### 编译暴力计算工具\n\n下载项目\n\n```sh\ngit clone https://github.com/cathugger/mkp224o.git\n```\n\n进入项目目录\n\n```sh\ncd mkp224o\n```\n\n生成配置脚本(如果是 git clone 就没有,下载发行的压缩包里就有)\n\n```sh\n./autogen.sh\n```\n\n生成 makefile\n\n```sh\n./configure # 默认能保证最大的兼容性\n# ./configure --enable-amd64-51-30k # 添加合适的参数可以优化,\n```\n\n开始构建\n\n```sh\nmake\n```\n\n构建完成后,在目录就能看到编译出的 `mkp224o` 。\n\n\n> 后面的参数 `--enable-amd64-51-30k` 传递给配置脚本可以加快密钥生成速度;不同 CPU 有不同的参数可以优化,运行 `./configure --help` 查看​​所有可用选项。具体说明: https://github.com/cathugger/mkp224o/blob/master/OPTIMISATION.txt\n\n> `--enable-amd64-51-30k` 表示启用 amd64-51-30k SUPERCOP ed25519 实现。该实现使用AMD64架构,采用了一种特定的优化方法,适用于性能要求较低的环境。`--enable-amd64-64-24k` 表示启用amd64-64-24k SUPERCOP ed25519 实现,采用了不同的优化策略,适用于性能要求更高的环境。\n\n\n\n\n### 使用 mkp224o\n\n开始计算\n\n```sh\n./mkp224o -d vkeys vfly2com\n```\n\n- vkeys,是保存密钥的目录,\n- vfly2com,生成的地址,要是 vfly2com 打头,具体规则请看项目主页。\n\n可以用 tmux 或 screen 运行 mkp224o ,这样断线也可以继续跑了。勿用 VPS 长时间跑,100% 占用\n\n### 如何让 tor 使用生成的密钥?\n\n将密钥文件夹(尽管技术上仅需要 `hs_ed25519_secret_key` )复制到某位置:\n\n```shell\nsudo cp -r vfly2com...onion /var/lib/tor/vfly2_service\n# 在前面,我们的密钥文件夹是 /var/lib/tor/hidden_service/ ,因此选择这里\n```\n\n调整所有权和权限:\n\n```shell\nsudo chown -R debian-tor: /var/lib/tor/vfly2_service\nsudo chmod -R 700 /var/lib/tor/vfly2_service\n```\n\n然后编辑 `torrc` 将密钥文件夹改成新的: \n\n```sh\nsudo vim /etc/tor/torrc\n```\n\n```\n HiddenServiceDir /var/lib/tor/vfly2_service\n HiddenServicePort 80 127.0.0.1:8080\n```\n\n\n重新加载后,tor 应该会拾取它。\n\n```sh\nsudo systemctl reload tor\n```\n\n```sh\nsudo systemctl status tor\n```\n\n此时在 Tor Browser 访问你的新漂亮 .onion 地址看看吧!\n\n\n\n---\n\n\n> 原文链接: [https://blog.vfly2.com/2023/10/building-an-onion-website/](https://blog.vfly2.com/2023/10/building-an-onion-website/)\n\n> 版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh) 许可协议。转载请注明来源 [承飞之咎 (blog.vfly2.com)](https://blog.vfly2.com/) 。\n\n保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 [RSS](https://blog.vfly2.com/feed/) 订阅,或在支持 ActivityPub 的平台关注 `@vfly2blog@blog.vfly2.com` 接收新文章的推送,如果能留言互动就更好了。\n\n可在 Telegram 群组 [https://t.me/vfly2](https://t.me/vfly2) 交流依文章步骤遇到的问题。 \n\n\n\n\n","date_published":"2023-10-20T18:36:41.027Z","summary":"本文介绍了.onion 域名和 洋葱网站 的概念,洋葱网站只是匿名而非阴暗。然后介绍了如何安装 tor 以及配置它反代一个简单的 Web,从而能在 Tor Browser 访问此洋葱网站。最后介绍如何暴力计算出一定规律的 Onion V3 域名。","tags":["post","self-hosted","tor","onionsite","linux","anonymity","dark-web"],"sources":["xlog"],"attributes":[{"trait_type":"xlog_slug","value":"building-an-onion-website"}],"attachments":[{"name":"cover","address":"ipfs://bafkreig3lkmiedfczqht5efasgadf5cxsy5x3rguxhc3qekauyltzy452i","mime_type":"image/webp"}],"type":"note"}