Win8下的鼠标滚轮穿透软件 AlwaysMouseWheel

新装了Windows8.1,虽然是没有激活但也是能够正常使用的。还好主要生产力工具FireFox和Sublime Text 2都是绿色版,没有多少折腾就进入了正常的状态。

嗯,但是换了系统总是会有些纠结的,比如我就发现我一直使用的MouseInc的鼠标滚轮穿透功能失效了。嗯……也许不是一个普遍现象,因为没有Google到相关的feedback。

于是想着再找另外一个轮子,反正这样的轮子已经造过很多了。找到了一款叫AlwaysMouseWheel的软件。嗯,只有这么一个功能,实测好用。

对了,你可以选择官方下载,或者微云下载

CentOS6下iptables与FTP共存方法(解决非标准端口问题)

Tips:如果想看解决方案而不是我的分析,请直接跳到文末~

为了服务器安全着想,iptables防火墙是肯定启用了的。我的iptables只允许了Web、SSH、FTP三个协议,并且为了避免大范围端口扫描,都是非标准端口。

许久不用FTP,今天登录FTP的时候发现没办法和服务器通信,具体表现在无法连接数据端口上。由于我使用的是PASV被动模式,服务器端口是随机的,思索一下即发现连接被iptables中断。使用service iptables stop停止iptables后,一切正常,遂断定为iptables阻止了FTP的连入。

但我又不想把1024~65535范围内所有的端口打开,那样当然不安全。Google之后了解到ip_nat_ftp这个模块可以达到我的需求。于是modprobe ip_nat_ftp然后service iptables restart重启防火墙测试,问题依旧。使用lsmod查询后发现,ip_nat_ftp模块竟然没有加载,而是nf_nat_ftp模块被加载了。

于是又Google,在Shorewall防火墙的一篇说明文章中发现如下说明:

Note: If you are running kernel 3.6.20 or later, then the module names are nf_nat_ftp and nf_conntrack_ftp…

可是这个对于我的问题没有帮助,因为很显然ip_nat_ftp也是nf_nat_ftp的别名,毕竟模块已经加载上了。于是我又去查询nf_nat_ftp的原理,了解到它是通过监听21端口的PASV指令来打开对应端口的防火墙的。这么一来问题就找到了:我使用的FTP端口根本就不是21,模块也就没法监听了。

找到问题后就好解决了。需要注意的是,CentOS6中/etc/modprobe.conf文件已经不存在了(但仍然可以使用,只是系统不再生成了,via)。我们需要再另外在/etc/modprobe.d/下建立一个文件。

解决方案如下:

rmmod nf_nat_ftp
rmmod nf_conntract_ftp #这一行和上一行是卸载已经载入的模块,执行时可能会报错,无视即可。
vim /etc/sysconfig/iptables-config
# 找到IPTABLES_MODULES="",修改为IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"
vim /etc/modprobe.d/ftp.conf #如果为CentOS6以下版本,可以尝试vim /etc/modprobe.conf
# 在这个文件中写上下面两行
options nf_conntrack_ftp ports=你的FTP端口号
options nf_nat_ftp ports=你的FTP端口号
# 保存退出
services iptables restart #重启防火墙,请注意先备份防火墙规则
iptables -nL
# 检查你的防火墙中是否有如下规则
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:你的FTP端口号
# 如果没有则将下面的两条规则添加到防火墙规则文件
-A INPUT -p tcp -m state --state NEW -m tcp --dport 你的FTP端口号 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

经过上面的操作后,再启动FTP客户端测试连接,此时应该可以顺利的连接上你的服务器了。

Falcon服务器文件监控平台安装笔记

Falcon的介绍:http://www.secrule.com/falcon/index.html

这里只记录一下安装过程。

1.检查inotify

uname -r #检查输出Linux系统内核是否达到了2.6.13以上
ls /proc/sys/fs/inotify #检查是否有max_queued_events、max_user_instances、max_user_watches三个文件

2.编译安装inotify-tools

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make && make install

3.下载falcon

wget http://github.com/secrule/falcon/archive/master.zip
unzip master.zip #如果提示没有unzip请自行安装 yum -y install unzip 或者 apt-get install unzip ,或者直接git clone
cd falcon-master/Release

