赢得你的数字独立——构建暗网家庭云 Ver.alpha
实现数字独立并帮助网络最好的办法就是托管自己的服务——无论是自用还是公益都是极佳的。
此处使用著名的s905矿渣玩客云来配置一个可以在家中和I2P网络访问的家庭云储存/个人博客和XMPP聊天服务器,当然接入i2p并不难,配置服务本身更加复杂。
本篇的目标
在I2P上托管自己的服务并注册一个好记的短域名
XMPP服务器(matrix服务器需要域名和证书)
Nextcloud云储存(和云说再见,好好对待自己的数据)
让我们开始吧
刷机安装Armbian 5.9.0Armbian5.15
你需要:一个30包邮的矿渣,一个8G以上u盘,USB公头对公头数据线,吹风机和十字与平口螺丝刀,~~从postman's bt tracker下载的刷机工具包 ~~
更新:最新linux5.15/6.1s刷机包可在此下载:https://github.com/hzyitc/armbian-onecloud/
相关教程墙内很多,可以自行查找。
大致步骤就是——刷入底包,系统刷入U盘,从U盘启动,从U盘系统运行安装到emmc的脚本,重启并拔掉U盘
I2PD安装和设置开机启动
安装导入工具并导入i2pd的repo
sudo apt-get install apt-transport-https
wget -q -O - https://repo.i2pd.xyz/.help/add_repo | sudo bash -s -
更新repo并安装i2pd
sudo apt-get update
sudo apt-get install i2pd
编辑i2pd配置,参见官方文档
sudo nano /etc/i2pd/i2pd.conf
# 请务必配置补种代理并http控制台地址从127.0.0.1改为0.0.0.0方便从局域网访问
设置开机启动
systemctl enable i2pd
systemctl start i2pd
为玩客云手配NextCloud
一般来说Nextcloud有两种安装方式——Docker镜像或者手搓服务器。这里我们跟随官方的手动安装指南配置一个Nginx+PHP-fpm+MariaDB的无SSL/TLS服务器——反正I2P网络本身就是加密的,TLS除了消耗更多CPU毫无意义。
由于玩客云repo里只有php7.3,我们没法安装最新版本——所以这里使用nextcloud21——官方手册在这里
使用最新版系统的各位可以直接安装nextcloud25
安装php和所需的模块
$ sudo apt install php php-ctype php-curl php-dom php-iconv php-xml php-mbstring php-posix php-xml php-zip php-mysql php-intl php-bz2 php-fileinfo php-exif php-apcu php-memcached php-fpm php-imagick php-gd php-bcmath php-gmp libmagickcore-6.q16-3-extra memcached
nginx和MariaDB数据库
$ sudo apt install nginx mariadb
替换nginx配置文件
$ rm /etc/nginx/sites-enabled/default
$ nano /etc/nginx/sites-enabled/default
修改我注释的部分并将以下配置复制粘贴
# 可能需要手动修改/etc/php/php版本/fpm/conf.d/www.conf 或者直接使用127.0.0.1:9000
upstream php-handler {
server unix:/run/php/php7.3-fpm.sock;
}
server {
# 只需要监听IPv4就好,不要把自己暴露在公网——我们只在家庭内网和I2P使用
listen 80;
server_name 你的域名或者ip地址;
# 用于安全加固的标头,防止XSS劫持
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# 去掉X-Powered-By防止信息泄漏
fastcgi_hide_header X-Powered-By;
# 你的数据存放目录和稍后Nextcloud的安装目录,需要自行修改
root /var/www/nextcloud;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ^~ /.well-known {
# The following 6 rules are borrowed from `.htaccess`
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
# Anything else is dynamically handled by Nextcloud
location ^~ /.well-known { return 301 /index.php$uri; }
try_files $uri $uri/ =404;
}
# 设置最大上传大小,不影响客户端分块同步的文件,对于矿渣建议调至256MB
client_max_body_size 256M;
fastcgi_buffers 64 4K;
# 启用Gzip压缩节约带宽
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# 优化缓存
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
之后重新载入nginx和php-fpm
nginx -s reload
systemctl restart php7.*-fpm.service
授予nginx对数据目录的权限并安装Nextcloud(你也可以先下载好了用SFTP或者Samba传输压缩包)
sudo chown -R www-data:www-data /var/www/nextcloud
#换成你的数据目录
cd /var/www/nextcloud
wget https://download.nextcloud.com/server/releases/latest-21.zip #下载Nextcloud21压缩包
unzip latest-21 #解压在这
设置MariaDB
$ sudo mysql
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY '改为你的密码';
FLUSH PRIVILEGES;
EXIT;
打开浏览器,登陆并根据页面指导完成安装,数据库使用Mysql/MariaDB,数据库名称nextcloud,数据库用户nextclouduser,密码是你刚才更改的那个,数据库地址默认为127.0.0.1:3306
php-fpm性能调优
nextcloud默认配置慢得吓人——所以我们要进行一些优化
修改/etc/php/7.3/fpm/pool.d/www.conf
pm.max_children = 30
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 12
request_terminate_timeout = 900
修改/etc/php/7.3/fpm/php.ini启用OPcache
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
安装redis并同时启用APCu本地缓存
$ sudo apt install redis php-apcu php-redis
$ cd /var/www/nextcloud #转到你的解压Nextcloud安装包的目录
$ nano config/config.php
粘贴以下内容
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
设置Cron定时任务
sudo crontab -u www-data -e
最后一行添加
*/5 * * * * php -f /var/www/nextcloud/cron.php
#检查是否已经添加
$ sudo crontab -u www-data -l
功能增强:自动后台生成照片预览
安装Preview Generator扩展并在nextcloud web界面启用,然后在/var/www/nextcloud下先执行一次
sudo -u www-data php occ preview:generate-all -vvv
再将
*/5 * * * * php /var/www/nextcloud/occ preview:pre-generate
添加到Cron定时任务
编辑/etc/i2pd/tunnel.conf并添加Nextcloud隧道
[nextcloud]
type=server
host=127.0.0.1
port=80
inport=80
keys=nextcloud.dat
inbound.quantity=12
outbound.quantity=12
#提高隧道数量从默认5条到12条加速访问,实测在3+3跃点下能达到百kb速度
XMPP
prosody是轻巧的的xmpp服务器——关键是这是i2pd官方文档推荐的服务器。以下内容翻译自i2pd文档,已经过验证可用
安装prosody
apt install prosody
安装i2p整合模块
cd /usr/lib/prosody/modules
wget https://raw.githubusercontent.com/majestrate/mod_darknet/master/mod_darknet.lua
编辑/etc/i2pd/tunnel.conf添加Prosody隧道
[prosody-s2s]
type=server
host=127.0.0.1
port=5269
inport=5269
keys=prosody.dat
[prosody-c2s]
type=server
host=127.0.0.1
port=5222
inport=5222
keys=prosody.dat
编辑/etc/prosody/prosody.cfg.lua,将xx.b32.i2p替换为前面设置的隧道的地址
interfaces = { "127.0.0.1" };
admins = { "admin@xxx.b32.i2p" };
modules_enabled = {
"roster"; "saslauth"; "dialback"; "disco"; "posix"; "private"; "vcard"; "register"; "admin_adhoc"; "darknet";
};
modules_disabled = {"tls";};
allow_registration = false;
darknet_only = true;
c2s_require_encryption = true;
s2s_secure_auth = false;
authentication = "internal_plain";
-- On Debian/Ubuntu
daemonize = true;
pidfile = "/var/run/prosody/prosody.pid";
log = {
error = "/var/log/prosody/prosody.err";
"*syslog";
}
certificates = "certs";
VirtualHost "xxx.b32.i2p";
给服务器添加管理员账号
sudo prosodyctl adduser admin@xxx.b32.i2p
编辑/etc/i2pd/i2pd.conf启用socks代理并设置Pidgin使用Tor/Privacy(Socks5)代理连接到服务器
如果一切顺利,现在你已经有了一个在i2P中运行的,隐秘的XMPP服务器和一个Nextcloud云盘了。你可以直接通过i2p安全私密地访问自己的服务——无需担心公网IP,内网穿透和防火墙配置的各种问题,享受全新的数字生活吧!