树莓派 3B 折腾笔记:硬件随机数发生器

随机数在计算机中有着十分重要的应用,例如常用的 SSL 加密算法就非常依赖随机数。如果随机数不够随机,就很有可能被攻击者猜到,相应的加密验证体系也就土崩瓦解。但是由于计算机说零是零、说一是一的特点,它没有办法产生真正的随机数,只能通过复杂的算法去尽可能模拟随机数。在 Linux 系统上,由于 Linux 「万物皆文件」的特点,可以从 /dev/random 读取到由 Linux 内核综合大量数据生成的随机数。但是因为 Linux 基于「安全第一」的原则综合了大量数据,随机数的产生速度很慢。用 rng-tools 软件包中的 rngtest 工具就可以看到:lantian@lantian-rpi3:~ $ cat /dev/random | rngtest -c 1000rngtest 2-unofficial-mt.14Copyright (c) 2004 by Henrique de Moraes HolschuhThis is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.rngtest:...

树莓派 3B 折腾笔记:BT 下载与策略路由

这次就直接进入正题。(其实是不知道该拿什么开头)安装 Transmission 挂 PT作为一个可以自由连接各种传感器的小型电脑,树莓派的可玩性相当高。即使你不想在 GPIO 上接一大堆传感器(或者像我一样觉得另外的传感器暂时没什么用),你也可以利用它低功耗的特点,让它 24 小时运行,做一些不需要大量 CPU 运算,但是因为其它因素需要较长时间才能完成的任务,例如…… 挂机下载。我所在的大学有一个内网的 PT(Private Tracker)站。PT 站就是一个 BT 种子的发布网站,但是它在传统 BT 的基础上增加了用户管理功能,并且通过限制客户端种类、强制要求上传率等方式,解决了传统 BT 下各类客户端吸血(只下载不上传,例如迅雷)和种子很快失效(因为一段时间后就没人继续上传了)的问题。但因为有了这些要求,PT 站用户往往需要长时间挂机上传下载,而这刚好是树莓派擅长的事。在上篇文章里,我弄好了一个简单的 NAS。在此基础上装一个 BT 下载软件就可以挂 PT 了。...
插图

树莓派 3B 折腾笔记

国庆放假期间我在某宝上买了一只树莓派 3B 和一堆传感器,准备搞一波事情。因为是国庆,所以各家店发货都有不同的延迟,导致我国庆长假后又过了好几天东西才到齐。先上张完成体的图片:我分了五家店买了这些东西:树莓派 3B(含外壳、风扇、散热片、电源套装)闪迪 32G TF 卡树莓派传感器套装(支持树莓派的 3.3V 电平,总共 16 个)5 寸 800x480 触摸屏 DS3231 时钟模块和 GPIO 针脚标记板(后买)树莓派本体最先到的是树莓派 3B 本体,以及配套的外壳风扇散热片等等。然而我买的 TF 卡还没到…… 所以这只树莓派暂时什么都干不了。不过我还是可以把外壳风扇等等先组装起来。然而我很快发现了问题:店家的外壳内支撑柱的位置不准,同一侧的两根柱子同时只能有一根插在树莓派电路板的孔里,另一根只能顶在电路板上,树莓派装不进去。然后我就拿起剪刀把那两根柱子剪了。树莓派很顺利地放了进去。因为外壳大小刚好,所以没了柱子不影响树莓派的稳定性。...
插图

CommentToMail 修改版

