Monthly Archives: March 2010

FreeBSD安装Ruby on rails

通过ports安装的ror:

#cd /usr/ports/lang/ruby18

#make install clean

#cd /usr/ports/www/rubygem-rails

#make install clean

然后在根目录下运行:

rails demo

就报错了:undefined method `camelize’ for “app”:String .最近Google被墙了,所以翻墙查询后得知还需要安装一个东西:

#cd /usr/ports/converters/ruby-iconv

#make install clean

Snort中的rules和emergingthreats的关系

应为pfsense装的是1.20版的,安装snortpackage以后,把你在snort.org注册的会员名和密码输入进去以后还是无法自动下载rules(snort防火墙的规则,仅仅安装snort后没有rules是无法正常做的入侵检测的),后来在snort.org上登录以后手动下载了rules的gz压缩包后放在snort目录下就OK了,然后进入web管理中的”snort”里面就能看到很多rules,例如

根据你的需要选择相对应的rules,然后save就行了。不过再snort.org的网站上看到过说明,如果没有购买snort的相关服务的话,下载的rules就不是最新的。安装过rules后就能自动升级了,不过我第一次自动升级后发现了增加了一些奇怪的rules:

跟从snort.org下载的rules差不多,不过是多了一个emerging-的前缀,很多功能看起来都是一样的,google后发现emergingthreats是一个免费的snort rules合集,不用任何费用就能下载到很多爱好者自己编写的rules,用到你的snort中去。后来我就把所有的非emergingthreats的rules给取消了,之使用ET的rules,效果还不错。

eHow竟然给我支付了

几年前心血来潮在eHow上面注册了用户,发了几篇文章后来就再也没有管过了,不过今天在支付RAM host的账单的时候发现账户里面好像多了$10,查询了一下才发现原来是eHow给我支付的分成。

自己辛辛苦苦做WordPress网站,做AdSense弄了一年多还没有收到一分钱,赔进去了不少空间的费用,最后倒是这个赚到了我在互联网广告“事业”上的“第一桶金”,上图为证:

FreeBSD安装各项服务后安全工作

1 隐藏PHP版本信息

修改php.ini
将expose_php On
改为
expose_php Off

2 隐藏Apache信息

这里有两条语句,需要添加到httpd.conf文件中:

ServerSignature Off
ServerTokens Prod

3 隐藏lighttpd输出版本信息

修改lighttpd.conf

## send a different Server: header
## be nice and keep it at lighttpd
server.tag                 = "NoServer"
##改成你喜欢的名字

4 更改php的安全设置

SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:

magic_quotes_gpc = Off

这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,这对防止sql注射有重大作用,但是对性能有一定影响。所以我们推荐设置为:

magic_quotes_gpc = On

一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:

display_errors = Off

针对TTL返回值

可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接ping对方系统得到的TTL值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。

通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64。比如,ping一个Red Hat系统,显示如下:

Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

用以下命令修改Red Hat Linux的TTL基数为128(本来为64):

# echo 128 > /proc/sys/net/ipv4/ip_default_ttl

若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行:

net.ipv4.ip_default_ttl = 128

保存退出后,再ping 192.168.0.1,TTL基数就变为128了。

针对3389端口和22端口

有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。

为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在:

#iptables -I INPUT -s ! xx.xx.xx.xx -p tcp –dport 22 -j DROP

利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:

#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -I PREROUTING -p tcp –dport 3389 -j DNAT –to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -p tcp –dport 3389 -j MASQUERADE

第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。

这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。

针对netcraft

netcraft是一个很厉害的扫描引擎,它通过简单的TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。

上面介绍的几种方法对netcraft来说,均不奏效。针对netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统:

#iptables -t nat -I PREROUTING -s 195.92.95.0/24
-p tcp –dport 80 -j DNAT –to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -s 195.92.95.0/24
-p tcp –dport 80 -j MASQUERADE

由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。

干净的FreeBSD安装Mysql PHP lighttp过程

昨天着了台比较新的Dell 440,准备装一台BSD系统作为web服务器。顺手刻了一张FreeBSD 8.0的光盘,系统的安装过程就不再说了,不过安装各种服务的时候倒是遇见了不少麻烦。

1 首先更新ports

尽管是新下载的iso,但是ports肯定已经更新过了,所以先使用portsnap更新ports

portsnap fetch extract
'第一次使用下载一个更新包,比较大60MB左右,以后就不用了
portsnap fetch update
'以后就可以使用这个命令来更新了

也可以选择用csup来升级ports,不过速度慢,但是听说比portsnap安全一些:

cd /usr/share/examples/cvsup
cvsup -g -L 2 -h cvsup9.freebd.org ports-supfile
'用默认的cvsup.freebsd.org的经常无法更新,所以换个用得少得

但是这两种方法最好不要混用,貌似一个会更改另一个的INDEX。

2 提高下载速度

ports安装软件默认的下载速度比较慢,再加上很多镜像的服务器都在国外,经常每分钟10kb左右。所以要安装一个多线程下载工具axel(类快车)。

cd /usr/ports/ftp/axel
make install clean

安装好后,编译/etc/make.conf,使其生效,代替系统默认的fetch下载软件进行工作
ee /etc/make.conf
ee 为文本编辑工具,比较人性化,是FreeBSD内带的
然后添加如下内容

FETCH_CMD=axel
FETCH_BEFORE_ARGS=-n 5 -a
FETCH_AFTER_ARGS=
DISABLE_SIZE=yes

这里最主要的地方是
FETCH_BEFORE_ARGS=-n 5 -a
表示五线程下载,如果你要10个线程同时下载,就使用 -n 10 、 如果你想使用类迅雷的,从多个服务器同时下载的工具,只要加上 -Sx,x为下载的的最大源数 、 例:你想五个线程,从五个服务器进行下载就写成 、
FETCH_BEFORE_ARGS=-n 5 -S5 -a
不过在安装这里的时候遇见了问题,影响了以后的PHP的安装过程,所以建议先把各种lang的ports安装后再安装这个,因为axel需要用到devel/gettext的port,跟perl冲突,也是我安装了好几次才得到的教训。

vim在编辑一些配置文件的时候方便,所以也可以下载vim替代ee

cd  /usr/ports/editors/vim
make -DWITHOUT_X11 install clean

如果不加上WITHOUT_X11的话,就会下载很多GUI相关的lib,因为服务器并没有安装GUI,所以下载起来很慢。
想查看可用的makefile参数的话:

grep define Makefile

默认安装的vim很丑陋,没有语法高亮并且编辑方式还是最原始的编辑,/usr/local/share/vim/vim70/里有一个vimrc_xxx的文件,你把它cp到/usr/local/share/vim/,改名为vimrc就ok了。

3 安装Mysql数据库

这个简单,不过mysql有好几个版本选择,我选择的是5.1

cd /usr/ports/databases/mysql51-server
make install clean

安装后要安装一些初始数据和更改文件的权限,否则日后会出错

/usr/local/bin/mysql_install_db
chown -R mysql /var/db/mysql/
chgrp -R mysql /var/db/mysql/

添加mysql到rc.conf中,能够随机启动

echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start
/usr/local/bin/mysqladmin -u root password newpassword
'在这里设置你的新密码

安装后要更改你的配置文件,msyql默认的配置运行起来比较消耗内存

cd /usr/local/share/mysql
cp my-small.cnf /etc/my.cnf

在[mysqld]下面加入

bind_address = 127.0.0.1
'安全起见,只允许本机连接数据库
max_connections = 65535
'最大连接数
max_user_connections = 65535
'最大用户连接数,这个设定可以省略

还有 skip-networking前面的注释一定要去掉,禁止mysqld在tcp端口监听

4 安装web服务器lighttpd

关于web服务器的选择是个仁者见仁的问题,反正apache是不准备用了,nginx比较火,不过关于配置的fastcgi的问题很多,还是选择lighttpd。

cd /usr/ports/www/lighttpd
make install clean
mkdir -p /usr/local/www/data
touch /var/log/lighttpd.access.log
touch /var/log/lighttpd.error.log
chown www:www /var/log/lighttpd.access.log
chown www:www /var/log/lighttpd.error.log

然后要修改lighttpd的配置文件,支持fastcgi.默认的和网上很多关于Lighttpd的配置文件默认路径都有问题,我试验后下面的配置能够运行

fastcgi.server = ( ".php" =>
( "localhost" =>
                     (
                        "socket" => "/tmp/php-fastcgi.socket",
'默认的路径不对
                        "bin-path" => "/usr/local/bin/php-cgi"
'默认的是php-cgi-cgi,也需要修改
                      )
                   )
)

其实很简单,就是把这几行的注释去掉,然后把路径不一样的改一下。
添加启动服务

echo ‘lighttpd_enable=”YES”‘ >> /etc/rc.conf

安装后即使lighttpd在80端口运行,不过如果忘了更改/usr/local/www/data的权限的话,你也是什么也看不到

chown -R www /usr/local/www/data/
chgrp -R www /usr/local/www/data/

然后就可以在/usr/local/www/data/目录下面创建一个phpinfo()测试了,一切正常,但是由于php extensions还没有安装,所以看不到mysql等扩展的支持。

5 安装PHP

起初安装了好几次,都是最后报错,原因很古怪。后来重装系统后先port了PHP就没有问题了,发现是安装axel时候需要的一个gettext跟perl的一个依赖有冲突。

cd /usr/ports/lang/php5
make install clean

然后就是一些必要的php扩展

cd /usr/ports/lang/php5-extensions
make config install clean
cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini
'拷贝一份php配置文件

修改php.ini 增加gzip压缩输出:

zlib.output_compression = On

然后重启lighttpd,在phpinfo中就能够看到mysql的支持信息了。

默认的csh不太方便,修改为bash

cd /usr/ports/shells/bash2
make clean install
chsh -s /usr/local/bin/bash

Pfsense软路由定时限制迅雷下载速度

单位的NAT代理服务器原来是用一台FreeBSD,不过后来配置pf很麻烦,并且达不到限制迅雷下载速度的目的,前天装了个Pfsense,使用以后能够限制迅雷等P2P下载软件的速度。不过也不能一直限制速度,如果想要下载电影的话晚上可以开放速度,反正也不会影响其他人。traffic shaper管理里面倒是有个手工更改是否启用的选项,但是每天都要定期点击也不方便,最好能够自动运行。

pfsense有一个cron的package,装了以后就能在webGUI里面直接设置定期启动的任务,我可以制定两个任务,分别是:晚上11开放下载速度;早上8点限制下载速度。但是怎么才能做到使用shell开放或者限制下载?直接调用pfctl的话,不知道配置文件在哪里。pfsense是使用php来管理整个系统的,php的文件在 /usr/local/www目录下面,每个php都引用了guiconfig.inc这个文件,更改配置的代码如下:

require("guiconfig.inc");
if ($_POST['submit']) {
$pconfig = $_POST;
$config['shaper']['enable'] = $_POST['enable'] ? true : false;
write_config();
}

$config[‘shaper’][‘enable’]是用了控制pfsense中的traffic shaper(流量限制)是否启用,如果设定后调用一write_config()就能生效了。我的思路是在/usr/local/www分别建立enable.php和disaple.php两个文件,enable.php的内容如下:

require("guiconfig.inc");

$config['shaper']['enable'] = FALSE;

write_config();

同理可以建立enable.php:

require("guiconfig.inc");

$config['shaper']['enable'] = TRUE;

write_config();

如何在cron里面调用这两个文件又成了问题,用

/usr/local/bin/php -q /usr/local/www/disable.php

的话,会报错,好像是pfsense的auth认证失败,那么我就直接用fetch来

fetch http://username:password@127.0.0.1/disable.php

username和password是你的pfsense的管理员和密码。

我后来有建立了两个sh分别用于开启和关闭,如下图:


在cron里面分别创建两个任务,分别fetch两个文件就OK了。

纯CSS制作的bubble

以前自己作一些demo的时候想作一些bubble特效,主要用于突出表现一些用户的话,参考了一些介绍,用的是CSS加上背景图片的方法,但是效果很垃圾,自己也就没有再做过,不过发现了一个用纯CSS制作的bubble,看起来很不错。

效果非常不错,并且不用背景图片来实现。

并且也可以实现带边框的效果。

demo page

浏览器支持:IE6和IE7这样不支持css 2.1的浏览器无法支持。在IE8下面看起来非常奇怪古怪,因为IE8没有完全支持CSS3,只在safair和firefox里面正常显示。想在国内使用估计还是有难度,连IE8都有问题,估计到windows 8出来的时候才能用。