4.修改安装前缀
因为wiki里面写的inotfy-tools的安装位置是/usr,而check.sh里写的是/usr/local,需要修改check.sh第15行修改成:

if [ -d /usr/include/inotifytools ]
原文是 if [ -d /usr/local/include/inotifytools ]

5.安装环境检查

chmod a+x check.sh
./check.sh

输出需要是:

Found inotify success!
Found inotifytools success!
Found mysql-dev environment success!

才可继续安装。如果第一行、第二行没有出现请检查上面的步骤是否安装成功,如果第三行没有出现,请安装mysql-dev

yum install mysql
yum install mysql-devel

6.安装falcon控制中心
这个是网页端,PHP写的,安装之前保证自己有Web环境,lnmp/lamp等均可。

cd ../ #请确定你切换到了falcon-master目录
cp -r falconconsole/ /home/wwwroot/falcon/ #路径请自己修改
vim /home/wwwroot/falcon/public/config.inc.php #路径同上

这里写上数据库信息,有中文注释,如果PUTTY不是utf-8编码的话记得修改,或者用ftp编辑好再上传

7.配置falcon主程序

vim src/conf/global.conf #请确定你现在处于falcon-master目录

这里设置和上面一样的MySQL地址和数据库,然后请修改需要监控的web目录,注意要以/结尾

8.编译falcon

cd Release #请确定你切换到了falcon-master/Relase目录
make

9.安装falcon数据库和控制台
访问http://<你的域名>/falcon/install.php,导入数据库并设置管理员

10.运行falcon

ls -al #检查是否有falcon文件
chmod a+x falcon #保证执行权限
nohup ./falcon start >falcon.log 2>&1 & #在后台无间断运行falcon
ls -al #检查是否生成了falcon.log日志信息

11.登录falcon
访问http://<你的域名>/falcon/,登录

12.测试falcon

touch /home/wwwroot/test.php #创建一个测试php文件
rm /home/wwwroot/test.php #把测试的php文件删除
wget https://gist.github.com/oott123/6173352/raw/2011.php -O /home/wwwroot/test.php #下载一个PHP木马
cat /home/wwwroot/test.php #观察木马是否被自动删除
ls -al /home/virus/ #观察隔离区

然后访问falcon前台观察是否有相应日志

13.设置自动启动

wget https://gist.github.com/oott123/6173433/raw/startfalcon.sh
pwd #查看当前目录
vim startfalcon.sh #编辑其中的/root/falcon/falcon-master/Release/为你的falcon目录
chmod a+x startfalcon.sh
vim /etc/rc.d/rc.local

在rc.local中加入以下

/root/falcon/falcon-master/Release/startfalcon.sh &

重启测试

使用测评:
在测试了寥寥几个文件之后,falcon多次崩溃(Segmentation fault),稳定性存疑。不过思路是好的,也许可以用一用~

附图一张Falcon

吐槽知乎日报的坑爹产品以及知乎日报网页版

知乎日报推出的一周内我就装上了这个看起来很不错的应用。第一个版本用了几周,感觉就是真的很好。内容广度堪比百科,深度也刚好适合我,导致我装了以后每天打开频次最多的APP就是知乎日报了。有的内容很有意思,会随手复制或者分享给QQ上的某些好友。

我是一个懒得更新应用的人,所以我不知道什么时候它推出了所谓的1.4版,而我还在用1.0(ps.我对版本号的记忆力不行,只是大概说一说)。看到的那一天随手更新了,然后满怀期待的打开它。首先就看到设置里多了夜间模式、大字体。果断打开了。离线下载这功能对于我没用,我一般是更新的时候就看掉了。于是就打算继续用。

接着我就遇到了大家都遇到了的奇葩问题——看到一个精彩的,打算分享给好友。戳右下角分享按钮……咦。这个要读进度是怎么回事。于是等啊等……然后我奇葩的看到一副图片出现在我的QQ聊天框里。

O…T…L……

这个分享是在反人类吗?