最近突然发现本来每天一封的自建贴吧签到系统的邮件突然没有了,但是贴吧还是正常签到。上 Mailgun 界面一看,状态全线飘红:日志里一大排发往我自己 Outlook 邮箱的退信,比如:看提示是 Mailgun 的整个 AS 都被 Outlook 拉黑了。这下子是完全没法用了。好消息是,有许多和 Mailgun 提供类似服务的邮件服务商,例如 SendGrid。我很快在他们网站上注册了一个账号,并且开启了 SMTP,把我的贴吧签到、NextCloud 等都接了进去,非常顺利。坏消息是,我的博客用的是我专门给 Mailgun 写的 CommentGun,需要修改一下才能接到 SendGrid 上。本来我可能修改一下插件,然后又能出一个 CommentGrid 之类的插件,但是每家邮件服务商的 API 都不一样。如果这些服务商轮着被 Outlook 屏蔽…… 画美不看。另一个好消息是,这些邮件服务商普遍支持 SMTP 发信。这意味着我可以用 CommentToMail。坏消息是,这个插件年久失修,在不少情况下会 GG(例如网站开了 SSL,...
插图

为 nginx 启用 TLS 1.3,并传递给 FastCGI 后端

OpenSSL 在最新的测试版中提供了 TLS 1.3 的实验性支持,包括了一系列的性能和安全性优化。最新的 nginx 1.13 系列也相应的添加了 TLS 1.3 的相关选项。不过由于 TLS 1.3 还处在草案状态,现在使用还是要踩一些坑的:TLS 1.3 目前有 18、19、20 三个版本的草案已经被 OpenSSL 等实现,而且它们互不兼容,也没有一个 SSL 的库把它们三合一。目前 Chrome、Firefox 等浏览器广泛使用的是 18 版草案,但是这个版本的 OpenSSL 不支持 TLS 扩展,而 Certificate Transparency 需要用到它。虽然最新的 nginx-ct 插件增加了 TLS 1.3 的 Certificate Transparency 支持,但是由于第二条,它无法与草案 18 的 OpenSSL 一同工作,会出现编译失败的情况。因此必须退回到 nginx-ct 项目 release 中的 1.3.2 版本,而这个版本对 TLS 1.3 不生效。我部署 nginx 使用的 Dockerfile 如下:FROM debian:jessie-slimMAINTAINER Lan Tian "lantian@lantian.pub"ENV NGINX_VERSION=1....
插图

加入 DN42 实验网络

2020-03-16 提示本文已有更新版本:参见《DN42 实验网络介绍(2020 版)》。新版介绍中有更详细的注册申请流程,并根据 DN42 三年来的变化做出了修改。以下内容写于 2017 年,仅作存档用途。DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 使用了大量在互联网骨干上应用的技术(例如 BGP),可以很好的模拟一个真实的网络环境。正因为它的真实,使用 DN42 的门槛比较高。你要扮演一个 ISP(互联网服务提供商),注册一个 ASN 号码,注册 IPv4 和 IPv6 的地址池,并且使用 BGP 在自己的服务器上广播它们。你还要和其它的用户联系,和他们做 Peering(对接),一步步进入完整的 DN42 网络。DN42 在 172.20.0.0/14 和 fd00::/8 上运行,而这两个 IP 段都是分配给内网使用的。换句话说,你在 DN42 上怎么折腾,都不会影响到服务器其它的互联网连接。...

使用 ZeroTier One 建立自己的 IPv6 隧道

前言天朝绝大多数 ISP 均不为用户提供 IPv6 地址,除了教育网。但是教育网的 IPv6 很不稳定(可能和我的学校有关),而且一旦离开学校就没有 IPv6 了,很不爽。有一种方法是使用 HE.NET 的隧道服务。在 SixXS 关闭之后,他们是目前仅存的最大的 IPv6 隧道提供者,而且他们的服务完全免费。但是他们的服务并不适用于天朝的家庭网络环境,因为家庭网络普遍是动态 IP,并且部分运营商为了节省成本已经开始使用大内网,用户无法获取独立 IP,在同一内网就会产生冲突。好消息是,我有好几台 VPS,均由 VPS 提供商或者 HE.NET 的隧道服务提供了 IPv6。这意味着我可以使用 VPN 方案。但是 Open^_^VPN 早就无法正常跨境使用了,其它 VPN 方案或多或少都有一些问题。之前我拿来 Docker 组网的 ZeroTier One VPN 倒是能很好的解决这个问题。有中心管理面板,配置简单;跨境使用目前没有问题;官方甚至提供了详细的教程。准备ZeroTier One 的注册安装和加入网络,...
插图

使用 ZeroTier One 在多台 Docker 服务器间建立双栈互通网络

前言多台 Docker 服务器上的容器互通是一个不好解决的问题。如果自建一个 Overlay 网络,就需要在一台服务器上建立 etcd 之类的服务。但如果 etcd 所在的服务器挂了,整个网络就 GG 了。我用的便宜 VPS 有偶尔网络中断的情况,我自己搞崩也服务器是常有的事,所以我不能采取这种方式。Docker 也有其它的基于 Overlay 的商业化组网方案,例如 Weave,但是对于个人用户来说这些方案的价格太高了(我只是搞来玩玩),所以也不考虑。在这些网络结构上,etcd 或者 Weave 之类的中心服务器记录了每个容器所在的服务器和内部 IP,所以在任何容器上都可以直接 DNS 解析到其它容器。也就是说,假如我设置了 lantian-nginx 和 lantian-phpfpm 两个容器,在 nginx 的配置文件里我可以直接把 php-fpm 的地址填成 lantian-phpfpm:[端口号],方便配置。但我好像可以放弃这个功能啊?我的容器数量并不多,而且只有几个 MariaDB 需要跨服务器连接,做数据库主从备份,...
插图

使用东北大学网络中心的 SSH 黑名单系统

东北大学网络中心在其网站上提供了一份 SSH 黑名单,列出了使用端口扫描工具扫描 SSH 端口的 IP 名单,貌似是由他们自己设立的蜜罐服务器检测统计的。同时,他们也提供了黑名单对应的 hosts.deny 文件的下载,允许用户使用 cron 一类的计划任务软件自动更新 SSH 黑名单列表并屏蔽这些扫描者(阻止它们登录)。不确定这套系统是什么时候推出的,但是它至少已经运行了两年了。另外,它对于这些 IP 的屏蔽时间貌似是最后一次发现的 60 天内。使用方法:在服务器上安装 cron,然后运行如下命令安装脚本:ldd `which sshd` | grep libwrapcd /usr/local/bin/wget antivirus.neu.edu.cn/ssh/soft/fetch_neusshbl.shchmod +x fetch_neusshbl.shcd /etc/cron.hourly/ln -s /usr/local/bin/fetch_neusshbl.sh ../fetch_neusshbl.sh这个脚本会每小时连接东北大学网络中心的服务器,下载最新的 hosts.deny 并应用到你的系统上。...

LT NoLitter:防止 Android 应用乱建文件夹的 Xposed 插件

Android 系统有着用户可直接操作的存储空间,用户可以很方便地管理自己的文件(相比 iOS 而言)。但是某些软件也会在存储空间根目录直接建立大量的文件夹,影响了用户的文件管理,并对强迫症人群造成了极大的威胁。于是我写了一个 Xposed 插件。插件 Hook 了 Android 的 File 类,当有程序尝试用 File 类读取或写入根目录的文件或文件夹,插件会检测这个文件或文件夹是否存在。如果存在,那么插件不做任何操作;如果不存在,那么插件就将操作重定向到 /Android/files 文件夹下。相比于 XInternalSD,这样操作的优点是可以对付某些不自律的应用。这些应用不使用 Android 系统函数获取存储路径,而是直接将文件保存到 /sdcard 之类的通用路径,XInternalSD 只修改了获取到的存储路径,因此无能为力。相比于 SD 重定向,这样操作免除了复杂的配置。用户只需要在装上插件时把文件管理应用拉白名单,然后把根目录下不想要的文件夹删除或移动到 /Android/files 即可。...