将博客的https连接加强了

嗯,前几天已经强制了对博客使用https访问……感觉很好很强大,博客的等级突然就高起来了。

今天偶尔发现一个网站(https://www.ssllabs.com/ssltest/index.html),可以检查网站的安全性,于是兴冲冲的去测试了一下,结果发现了几个小问题(主要的,更零碎的就没管了)。

  • 启用了一种长度较短的加密算法;
  • 没有提供完整的证书链;
  • 可能受到BEAST攻击;

前面两个的话好说,稍微查了一下网络就ok,而且startssl也提供了完整的安装教程(lighttpd Apache nginx),略后悔没有仔细看。

问题是最后一个,BEAST攻击究竟是什么啊……

上网做了很多很多的Google,还打错字了,打成了beats,于是魔声总是出来捣乱。

最后,在一个网站(http://permalink.gmane.org/gmane.linux.debian.devel.security/16698)找到了一份方案,看起来像是一份邮件的备份。

里面提到了lighttpd的解决办法,就是在配置文件里面指定一下加密的算法,并且让服务器优先使用某些算法,就可以组织这种攻击了。

ssl.cipher-list =  "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
ssl.honor-cipher-order = "enable"

应用了之后,再去做测试,果然BEAST攻击的提示没有了。

 

SSLLab测试结果

SSLLab测试结果

编译了一个在RaspberryPi上用的seafile client

seafile官方网站:http://seafile.com

参考:官方wiki

在VPS上,使用着dropbox来备份数据,表示用着用着用的很舒服,后来入手了raspberrypi之后,当然也想在pi上弄一个,但是dropbox并没有提供源代码,只提供了基于x86的二进制文件,所以其他平台都不能使用,相当的怨念。

后来看到了一个很神奇的类似软件,叫做seafile,提供了跟dropbox差不多的服务,而且client和server的源码都能弄到,马上就兴奋起来了,弄一个出来给我的Pi玩吧~

然后参照着官方的wiki将全部的包都给编译出来了,根据wiki,有两个包是编译的时候需要的(不过看起来是运行的时候也需要的)。后来想了想,干脆做成安装包吧,于是稍微研究了一下,做了几个安装包顺便放出来。

ccnet_1.2.0-1_armhf.deb
libsearpc_1.0.1-1_armhf.deb
seafile_1.4.5-1_armhf.deb

下一步着手研究那个server怎么编译……

截图-seafile

截图-seafile

终于知道为毛用Opera访问博客的时候总是不安全了

尼玛死,终于知道为毛经常在访问自家博客的时候Opera提示说“服务器试图应用安全措施,但没有成功”了。

都是防火墙惹的祸!!!
草泥马啊,总是干掉了到*.wordpress.com的链接啊,为毛啊!!!
明明上面有超多超多的有用资料啊!!!
blogspot也是啊!!!
看着看起来很有用的资料点进去之后说无法链接到服务器啊!!!!

经过opera的“检查元素”,发现在加载页面的时候,加载了一个来自jetpack.wordpress.com的资源,结果妥妥儿的访问失败,然后opera就自动的加载了本地的叫error的资源,于是……“哎~这页面上的资源不是全部都是来自加密的安全连接啊~安全措施失败”。跪……

linux挂载samba储存

入手了RaspberryPi之后,发现容量果断的不足,这时候就是挂载文件系统的时候了。由于不同的系统之间的差异,软件包维护的不同,造成了挂载的命令稍微有点不一样。

RaspberryPi的话,samba并没有注册smbfs,而是使用了cifs(或许这个才是正常通用版?),所以,mount的用法稍微有点不一样

mount.cifs <remotetarget> <dir> -o <options>
Options:
 user=<arg>
 pass=<arg>
 dom=<arg>

挂载之后就能在mount表里面看到了

root@raspberrypi:~# df -h
文件系统             容量  已用  可用 已用% 挂载点
rootfs               7.2G  6.4G  409M   95% /
/dev/root            7.2G  6.4G  409M   95% /
devtmpfs             188M     0  188M    0% /dev
tmpfs                 38M  696K   37M    2% /run
tmpfs                5.0M     0  5.0M    0% /run/lock
tmpfs                 75M   68K   75M    1% /run/shm
/dev/mmcblk0p1        56M   17M   40M   30% /boot
/dev/sda1            7.4G  4.9G  2.2G   70% /media/16b2d773-3813-4672-99b8-6fc9be6cbed9
//192.168.11.1/Work   30G   27G  1.3G   96% /mnt/Openwrt/Work

如果想自动挂载的话,就需要写到fstab里面,格式如下

//SERVER/SHARENAME /mnt/MOUNTPOINT cifs noauto,noatime,username=USER,password=PASSWORD,workgroup=WORKGROUP 0 0

就能实现开机自动加载了。

使用checkinstall将源码打成安装包

参考:http://www.ibm.com/developerworks/cn/linux/l-cn-checkinstall/

以前就考虑过将源代码打成软件包,可是总觉得太麻烦了点。最近发现了点有趣的东西,再编译的时候就想打个包什么的吧,于是就上网查了一下。

结果就找到一个似乎挺方便的工具,叫做checkinstall。使用方法很简单,在编译软件包的时候,稍微做点修改就ok。

比如说,一般来说,到手一个软件的源码之后,就是解压、设定、编译、安装

wget PACKAGE_FILE
tar -vxf PACKAGE_FILE
cd PACKAGE_DIR
./configure [参数]
make
make install

checkinstall的话就是替换掉make install的那一步,直接checkinstall的话,可以顺便安装了,不过需要修改一下checkinstall的默认设定(/usr/local/lib/checkinstall/checkinstallrc)。
运行checkinstall之后,checkinstall会检查有没有./doc-pak,如果没有,就会问你是否创建

询问是否创建文档

外链自https://www.ibm.com/developerworks/cn/linux/l-cn-checkinstall/

之后是输入软件包的描述与信息

输入软件包的描述与信息

外链自https://www.ibm.com/developerworks/cn/linux/l-cn-checkinstall/

完成之后回车,checkinstall就会自己搞定的了。

参考链接底部有更多的资源,想深入的话可以点过去看看

在Apache上使用客户端证书认证

前阵子在nginx上做了客户端证书认证,发现满足感大大的有,于是一发不可收拾,在RaspberryPi上的Apache也做了一个。

上参考:

http://www.adintr.com/article/blog/192

http://httpd.apache.org/docs/2.2/mod/mod_ssl.html

 

首先,第一步是做证书。

这部分是老生常谈了,懒人表示继续在路由上用easyrsa做(参考1参考2),写了一份server的key和crt之后就可以拿来用了。(之前我有CA证书和客户端证书了)

然后到手3个文件, server.key server.crt ca.crt。

修改/etc/apache/sites-available/default-ssl

找到这些字段

SSLCertificateFile
SSLCertificateKeyFile
SSLVerifyClient
SSLCACertificateFile
SSLVerifyClient

去掉注释之后,分别填上 server.crt的位置,server.key的位置,”on”,ca.crt的位置,”require”,就像这样

SSLEngine on
SSLCertificateFile    /etc/apache2/certs/pi.crt
SSLCertificateKeyFile /etc/apache2/certs/pi.key
SSLCACertificateFile /etc/apache2/certs/ca.crt
SSLVerifyClient require

配置也完成了。

然后启用一下ssl的mod和这个默认的ssl配置,就是分别做一下软连接。

最后启动/重启apache服务器,好了,看到浏览器问你要证书了。

在Nginx中使用客户端证书认证

其实这个东西很久以前就想搞的了,一直没动手,直到最近总在外面跑,有时候就考虑连回家里,于是稍微动了一下手。

选nginx是因为这个服务器够轻型,做前端最好了,而且做前端的话以前也做过,有经验。

上连接:

http://blog.csdn.net/kunoy/article/details/8239653



http://blog.csdn.net/jinhill/article/details/2573777
签证书什么的感觉略微有点麻烦了,于是果断的用了openvpn的easyrsa,这套脚本帮我很轻松的完成了证书的签署。主要用到了build-ca build-key-server build-key,根据名字就看出来了,生成ca证书,生成服务器证书,生成私有证书。这部分根据不用的系统,生成的证书在不同的位置,详情再自行Google之。我是在openwrt上做的,签好的证书在/etc/easyrsa/keys下。

如果真心想认真学习签证书的话还是去做多点的Google吧。

证书和密钥到手,这时候比较推荐导出一下客户端证书,使用以下命令

openssl pkcs12 -export -inkey client.key -in client.crt -CAfile ca.crt -chain -out client.pfx

就能得到一份可以导入的私有证书了。(暂时我只找到这种笨办法)

 

证书都准备好之后就是服务器的配置了。

先要处理一下openssl.conf,主要是这几行

dir            = /etc/easy-rsa/keys         # top dir  
database       = $dir/index.txt          # index file.  
new_certs_dir  = $dir/newcerts           # new certs dir  

certificate    = $dir/ca.crt         # The CA cert  
serial         = $dir/serial             # serial no file  
private_key    = $dir/ca.key  # CA private key  
RANDFILE       = $dir/.rand      # random number file 

countryName = match  
stateOrProvinceName = match  
organizationName = match  
organizationalUnitName = match  
localityName            = optional  
commonName              = supplied  
emailAddress            = optional

上半部分是证书文件的位置,下半部分是认证哪些内容是相同,自己看着修改。

openssl弄好之后就是重头戏了,nginx本身的配置。

默认的配置文件里有https服务器的实例,参照着就能弄好一个认证服务器端证书的,只要稍微加上几行就能加上私有证书的认证了。

    # HTTPS server

    server {
        listen       443;
        server_name  Router;

	charset utf8;

        ssl                  on;
        ssl_certificate      /etc/easy-rsa/keys/ferrets.imzone.in.crt;
        ssl_certificate_key  /etc/easy-rsa/keys/ferrets.imzone.in.key;

	ssl_client_certificate /etc/easy-rsa/keys/ca.crt; #客户端证书认证所需要的ca证书

        ssl_session_timeout  5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;
	ssl_verify_client on; #启用客户端证书认证

        location / {
            proxy_pass ;
		proxy_redirect default;
        }
		location /transmission {
			proxy_pass ;
			proxy_redirect default;
		}
    }

嗯,像上面一样的配置文件我就是做的代理服务器,转发到192.168.1.1和192.168.1.1:9091,方便远程管理路由和transmission。

感觉一下子强力了好多啊。

处理了lighttp上的wordpress用Jetpack的问题

嗯,以前用着用着都是没问题的,前几天看着评论栏直接无法访问了(蛋疼的防火墙),于是干脆关掉了,可是关掉之后发现好怀念那东西的网站统计啊……好想要回来啊,于是又重新启用,结果出问题了。

得到了这样的东西

Your Jetpack has a glitch. Something went wrong that’s never supposed to happen. Guess you’re just lucky: xml_rpc-32601

Try connecting again. Error Details: The Jetpack server could not communicate with your site’s XML-RPC URL. If you have the W3 Total Cache plugin installed, deactivate W3 Total Cache, try to Connect to WordPress.com again, reactivate W3 Total Cache, then clear W3 Total Cache’s cache.

卧槽,用的好好地怎么就突然出问题了呢?

经过啦大量的搜索,找到了解决的办法,原来是跟lighttpd的rewrite有关。

根据http://en.forums.wordpress.com/topic/jetpack-instl-issue-with-ssl-and-lighttpd(要求跨越防火墙),找到了解决的办法。
有一位有类似情况的人,将rewrite规则从

#Jetpack is broken with these rules
url.rewrite-once=(
 "^/(wp-.+).*/?" => "$0",
 "^/images/.*/?" => "$0",
 "^/temp/.*/?" => "$0",
 "^/(sitemap.xml)" => "$0",
 "^/(xmlrpc.php)" => "$0",
 "^/keyword/([A-Za-z_0-9\-]+)/?$" => "/index.php?keyword=$1",
 "^/.*?(\?.*)?$" => "/index.php$1"

改成了

#Jetpack works with these rules
url.rewrite-if-not-file = (
 "^/(wp-.+).*/?" => "$0",
 "^/images/.*/?" => "$0",
 "^/temp/.*/?" => "$0",
 "^/keyword/([A-Za-z_0-9\-]+)/?$" => "/index.php?keyword=$1",
 "^/.*?(\?.*)?$" => "/index.php$1"
 )

之后,Jetpack好了。我改成这样也没问题了。

给RaspberryPi装上Samba服务器

果断地,在Pi入手之后必须的工作之一就是samba了,还记得再之前从来都不知道这东西的好,用上了之后就发现离不开了。

虽然说其实在linux环境下面的话sftp也就满足了,可是平时都是用的windows,所以还是用samba比较舒服,虽然性能实在不怎么样……

首先吐槽一下软件源那边的问题,尼玛,全世界都在说用这个“testparm”来测试samba的配置文件有没有问题,但是我照着各种教程安装上samba4-common-bin之后还是没有这东西,于是还是只能手动修改配置文件了。

因为路由上也有samba,于是果断的参考一下,发现一个很蛋疼的事实,raspbian的samba在安装完成之后,默认的配置文件里面有个

passdb backend = tdbsam

但是根据openwrt的samba配置文件来看,openwrt用的是smbpasswd,而这东西是负责密码的。

然后就我嘞个擦,这尼玛密码怎么弄?

直接参照smbpasswd来改密码的方法不可能,因为没有tdbsam这东西(为什么什么都没有!)

在网上查了很久之后发现原来密码后端换成了pdbedit,要添加用户的话就用

pdbedit -a -u <用户名>

来添加用户,添加过之后就看到了很多信息,看起来比smbpasswd高级好多。

添加完之后就基本上能用了。

剩下的就是处理一下共享文件夹,格式如下看起来像这样子

[Disks]
	path           = /media/
	comment        = Mounted USB Disks
	browsable      = yes
	read only      = no
	create mask    = 777
	directory mask = 777

然后就能看到并且读写了。

更多详细的设定就去samba的官网查吧。

通关了HalfLife BlackMesa

嘛~因为看到有这么一个重制版,于是下下来重温了一下。但是再次让我感受到了国内的软件的流氓性。
顺便放个连接

下完了,安装之后一眼看过去那个启动器,不对,要管理权限?阴谋,大大的阴谋!果断的丢sandbox里面去跑,看到了一堆奇怪的东西
play.exe
cmd.exe
hl2.exe
rundll32.exe

好吧,仔细检查,play.exe是启动器,一个需要权限的启动器,毫无疑问是有问题的;cmd.exe嗯,你想干什么?hl2.exe的话是halflife本身,没问题,rundll32.exe是系统的,嗯,也没问题。

那么,问题就是这个play.exe和cmd.exe了。

play.exe做了什么,很遗憾,我还没检查出来,估计也是改一下ie主页之类的……

cmd.exe的话就好说了,打开任务管理器,切换到进程页,看看命令行,就发现了一个奇怪的东西。
一个play.bat在临时文件夹里面。

打开一看,发现以下内容

cd "www.d9zx.net RAS"
cd BMS
ren ep3_gamestats.dat gameinfo.txt
cd..
ren bink.dll Steam.dll
hl2.exe -game BMS
ren Steam.dll bink.dll
cd BMS
ren gameinfo.txt ep3_gamestats.dat
cd..
cd..

非常简陋的脚本,简陋的我都能写出来(别吐槽我,我对windows不熟悉)
脚本的内容很简单,找到”www.d9zx.net RAS\BMS”,将ep3_gamestats.dat重命名成gameinfo.txt(游戏的信息,缺失时无法游戏),然后返回”www.d9zx.net RAS”,将bink.dll重命名成Steam.dll,然后开始游戏。游戏完毕之后,再次将这两个正确的文件名改成错误的。

看到这东西的时候我差点一口水喷屏幕上……这事是人干的么……偷偷改掉几个文件名,然你不用他的启动器无法进行游戏,但是偏偏又是用这个傻瓜的方式来做,这是发布组技术不行还是良心发现?

明明是好好的一个脚本,都写好了,就直接让大家跑就是了,什么问题也没有,为什么还要费尽心思去大家用他们的启动器呢?很明显是这东西有问题……什么问题我就不知道了,我实在没有能力去反编译这个启动器。

另外还有一个问题,这个rundll32.exe在启动的时候必须联网,不联网的话游戏无法启动(尼玛死怎么这个多奇奇怪怪的东西)。

经过追踪发现,连接了65.55.162.27:443。嗯?安全连接?查询ip之后发现是微软的ip,尝试用https连接之后发现是games.metaservices.microsoft.com。卧槽,我玩个游戏而已,微软你跑出来捣什么乱?你要查就查咯,你查不到不给我玩是怎么回事?

最后这个问题还是没法解决……即使我关掉了游戏资讯查询之类的还是无法在没有联网的状况下启动游戏(启动之后就不关事了)。嘛将就着玩吧,幸好这个不是问题。