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一样。

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

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

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

软件截图

开源,易语言,轻喷。

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

项目地址:[email protected]

源码下载:[email protected]

国内代码托管服务[email protected],GitCafe和CSDN Code的简单对比

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

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

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

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

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核来着。),贴出来炫耀一下……

 [[email protected] ~]$ free -m
              total       used       free     shared    buffers     cached
 Mem:          3830       1117       2713          0         67        745
 -/+ buffers/cache:        304       3526
 Swap:         3967          0       3967
 [[email protected] ~]$ 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是哪个版本的:

 [[email protected] ~]$ 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

完工。

Typecho的CommentToMail插件不支持https的问题

如题。

在仔细查看了CommentToMail的插件源码后,我发现了这个:

 /**
 * 发送异步请求
 *
 * @access public
 * @param string $filename 存放邮件的临时文件名
 * @param string $siteUrl 网站连接
 * @return void
 */
public static function asyncRequest($filename,$siteUrl) {
    $dmpt=parse_url($siteUrl);
    $host = $dmpt['host'];
    $port = $dmpt['port']?$dmpt['port']:80;
    if(substr($dmpt['path'], -1) != '/') $dmpt['path'] .= '/';
    $url = $dmpt['path'].'action/comment-to-mail';
    $get='send='.$filename;
    $head = "GET ". $url . "?" . $get . " HTTP/1.0\r\n";
    $head .= "Host: " . $host . "\r\n";

它很明确的表达了:我压根就没打算支持SSL,你看我都是用纯粹的fsocksopen在异步请求呢!

既然如此,我也顺便就把博客的ssl去掉了。平心而论,博客加ssl纯粹就是好玩。至于安全性需要加强的部分,我已经把它挪到其它的子域名去了,也乐得一个自在。

设置SPF记录,防止邮件地址被盗用

因为某些原因,我的域名被各种广告机认为是企业域名,然后疯狂的给我群发各种代开发票偷税漏税的邮件。嗯,我就不说我真的不需要这些了。
由于更多的原因,我的邮箱是开启了“错误地址转发”功能的,也就是说如果给一个不存在的邮箱地址发送邮件,那么它会被投递到我的主邮箱中。方便我使用的同时也就导致了大量垃圾邮件的产生。
最近我频繁收到一些奇怪的退信,大致的意思就是我发到他们那边的邮件邮箱是不存在的。而我却压根没有发过那些邮件。检查了一下其中一封邮件,如下:

您好!您的邮件不能成功的递送到指定地址。这是一个永久的错误,因此不得不放弃继续递送。

<[email protected]>, the user's maildir is over the allowed quota (size : 105328857)

--- Below this line is a copy of the message.
Received: from SCWT-18.yinksoft.com ([115.63.10.56])
(envelope-sender <[email protected]>)
by 192.168.16.101 with ESMTP
for <[email protected]>; Sun, 05 May 2013 03:25:13 +0800
Date: Sun, 5 May 2013 03:25:16 +0800
Subject:  Dz,
From: " " <[email protected]>
Reply-To: " " <[email protected]>
To: <[email protected]>
(以下省略)

很明显,我是不会有[email protected]这么一个邮箱的。看Received字段,有一个很神奇的域名:yinksoft.com。Google之,发现是一个垃圾邮件发送公司,鄙视。
稍微思考了一下,这封退信是这么到我的邮箱里面来的:这个叫yinksoft的公司(或者是它卖的软件)其中投递了一封邮件给[email protected]。而zengcheng这个倒霉鬼的邮箱早就被发爆掉了,所以chinalightsolar的邮件服务器就把这封邮件退回来了。那么退到哪里呢?好死不死的,这个yinksoft的发信软件把发件人地址填成了我域名下的邮箱wljgipl9400@best33.com。由于chinalightsolar是一个正规的邮件投递者,Gmail就没有把它当成垃圾邮件过滤,从而经过错误地址转发到达我的邮箱。
那么事情就很明显了,我的域名best33.com被盗用,盗用者伪装成我的域名下面的邮件地址给别人发送邮件。好吧,这种情况真够神奇的,由于SMTP的协议缺陷,这样做是完全没有问题的。那么要怎么解决呢?答案就是传说中的“SPF”记录了。
SPF记录的工作原理也很简单。把一条TXT记录加入到你域名下就能工作。工作的时候,接收邮件的服务器对你的DNS服务器进行查询,确认你的SPF记录,而后对SPF记录中记载的服务器进行查询,和收到邮件的IP地址比对就能确认这封邮件是不是你发送的。
由于SPF记录其实就是一条TXT记录,现在的主流解析商比如DNSPod都已经支持了。在@下的TXT记录下加入一句SPF记录就好了。我这里是Gmail的,其它邮箱的请查询你自己的提供商:
v=spf1 include:_spf.google.com ~all
只需这么一个记录就能将垃圾邮件阻挡在外啦~解析完成后可以自己dig查询一下:

$ dig best33.com txt

; <<>> DiG 9.9.2-P1 <<>> best33.com txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34100
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;best33.com.                    IN      TXT

;; ANSWER SECTION:
best33.com.             600     IN      TXT     "v=spf1 include:_spf.google.com ~all"

;; Query time: 102 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri May 10 13:47:00 2013
;; MSG SIZE  rcvd: 87

嗯,看起来毫无问题,尝试外发和收信都无压力,问题算是解决了。