一个使用Cloudflare API v4的动态DNS脚本

0   2497 转为繁体

分享一个使用Cloudflare API v4的动态dns脚本(Gist地址本地下载)。

因为11月Cloudflare就要下线v1版本的API了,而Openwrt里的ddns-scripts并没有支持新版[摊手],所以自己写了一个。

仅依赖curl(可以改成wget)。支持v4和v6。会请求ip.yooooo.us得到公网IP地址,怕隐私泄露的可以自己搭一个

 

This is a DDNS script using Cloudflare APIv4 written in bash (Gist or Download directly).

I wrote this because Cloudflare is going to remove support for the old API on Nov. this year. And the ddns-scripts package in Openwrt is not yet supporting the new API [摊手].

This script only depends on curl (can be modified to use wget). It will use ip.yooooo.us to query IPv4 and IPv6. You can use this link to set up your own query server.

deluge各种问题导致状态机抽风

6   2329 转为繁体

遇到一个问题,设置了deluge分享率和做种时间到一定时间之后自动删除种子。之前一直很好使的,最近发现到了指定的分享率或者做种时间之后,种子状态变成了一直Paused或者一直Seeding。发现有这么几种问题导致deluge抽风:

状态存档的权限不对

是deluged没有对状态存档~/.config/deluge/session.state和~/.config/deluge/state/*的写权限导致的。

因为自身需求使用

#  start-stop-daemon -S -c user:www-data -k 000 -x /usr/bin/deluged — -d

启动deluged,deluged具有user的euid和www-data的egid,而~是user:user的。所以就挂了233

直接添加种子下载地址导致一直Paused

deluge可以直接添加种子的http下载地址,取得种子之后自动开始下载,但是这样有一定几率产生万年Paused。

解决办法是自己下载种子之后返回磁力链添加到deluge。

 

Python float和decimal

2   1957 转为繁体

在Windows上打包Python脚本时遇到一个需求,将浮点数转成字符数组,比如输入1.001,得到[‘1′,’0′,’0′,’1’]

一开始想当然地用了:

version = 2.001

v = list(str(int(version * 1000)))

发现好像哪里不对,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想应该是浮点数的精度问题,因为一看version * 1000 = 1000.9999999999999

所以有这么几种解决方法:

v = list(str(int(round(version * 1000))))

或者:

v = list(str(version).replace(“,”, “”) + “000”)[:4]

或者用decimal模块,decimal是固定小数点位数的,用的是十进制乘除法,所以(在设定的位数内)不会产生误差:

from decimal import getcontext, Decimal

getcontext().prec = 4

v = list(str(Decimal(version) * 1000))

需要注意的是decimal会自动转换科学计数法,可以用”%d” % Decimal(d)来得到原始值。

 

启用yoooo.us

10   2158 转为繁体

准备把之前用的一套(山寨)cdn用到博客和其他一堆乱七八糟的站上面,用了yoooo.us(4个o)来做cname。主要现在的yooooo.us还依赖cloudflare的服务没法搬,所以另外注册了一个放到cloudxns上根据运营商区分解析。现在电信走的是idcf;联通移动和港澳台小伙伴是vultr日本;国外是cc的lax。韩国kt用来做冗余。

所以对于你们来说,每次打开我的博客的时候,可以至少省一个字节的流量了。

被害妄想症如何保护服务器安全

15   1783 转为繁体

自从有次过海关的时候电脑被TSA开包检查硬盘还掉下来了之后,我的被害妄想症就越来越没救了。

这篇文章假设有人可以物理接触你的电脑,以及你所在的网络不可信,这种情况下应该怎么保护你的服务器数据安全。

 

  • 使用代理登录SSH以隐藏服务器IP。如果有多台服务器,选择一个位置最近的做跳板机,加密它的文件系统(OpenVZ再见)。设置另外机器的hosts.deny和hosts.allow为仅允许跳板机IP登录;如果使用不支持tcpwrapper的服务如dropbear,需手动设置iptables。
  • 登录跳板机的方式要和登录另外机器的方式不同。
    • 使用密码+google authenicator登录跳板机,然后通过公钥登录别的机器。设置跳板机的sudo需要密码,且设置为不同于当前账户的密码;方法是在/etc/passwd中添加一行toor:x:0:0:root:/root:/usr/sbin/nologin,使用passwd修改toor的密码,在/etc/sudoers中添加一行Defaults        runas_default=toor, runaspw。
    • 使用密钥A登录跳板机,使用另一个密钥B登录别的机器。密钥B应保存在本地,通过ssh-agent转发到跳板机。不同设备上的密钥B可以设置不同的passphrase。dropbear不支持ed25519,而ecdsa据都市传说可能存在NSA的后门。
  • 每三个月更换一次密钥。
  • 保证密钥的passphrase的强度;不使用任何云服务保存密码和密钥;如果实在记性太差,在本地AES加密一次,然后做好伪装(比如将二进制密文附到图片文件之后或压缩文件之前,[密文|!Rar…] 或 [\xFF\xD8…\xFF\xD9|密文])。
  • 设置fail2ban。
  • 监控跳板机/var/log/wtmp中的登录IP。
  • 如果没有必要,关闭SSH和其他各类开放端口。
  • 所有明文服务尽可能走tls。如果客户端支持SNI,配置假证书以防止被猜测域名。可以使用lua-resty-sniproxy

欢迎交流