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

6   2202 转为繁体

遇到一个问题,设置了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   1832 转为繁体

在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   2017 转为繁体

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

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

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

15   1612 转为繁体

自从有次过海关的时候电脑被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

欢迎交流

ipip.tk地理位置查询

0   1500 转为繁体

基于OpenResty ,MaxMind GeoIP数据库和从bgp.he.net生成的ASN数据库,因为没有经纬度的需求所以没有显示。下文有源代码的链接,如果需要可以自行修改加上经纬度或者将输出变为JSON等。

使用方法

查询当前IP地理位置

$ curl https://ipip.tk/
x.x.x.x
Country, City
ASN number

查询当前IP

$ curl https://ipip.tk/ip
x.x.x.x

查询指定IP的地理位置

$ curl https://ipip.tk/74.125.203.199
74.125.203.199
United States, Mountain View
AS15169 Google Inc.

查询域名的地理位置

$ curl https://ipip.tk/www.google.com.hk
74.125.203.199
United States, Mountain View
AS15169 Google Inc.

查询域名的IP

$ curl https://ipip.tk/www.google.com.hk/ip
74.125.203.199

查询域名的IP和CNAME(如果存在)

$ curl https://ipip.tm/www.google.com.hk/dns
www-wide.l.google.com 74.125.203.199

源代码

在这里https://gist.github.com/fffonion/44e5fb59e2a8f0efba5c1965c6043584

需要ngx_http_geoip_module, echo-nginx-module, lua-nginx-module,安装libgeoip,并将maxmind的旧版geoip数据库放在/usr/share/GeoIP

通过bgp.he.net生成ASN数据库

Read More