我特别想抓着产品的肩膀猛摇。之前的分享链接又臭又长就算了(会在后面附加&_utm*的统计信息,明文的哟,其实我觉得完全可以隐蔽一点实现),起码还是个网页,还在可以看的范畴,这下可好,变成图片了要怎么看……且不说保存到笔记里面无法搜索,对方是手机用户的情况你们没考虑吗?就算你做的图片宽度不大,对方是手机用户的情况你们考虑了,可是你们考虑了QQ这玩意会压缩图片的嘛……

然后我就选择用复制的方法来分享……好吧这个问题不知道是我自己问题还是怎么,反正我永远只能选中一行文字,没法向上或者向下。于是我“整个人都傻逼了!”

然后……然后有一天我闲得蛋疼……然后我就在我手机上把代理设成电脑上的BurpSuite然后开始监听……结果就整理了一下知乎日报1.4版所使用的API,写了一堆神奇的代码来实现了一个网页版。

顺便吐槽一句,知乎日报连API都很奇葩。比如今天是2013年8月6日,在API请求的时候URL里面是20130807才能抓到今天的消息(而不是20130806)。

好了,放解决方案,也就是知乎日报网页版:

戳这里访问(Powered By MoPass,我实在找不到合适的国内空间了,因为数据都是现抓的,放国外太慢)

SAE/BAE/全平台静态文件加速CDN – Layer

一直记得SAE上有个很好很有名的CDN脚本叫SaeLayerCDN,最近突然想Layer难道没有BAE版本的么。Google翻了一下,还真没有BAE上能用的,于是在github上fork了一份SaeLayer的源码,开始移植。

移植的时候就打算做SAE/BAE/标准PHP几个平台的通用版,一开始叫LayerBAE,后来索性就叫Layer了,原作者起名的意图好像就是说处于网站和静态服务器之间的一个“加速层”吧,所以干脆就叫Layer比较好了。当然你要叫BAELayer或者LayerBAE什么的都随意啦~

主要的改进就是让他支持了SAE和BAE或者是本地的缓存三种平台,然后增加了一些配置更加方便使用,增加了刷新缓存的功能,还有就是用了比较灵活的组装,如果想增加平台的话只要再加几个文件就能轻松拓展了。

这个项目的下一步开发方向就如Issues所写吧,这里会更新项目动态。

项目地址:Layer

至于安装方法我就不多写了,和SaeLayerCDN一样。

湖南高考录取状态查询小助手

怎么说呢,一年前的今天写了这个软件,当时在班级群内共享,没有发布出来。

现在成了一名答疑志愿者,自然就想到了这个东西。虽然说一批的专业大家都差不多快录取完了我才想起来这个,但是发布出来总归是好的。

软件截图

开源,易语言,轻喷。

程序下载:一般用户请点击这里下载软件

项目地址:git@OSC

源码下载:git@OSC

国内代码托管服务git@OSC,GitCafe和CSDN Code的简单对比

最近发现oschina全面开放了免费的git@OSC,特地登录试用了一番,把自己在github的一个很久没有更新的项目迁移了过来。

git@OSC 目前全面开放,支持1000个public或者private库,相当于使用没有任何限制。试用的感觉也非常舒畅,虽然没有github那么高端大气,但是对于国内小团队协作、国内项目开源已经是足够使用了。开源中国提供的这个git服务也相当的大气,大气到令我惊叹。之前在用某大学自己搭建的私有GitLab,对GitLab这个项目有一定的了解,感觉还不错。git@OSC的出现令我以前一亮——也许这就是我需要的私有git服务,或许也包括,开源项目托管服务。

再说GitCafe和CSDN的Code。前者成立有一段时间了,不过需要邀请码,当时懒得申请于是作罢。这几天貌似不用邀请码了,于是注册了一个。CSDN code貌似是自动发放邀请码,好像是内部有个队列,每天发放多少人。反正我申请后第二天就拿到了邀请码。两个服务都是免费500M,前者私有是付费的,后者的私有说是内测期间免费,之后不知情。CSDN Code的页面设计略有老土的气息,和一成不变的CSDN首页一样红红的,不喜欢。GitCafe页面比较赞,和GitHub一样有Pages服务(没记错吧?),总体而言是个有模有样的服务。而CSDN则略显空洞,上面的public项目基本上都是大家测试的时候用GitHub给克隆过来的,没有什么好说的,应该是在内测的原因。

简单对比之后发现,git@OSC给我的感觉最好,或许是由于一直关注oschina的缘故。于是将最近一个项目放到了git@OSC,体验之后再做抉择。

nginx二级域名泛解析到子目录

需求:自己VPS上跑的是军哥的LNMP,不想装什么面板。但是由于还要给其它人开空间,为了省去绑定一大堆二级域名的功夫,决定研究一下如何在nginx下二级域名泛解析,绑定到子目录。

具体的要求如下:

域名*.example.com均解析到/home/wwwroot/example目录下,创建数个子文件夹如example.com、test.example.com
对应的域名能够直接解析到对应的目录,如访问test.example.com能够访问/home/wwwroot/example/test.example.com下的目录

在网上找了一堆,大部分是用正则匹配server_name然后set $www_root $1;root /home/wwwroot/exmaple/$www_root;这样的。我自己测试了好多次之后发现,index配置偶尔会失效。于是自己钻研琢磨,写成了下面这个样子:

server
        {
                listen       80;
                server_name example.com *.example.com;
                root  /home/wwwroot/dimpurr/$host/;
                #以下配置省略……
        }

完美解决。

CentOS 6.4 x64 安装Tengine+MaraiaDB+php-fpm的记录

学校BBS的新机器67,主要是用来做一个反向代理到216然后加速外网访问,因为学校对67所在的网段有电信的加速部署,所以外网访问很快。(此处67和216为机器IP的最后一段,这里略去完整IP)

新的机器配置还不错,4G的内存和16个核心的CPU(哎……CPU怎么那么多,当初申请的时候才要了8核来着。),贴出来炫耀一下……

 [oott123@FastBird ~]$ free -m
              total       used       free     shared    buffers     cached
 Mem:          3830       1117       2713          0         67        745
 -/+ buffers/cache:        304       3526
 Swap:         3967          0       3967
 [oott123@FastBird ~]$ cat /proc/cpuinfo
 processor       : 0
 vendor_id       : GenuineIntel
 cpu family      : 6
 model           : 45
 model name      : Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
 stepping        : 7
 cpu MHz         : 2000.000
 cache size      : 20480 KB

参数就不泄漏太多了……总之用的虚拟化技术其实是VMWare(学校Win平台居多导致的)。由于是生产环境,所以悲剧的一点就是不能主动连接外网,对外监听的端口也只开放了80,ssh啥的也要经由VPN才能爬。这次想着服务器条件不错,再加上对速度有一定的要求,打算用Tengine做动静分离的反向代理。很明显这台服务器是负责静态加速的,那么为什么要安装MariaDB和php-fpm呢?

嗯……答案就是我闲的蛋疼了(大雾)。【其实是有一些特殊需求不好说太多。

好了差不多就这样,接下来整理我的TMP安装过程。由于是学校的机器,让信息中心的老师装了CentOS6.4,结果到手以后发现是完整版,各种软件包齐全啊……首先把碍事的mysql卸载掉。

 yum remove mysql mysql-*

一定要卸载掉的原因是这货会和MariaDB冲突……接下来的安装顺序是Tengine->MariaDB->php-fpm

Tegine是编译安装的,源码包和jmalloc都是从官网下载之后SFTP到服务器上的。执行Tegine带jmalloc的编译如下:

 yum install pcre-devel #这个是pcre包,rewrite要用到。
 ./configure --user=apache --group=apache --with-http_stub_status_module --with-http_gzip_static_module --with-http_sysguard_module --with-http_concat_module --with-jemalloc=../jemalloc-3.4.0
 make && make install

不需要太多的模块,因为Tegine支持DSO动态模块加载,之后要加模块可以单独添加。再说这服务器连443端口都没开,ipv6因为是新机房也部署不到,所以ipv6和ssl也没有带进来。由于216上的网页文件都是给的apache/apache这个属主,所以这边也是一样的给apache。这台机器编译起来很爽,1分钟不到就完成了。

然后我从网上下载了别人的nginx的init.d给复制到了对应的目录……这个过程,捂脸就不说了……

接下来是MariaDB,选用5.5稳定版。按官方的安装攻略我如果要rpm包的话得配置他家的yum源,不幸的是67不能访问外网,只得自己手动下载这几个文件:

 http://yum.mariadb.org/5.5/centos6-amd64/rpms/MariaDB-5.5.31-centos6-x86_64-compat.rpm
 http://yum.mariadb.org/5.5/centos6-amd64/rpms/MariaDB-5.5.31-centos6-x86_64-common.rpm
 http://yum.mariadb.org/5.5/centos6-amd64/rpms/MariaDB-5.5.31-centos6-x86_64-shared.rpm
 http://yum.mariadb.org/5.5/centos6-amd64/rpms/MariaDB-5.5.31-centos6-x86_64-server.rpm
 http://yum.mariadb.org/5.5/centos6-amd64/rpms/MariaDB-5.5.31-centos6-x86_64-client.rpm

给出的地址是centos6,x64,Maria5.5的下载地址,别轻易对号入座。下载完后按上面的顺序安装即可:

 rpm -ivh MariaDB-5.5.31-centos6-x86_64-compat.rpm
 rpm -ivh MariaDB-5.5.31-centos6-x86_64-common.rpm
 rpm -ivh MariaDB-5.5.31-centos6-x86_64-shared.rpm
 rpm -ivh MariaDB-5.5.31-centos6-x86_64-server.rpm
 rpm -ivh MariaDB-5.5.31-centos6-x86_64-client.rpm #选装,提供mysql指令

顺序一定要对……先compat,再common,再shared,最后才是server。如果按照官方的来的话倒是好办,设置好直接yum会自动处理依赖关系的。

安装完MariaDB记得执行安全初始化:

 service mysqld restart #开启MariaDB
 /usr/bin/mysql_secure_installation

然后向导会引导你设置root密码,禁止空用户连接等。

最后是php-fpm的安装。先看看自带的php是哪个版本的:

 [oott123@FastBird ~]$ php -v
 PHP 5.3.3 (cli) (built: Feb 22 2013 02:51:11)
 Copyright (c) 1997-2010 The PHP Group
 Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

好嘛,直接就是5.3.3了。那好办,yum install php-fpm直接装上php-fpm就可以了。

还有就是把php-fpm和tegine联系起来。我是让php-fpm监听unix socks了,如下:

 vim /etc/php-fpm.d/www.conf
 #修改处:listen = /tmp/php-cgi.sock

 vim /usr/local/nginx/conf/fastcgi_params
 #文件全文
 fastcgi_param  QUERY_STRING       $query_string;
 fastcgi_param  REQUEST_METHOD     $request_method;
 fastcgi_param  CONTENT_TYPE       $content_type;
 fastcgi_param  CONTENT_LENGTH     $content_length;

 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
 fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
 fastcgi_param  REQUEST_URI        $request_uri;
 fastcgi_param  DOCUMENT_URI       $document_uri;
 fastcgi_param  DOCUMENT_ROOT      $document_root;
 fastcgi_param  SERVER_PROTOCOL    $server_protocol;
 fastcgi_param  HTTPS              $https if_not_empty;

 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
 fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

 fastcgi_param  REMOTE_ADDR        $remote_addr;
 fastcgi_param  REMOTE_PORT        $remote_port;
 fastcgi_param  SERVER_ADDR        $server_addr;
 fastcgi_param  SERVER_PORT        $server_port;
 fastcgi_param  SERVER_NAME        $server_name;

 vim /usr/local/nginx/conf/nginx.conf
 #server字段的location配置
         location ~ .*\.(php|php5)?$ {
                 fastcgi_pass unix:/tmp/php-cgi.sock;
                 fastcgi_index index.php;
                 include fastcgi_params;
         }

最后就是对各个软件设置开机自启动:

 chkconfig mysqld on
 chkconfig php-fpm on
 vim /etc/rc.local #加入一行/etc/init.d/nginx start用来开启Tegine

完工。