李东写的一段利用 python PIL 模块 显示 Mysql 数据库中 Blob 字段图片的方法。
首先要修改 Django项目的 urls.py
增加下面3行
# the follow two product_image add by lidong ,use Django PIL to view a image in mysql blob
(r'^product_image/(?P<id>\d+)/(?P<width>\d+)[_|*](?P<height>\d+)\.(?P<ext>\w+)','image.view'),
(r'^product_image/(?P<id>\d+)\.(?P<ext>\w+)','image.view'),
然后创建一个 image.py 程序。
1 #coding=utf-8
2 '''
3 $Id$
4 lidong 创建的一个显示表 icbase_image 中 以 blob 字段保存的图片的视图
5 url 必须是如下几种方式:
6 显示 icbase_image 表中 id = 222, 2112, 2 的图片。
7 /site_prefix/product_image/222.jpg
8 /site_prefix/product_image/2112.png
9 /site_prefix/product_image/2.gif
10
11 或者指定宽度和高度
12
13 /site_prefix/product_image/222/100*200.jpg #显示 width = 100 ,height = 200 的图片
14 /site_prefix/product_image/222/200_400.jpg #显示 width = 200 ,height = 400 的图片
15 宽度和高度的分隔符是 * 或者下划线 _ 二者之一
16
17 '''
18 from django.http import HttpResponse
19 from icbase.models import Image as DBImage
20 import Image, ImageDraw
21 import StringIO
22
23
24 def view(request,id,width=None,height=None, ext='jpg'):
25 '''默认是按照 thumbnil 方法进行图片的缩小,如果要严格按照 width, height
26 尺寸进行缩放,需要在调用resize_img 方法时加上一个参数
27 buf = resize_img(buf,size,type,method="resize")
28 '''
29 img = DBImage.objects.get(pk=id)
30 buf = img.data
31 IMG_TYPE= {'jpg':'JPEG','jpeg':'JPEG','png':'PNG','gif':'GIF'}
32 ##有宽和高两个参数,调用 PIL进行图片缩放
33 # 否则直接返回数据库中原始二进制数据
34 if width and height:
35 type = IMG_TYPE.get(ext,'JPEG')
36 size =(int(width),int(height))
37 buf = resize_img(buf,size,type)
38 return HttpResponse(buf,"image/%s" %ext)
39
40 def resize_img(imgdata,size,type="JPEG",method='thumbnail'):
41 ''' size 是一个元组比如(128,128)
42 type 是文件类型,默认是 JPEG, 也可以是'PNG','GIF','PCX'等
43 参考 http://www.pythonware.com/library/pil/handbook/index.htm
44 '''
45 buf = StringIO.StringIO()
46 im = Image.open(StringIO.StringIO(imgdata))
47 if method=='thumbnail':
48 im.thumbnail(size)
49 else:
50 im = im.resize(size)#resize成(width,height)像素大小。
51 im.save(buf,type)
52 return buf.getvalue()
Vimperator 的下载位置 https://addons.mozilla.org/zh-CN/firefox/addon/4891/
firefox装上vimperator插件时,如vim飞一般的操作,让vimer们很是开心。
vimperator 默认是没有主菜单和地址栏之类的。有时想看到它们还是敲入命令。
一直想写个脚本实现之,苦于网上的资料很少,最后在看一些插件的代码时,才懂怎 么写:
=======================
将以下代码加入: ~/.vimperatorrc ( windows 下应该是_vimperatorrc)
javascript. <<EOF
function set_gui( ){
if ( options["guioptions"]==”rb” ) {
options["guioptions"]+=”mTB”;
}else{
options["guioptions"]=”rb”;
}
}
EOF
map ,s <Esc>:js set_gui(); <CR>
有些时候,我们在复制/移动文件到另一台机器时会用到scp,因为它比较安全。但如果每次都要输入密码,就比较烦了,尤其是在script里。不过,ssh有另一种用密钥对来验证的方式。下面写出我生成密匙对的过程,供大家参考。
第一步:生成密匙对,我用的是rsa的密钥。使用命令 “ssh-keygen -t rsa” 密钥
代码:
lidong$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lidong/.ssh/id_rsa):
Created directory ‘/home/lidong/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/lidong/.ssh/id_rsa.
Your public key has been saved in /home/lidong/.ssh/id_rsa.pub.
The key fingerprint is:
e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7
lidong$
生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一
个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个。(我比较懒
,不想每次都要输入密码。) 这样,密钥对就生成完了。
其中公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa
然后改一下 . ssh 目录的权限,使用命令 “chmod 755 ~/.ssh”
代码:
$ chmod 755 ~/.ssh
之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为
scp ~/.ssh/id_rsa.pub yourname@remotehost:.ssh/authorized_keys
注意,这次要输入密码。以后就不需要了。
这样就大功告成了。之后你再用ssh scp sftp 之类的访问那台机器时,就不用输入密码了,用在script上更是方便。
在Freebsd系统上,安装好的Mysql 默认启动时,数据文件的目录是 /var/db/mysql
而一般在创建系统分区的时候,往往没有太注意var这个分区的大小,以为这个就是存放日志的分区,所以一般不会给太大。 但是Mysql 如果在这里安家了,随着时间的推移,数据库和日志会越来越大,逐渐就会把 /var这个分区给填满,这样以来,系统就会出错。数据库也不会工作了。
这时就要迁移数据库数据文件的保存位置。
可以这样做。
首先停止Mysql 的服务。可以用 /usr/local/etc/rc.d/mysql-server stop
如果不管用,可以直接 ps aux |grep mysql
然后 sudo kill 那个mysql 进程。
然后就开始迁移数据了, 一般来说home空间都会划分的比较多,可以转到这里, sudo mkdir /home/mysql
然后 sudo mv /var/db/mysql /home/mysql
由于是 mv ,不是 cp 命令。所以原来目录的权限都保留了。
后面的方法就有两种途径了,一种是简单的,直接在原来的位置做个符号链接。就是快捷方式。
sudo ln -s /home/mysql/mysql /var/db/mysql
这样也可以的。
还有一种方法就是修改启动脚本,让mysql知道数据文件的新位置。
sudo vim /etc/rc.conf
mysql_enable=”YES”
增加一行 mysql_dbdir=”/usr/home/mysql/mysql”
保存后退出。
启动 mysql 服务 sudo /usr/local/etc/rc.d/mysql-server start
然后检查一下 mysql 的应用是否都正常,正常的话,就大功告成。
Zope3 的编程环境搭建
=====================================
首先要有一个 Python2.4 的运行环境。
—————————————————-
这 里是Python 的官方网站 http://www.python.org/
- 下载 2.4 版本的Python 到这里 http://www.python.org/download/releases/2.4.4/
- 我这里是一个运行WindowXP 的机器,所以下载了一个 python-2.4.4.msi 这样一个二进制的包。
- 下载后,我打算安装到D:/python24 这个目录下面。
-安装后,右键点我的电脑,然后选属性,点“高级”选项卡,然后点“环境变量”
- 然后选中path, 在最后面加上;d:/python24
-下次重启动电脑之后,就可以在命令行直接输入 python 来启动Python 了。
好 了,到目前为止 python2.4 已经装好了。下面可以安装 Zope3 了。
———————————————————————————
- 那末,Zope3 的老家在那里? http://wiki.zope.org/zope3/Zope3Wiki
- 美中不足的是,资料都是英文的,没有中文的。
- Zope-3.3.1 是现在的稳定版 Release Date: 14 January 2007
- 要下载的话到这里 http://zope.org/Products/Zope3
- 这里有好多版本,如果用于生产环境,请尽量选择最新的稳定版 Stable .
- 到目前为止 2008-12-22, 我发现3.3.1 还是最新的稳定版(带有Windows安装包),更高的版本都还是开发状态.
- 下载下来后,直接运行那个可执行程序 Zope3.3.0.win32-py2.4.exe
- 安装程序很聪明的发现了我python2.4 的安装路径是 D:\Python24\
- 所以安装程序默认的安装路径是 D:\Python24\Lib\site-packages\
- 安装完成后,我看了一下空间占用情况, python24 目录共88.2M
好了,到目前为止 Zope3.3.1 已经装好了。下面可以做一个简单的例子了。
———————————————————————————
- windows 下面和类Unix ,Linux 下面创建一个实例的方法大不相同。在linux 下面,安装完Zope3.3.1之后,可以找到这个安装目录,比如我的就装在 /usr/local/Zope3.3.1 , 进入这个目录后,直接运行 bin/mkzopeinstance ,然后按照向导操作就可以了。
- windows 下怎样创建一个例子?
– 在D:\Python24\Scripts 下面,有个mkzopeinstance.bat 的批处理文件.运行这个就行了.(我安装在D: ,你的可能安装在C:盘,到时候目录可能有些细微差别.不过你可以用Windows的文件查找功能查找"mkzopeinstance.bat"这个文 件.
– 我用记事本编辑了一下mkzopeinstance.bat 这个文件.看看里面有什吗乾坤.
– @echo off
“D:\Python24\python.exe” “D:\Python24\Scripts\mkzopeinstance” %
– 看到了,也没啥神奇的,我是这样运行的:
– 首先打开一个dos窗口,比如在开始运行输入cmd, 方法很多,我经常用这个命令进入dos窗口。然后进入D: 盘,
然后输入 D:\python\Scripts\mkzopeinstance
– 出现Directory: 后面输入 ishuqian 回车, ishuqian 是我的项目名称 我准备做个爱书签网站 ishuqian.cn
– 出现username: 输入用户名 lidong ,这个就是以后的默认管理员
– 下面要你选择密码的保存方式,
— 1,plain Text
— 2,MD5
— 3,SHA1
– 默认是1,如果用于生产环境,请选择2,或者3,这里只是开发,所以默认选择1Pain Text 文本就行了.
– 输入两遍密码
– 好了,我的项目创建完毕,现在进入项目目录 D:\>cd ishuqian
– D:\ishuqian> dir
– README.txt
<DIR> bin
<DIR> etc
<DIR> lib
<DIR> log
<DIR> var
–可以看一下 README.txt 的内容,里面对各个目录作了解释.
– 现在运行一下我们的例子 D:\ishuqian>bin\runzpe
– 硬盘闪烁n秒之后,出现两行内容,上面有HTTP:localhost:8080 server started ,说明当前运行在8080端口. 还有一个Startup time 60.117 Sec ,说明启动用了60.117秒,我敢打赌,您的运行结果一定比这个数字小. 因为我一边写这篇文章,一边打开一个DOS窗口运行这个例子,还要说的一点是,我用的笔记本电脑是10年前的非常经典的一款电脑,IBM ThinkPad 600 型.这款电脑在98年绝对是经典, 主频PII 300Mhz, 内存192M ,硬盘6G,这个配置放在当年,绝对是豪华配置了。但凭着这个笔记本电脑10年后,仍然能让我从容的写这篇文章,还能运行Zope3 程序,就说明这个老电脑堪称经典。
cd /mnt
mkdir usb
mount -t msdosfd /dev/da0s1 /mnt/usb
# 如果你在远程主机上调试 ipfw ,则强烈建议,如果不是万不得已,最好不要调试。找有经验的人写好规则然后应用。
# 当然如果你执意要在远程主机上调试 ipfw ,请先系好安全带。
# 第一,在 /etc/rc.conf 里面 加上
firewall_enable=”YES”
firewall_type=”open”
之所以 firewall_typ= “open” 就是开放的防火墙,等于没有过滤和屏蔽任何数据包。
然后你在调试,如果万一出现意外(其实不算意外,太正常了)把自己反锁在系统外面。请求机房的人帮你重启系统,你就又可以远程连接到主机了。
# vi /etc/rc.conf
复制内容到剪贴板代码:
firewall_enable=”YES”
firewall_type=”open”
firewall_script=”/etc/ipfw.rules”
firewall_logging=”YES”
# ee /etc/sysctl.conf
复制内容到剪贴板代码:
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5
编辑防火墙规则
复制内容到剪贴板代码:
# ee /etc/ipfw.rules
复制内容到剪贴板代码:
# 具体语法请参考http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/firewalls-ipfw.html
#
##################
#启动时重载规则列表#
##################
ipfw -q -f flush
#
#############
#设置命令前缀#
#############
cmd=”ipfw -q add”
#
#############
#设置DNS地址#
#############
dns=”192.168.163.2″
#
################
#公网网卡界面名称#
################
pif=”lnc0″
#
################
#不限制loopback#
################
$cmd 00100 allow all from any to any via lo0
#
###############
#允许自定义规则#
###############
$cmd 00200 check-state
#
###############
#允许与DNS通讯#
###############
$cmd 00300 allow tcp from any to $dns 53 out via $pif setup keep-state
$cmd 00400 allow udp from any to $dns 53 out via $pif keep-state
#
#####################################################
#允许http连接(limit src-addr意为限制同一地址连接数量)#
#####################################################
$cmd 00500 allow tcp from any to any 80 out via $pif setup keep-state
$cmd 00600 allow tcp from any to me 80 in via $pif setup limit src-addr 10
#
######################################################
#允许https连接(limit src-addr意为限制同一地址连接数量)#
######################################################
$cmd 00700 allow tcp from any to any 443 out via $pif setup keep-state
$cmd 00800 allow tcp from any to me 443 in via $pif setup limit src-addr 10
#
#######################################################
#允许收发电子邮件(limit src-addr意为限制同一地址连接数量)#
#######################################################
$cmd 00900 allow tcp from any to any 25 out via $pif setup keep-state
#$cmd 01000 allow tcp from any to me 25 in via $pif setup limit src-addr 1
#
$cmd 01100 allow tcp from any to any 110 out via $pif setup keep-state
#$cmd 01100 allow tcp from any to me 110 in via $pif setup limit src-addr 1
#
#########################
#允许CVSP和PORT安装/更新#
#########################
$cmd 01200 allow tcp from any to any via $pif setup keep-state uid root
#
##########
#允许ping#
##########
$cmd 01300 allow icmp from any to any out via $pif keep-state
#$cmd 01300 allow icmp from any to any in via $pif keep-state
#
####################################################
#允许FTP连接(limit src-addr意为限制同一地址连接数量)#
####################################################
$cmd 01400 allow tcp from any to any 21 out via $pif setup keep-state
$cmd 01500 allow tcp from any to any 21 in via $pif setup limit src-addr 2
#
########################################################
#允许SSH远程连接(limit src-addr意为限制同一地址连接数量)#
########################################################
$cmd 01600 allow tcp from any to any 22 out via $pif setup keep-state
$cmd 01700 allow tcp from any to any 22 in via $pif setup limit src-addr 2
#
######################
#禁止此规则以外的所有连接#
######################
$cmd 60000 deny log all from any to any
五、Unix/Linux上的后门技术和防范
对黑客来讲,入侵一个系统只是万里长征的开始,最主要的是长期占有一个肉鸡(傀儡机), 所以,后门技术往往非常重要。对于我们来讲,总是处于被动的地位,百密一疏,总有没有做到位的地方,谁都不能保证自己的系统是绝对安全的,所以不能避免我 们可能会被入侵。黑客入侵后肯定会留后门,当然,除了那些高手,境界非常高,入侵只是为了测试或者技术挑战,对于一般黑客来讲,入侵之后留个后门是很重要 的,我们要防范,当然就要了解常用的后门技术,下面就简单的讲将在Unix/Linux系统中比较常见的后门技术。
1.帐号后门
最普通和原始的后门技术,一般就是在系统中添加一个管理员帐户。
#echo”heiyeluren:*:0:0::/root:/bin/sh”>;>;/etc/passwd
#echo”heiyeluren::0:0::0:0::/root:/bin/sh”>;>;/etc/shadow
给系统增加一个uid和gid都为0(root)的帐号,无口令。
FreeBSD的密码是存储在/etc/master.passwd里面的,那么后面的命令就应该改成:
#echo”heiyeluren:::::::::”>;>;/etc/master.passwd
也可以使用程序来实现:
/*Addsuperuser*/
#include”stdio.h”
#definePASSWD_PATH”/etc/passwd”
#defineSHADOW_PATH”/etc/master.passwd”
main()
{
FILE*fd;
fd=fopen(PASSWD_PATH,”a+”;
fprintf(fd,”heiyeluren:*:0:0::/root:/bin/sh\n”;
fclose(fd);
fd=fopen(SHADOW_PATH,”a+”;
fprintf(fd,”heiyeluren::0:0::0:0::/root:/bin/sh\n”;
fclose(fd);
}
#gcc-oadduseradduser.c
#./adduser
这种方法比较傻,一般比较容易发现,特别是系统帐户不多的时候。也有的用户名起的比较迷惑人,比如起个r00t的用户名,uid和gid都是0,这样如果不注意,可能就会被蒙混过关了。
*防范方法:
这 种方法虽然比较容易发现,但是我们还是要防范,要多注意观察系统的帐户情况,本来我们系统帐户就不多,检查起来比较方便,另外也要注意那些比较少使用的帐 户是不是被更改过,比如默认的帐户有bind,它的shell是/usr/sbin/nologin,就是不能登陆的,但是黑客入侵后把它改了,比如改为 /bin/csh,那么对方就能登陆了,但是你确不知道。所以最好办法是把/etc/passwd另外备份一份,不定期的检查,同时把/etc /passwd和/etc/master.passwd设为只有root才能查看。
2.shell后门
这个比较常用,也比较流行。一般就是把root执行的shell程序通过setuid的形式把shell程序拷贝到其他能够执行的地方,然后只要用小权限用户执行该shell就能够直接获取root权限。
比如:
#cp/bin/sh/tmp/.backdoor
#chownroot:root/tmp/.backdoor
#chmod+s/tmp/.backdoor
这 样只是把sh复制了,如果你喜欢其他shell,比如ksh、csh也可以,具体你看各个不同的操作系统而定。你就可以把那个加了s标记的shell程序 放到任何目录,最好是深一点,不容易被人发现的地方,比如/usr/local/share/man之类的目录,然后你使用小权限用户登陆后执行该 shell就可以了,比如我们上面复制的shell,我们只要用小权限用户登陆后执行:
$/tmp/.backdoor
#
就可以了,当然,如何获得小权限用户,你可以使用暴力破解一些帐户,或者自己创建一个小权限的帐户。
*防范方法:
首先给各个主要目录加上我们上面说的文件指纹校验,知道某个目录下有什么文件,如果多出了可疑文件可以仔细检查。还有使用find命令来查找有没有危险的rootsuid程序:
find/-typef(-perm-4000-o-perm-2000)-print
3.Crontab服务后门
crontab命令就相当于windows下的at命令,定期执行某些任务。对黑客来讲,比如定期建立一个帐户,然后过多久就删除,这样管理员永远看不到系统中有后门,这样是非常保险的……
*防范方法:
cron的服务默认是存储在/var/spool/crontab/root目录下,定期检查cron服务,看是否有异常的任务在执行,或者如果你不使用cron的话,直接关闭掉它。
4.rhosts后门
Rhosts 文件常常被黑客利用来制作后门,如果系统开了rlogin、rexec等r的服务,因为象rlogin这样的服务是基于rhosts文件里的主机名使用简 单的认证方法,所以黑客只要将。rhosts文件设置成”++”,那么就允许任何人从任何地方使用该用户名,无须口令登陆513端口的rlogin服务就 行。而且r之类的服务没有日志能力,不容易被发现。
实现方法:
#echo”++”>;/usr/heiyeluren/.rhosts
#rlogin-lheiyelurenlocalhost
这样就不需要任何密码,直接输入用户名heiyeluren就登陆到了系统。
*防范办法:
不要使用rlogin等服务,同时也不推荐使用telnet等服务,因为telnetd等守护进程溢出漏洞一堆,而且在数据传输过程中是没有加密的,很容易被嗅探,建议使用ssh等经过安全加密的服务来替代。
5.Login后门
login程序通常用来对telnet来的用户进行口令验证。入侵者获取login的原代码并修改使它在比较输入口令与存储口令时先检查后门口令。如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入。
*防范方法:
一般针对这类后门,一般都是使用”string”命令搜索login程序中是否有中是否有密码等字符串来进行检查。如果密码经过加密,那么就对login文件进行指纹记录和MD5值的记录,觉得异常时进行检测。
6.Bind后门
就是通过常用的网络连接协议TCP/UDP/ICMP来建立连接的后门,这个在Windows下可是轰轰烈烈。
比 较普遍的有TCP协议的后门都是写一段程序开一个指定的端口进行监听,然后从客户端进行连接后登陆系统。也有黑客为了隐蔽使用UDP协议来连接。icmp 后门也常见,一般是。有时候可能bind后门跟服务后门结合,黑客通过自己写的bind后门来替换inetd中的服务。
*防范方法:
经常使用netstat命令检查有没有非法的端口打开,最好直接用防火墙屏蔽除了正常访问的端口之外的端口。对于ping后门的话,直接在防火墙上禁止ping服务器
7.服务后门
一 般是替换或者添加服务来实现后门。比如在/etc/inetd.conf中添加或者替换某个服务来运行自己的后门程序,或者在某些服务中加入自己的后门代 码。如果是替换服务的话,该服务必须不被使用,而且不容易发现。如果是自己添加的服务,那么必须在/etc/services中设置对应的服务和端口才能 使用。
*防范方法:
经常检查服务,最好备份/etc/inetd.conf、/etc/services等文件,同时在 FreeBSD下也要时常检查/usr/loca/etc/rc.d下面的脚本是否是合法的并且是否那些脚本里面有没有启动非法程序。如果是在服务程序中 添加自己的代码,那么就要对文件的指纹进行校验,比如md5值看是否匹配。
8.rootkit后门
rootkit后门一般是替换管理员使用的工具,比如ls、ps、netstat、who等常用文件,把那些程序替换成被黑客加了特殊代码的程序,那样就能达到控制的效果。而且现在已经有很多现成能下载使用的rootkit.
*防范方法:
按照我们前面的方法,给每个文件建立系统指纹档案和md5校验值,如果觉得不对劲的时候查看文件指纹是否匹配,有没有别修改过,就知道是否着了rootkit的道。
9.内核后门
通过加载内核模块的方式来加载后门,比较复杂。一般内核后门都是针对操作系统而言的,不同的操作系统内核模块设置编写方法都不一样,一般不通用。内核后门一般无法通过md5校验等来判断,所有基本比较难发现,目前针对内核后门比较多的是Linux和Solaris下。
*防范方法:
FreeBSD下通过我们上面讲的设置内核安全等级来控制加载内核模块。
10.其他后门
还有包括。forward等其他各类后门,另外很多后门可能是结合多种技术,比如把rootkit和内核后门结合在一起,实际过程中,黑克是会更难对付的。当然还有许多我们没有发现高手独门秘诀,这需要灵活检查,不过只要勤劳一点,安全会提升很多。
六、结束语
安 全是一个整体,即使那么服务你设置的非常安全,但是不能保证永远安全,安全是动态的,必须不断的充实自己的知识,发现新漏洞、新技术。如果你需要更安全的 系统,一定要自己有时常能够手工作入侵检测或者使用部分工具帮助你进行入侵检测。同时推荐你安装一些网络入侵检测系统(NIDS),比如Snort.
--本文系转载自网络。
四、防火墙的安装和设置
FreeBSD自带有一个基于包过滤的防火墙——ipfw,虽然功能没有专业防火墙那么强大,但是应付一个Web站点的安全还是足够的,所以我们决定选用该防火墙来保护我们的Web服务器。
1.安装ipfw
IPFW的主要部分是在内核中运行的,因此会需要在FreeBSD内核配置文件中添加部分选项。(注意,如果你没有安装FreeBSD核心源代码,是无法进入以下目录的,所以运行之前一定要先安装内核源代码)我们先进入内核配置文件:
#cd/sys/i386/conf
#cpGENERIC./kernel_fw
打开内核配置文件:
#ee./kernel_fw
添加四个选项,不需要后面的注释信息:
optionsIPFIREWALL#将包过滤部分的代码编译进内核。
optionsIPFIREWALL_VERBOSE
#启用通过syslogd记录的日志。如果没有指定这个选项,即使您在过滤规则中指定记录包,也不会真的记录它们
optionsIPFIREWALL_VERBOSE_LIMIT=10
#限制通过syslogd(记录的每项包规则的记录条数。在恶劣的环境中如果您想记录防火墙的活动,而又不想由于syslog洪水一般的记录而导致拒绝服务攻击,那么这个选项将会很有用。
optionsIPFIREWALL_DEFAULT_TO_ACCEPT
# 这将把默认的规则动作从“deny”改为“allow”.这可以防止在没有配置防火墙之前使用启用过IPFIREWALL支持的内核重启时把自己 锁在外面。另外,如果您经常使用ipfw(来解决一些问题时它也非常有用。尽管如此,在使用时应该小心,因为这将使防火墙敞开,并改变它的行为。
编译内核:
#/usr/sbin/configkernel_fw
#cd……/compile/kernel_fw(注意你的版本,如果是低于5.0的版本用……/……/compile/kernel_fw)
#makedepend
#make
#makeinstall
重 启系统。注意,我们没有选择optionsIPFIREWALL_DEFAULT_TO_ACCEPT该选项,就是说默认系统启动后是打开防火墙的,并且 防火墙默认是不允许任何连接的(denyfromanytoany),所以一定要在本地操作,否则你将被“锁在门外”,如果你选择了该选项则可以使用 ssh等连接不受影响,不过这相对不安全。
2.配置ipfw
如果配置普通情况下的规则,使用命令配置的模式:
ipfw的配置命令:ipfw[-N]命令[编号]动作[log(日志)]协议地址[其它选项]
例如:
#ipfwaddallowtcpfromanyto10.10.10.180#允许外界访问我的web服务
#ipfwaddallowtcpfromanyto10.10.10.121#允许外面访问我的ftp服务
#ipfwaddallowtcpfromanyto10.10.10.122#允许外界访问我的ssh服务
如果使用规则包的形式,那么查看下面内容。
系统启动后,我们还要配置rc.conf文件来运行我们的防火墙:
#ee/etc/rc.conf
加入如下内容:
gateway_enable=”YES”#启动网关
firewall_enable=”YES”#激活firewall防火墙
firewall_script=”/etc/rc.firewall”#firewall防火墙的默认脚本
firewall_type=”/etc/ipfw.conf”#firewall自定义脚本
firewall_quiet=”NO”#起用脚本时,是否显示规则信息。现在为“NO”假如你的防火墙脚本已经定型,那么就可以把这里设置成“YES”了。
firewall_logging_enable=”YES”#启用firewall的log记录。
设置完成后我们再编辑/etc/syslog.conf文件:
#ee/etc/syslog.conf
加入以下行:
!ipfw
*.*/var/log/ipfw.log
现在到了最重要的编辑规则包了:
#ee/etc/ipfw.conf
我们添加一下规则:(注意10.10.10.1是我们服务器的IP)
#########TCP##########
add00001denylogipfromanytoanyipoptrr
add00002denylogipfromanytoanyipoptts
add00003denylogipfromanytoanyipoptssrr
add00004denylogipfromanytoanyipoptlsrr
add00005denytcpfromanytoanyintcpflagssyn,fin
#这5行是过滤各种扫描包
add10001allowtcpfromanyto10.10.10.180in#向整个Internet开放http服务。
add10002allowtcpfromanyto10.10.10.121in#向整个Internet开放ftp服务。
add10000allowtcpfrom1.2.3.4to10.10.10.122in
#向Internet的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。
#如果你登陆服务器的IP不固定,那么就要设为:add10000allowtcpfromanyto10.10.10.122in
add19997check-state
add19998allowtcpfromanytoanyoutkeep-statesetup
add19999allowtcpfromanytoanyout#这三个组合起来是允许内部网络访问出去,如果想服务器自己不和Internet进行tcp连接出去,可以把19997和19998去掉。(不影响Internet对服务器的访问)
##########UDP##########
add20001allowudpfromany53to10.10.10.1#允许其他DNS服务器的信息进入该服务器,因为自己要进行DNS解析嘛~
add29999allowudpfromanytoanyout#允许自己的UDP包往外发送。
##########ICMP#########
add30000allowicmpfromanytoanyicmptypes3
add30001allowicmpfromanytoanyicmptypes4
add30002allowicmpfromanytoanyicmptypes8out
add30003allowicmpfromanytoanyicmptypes0in
add30004allowicmpfromanytoanyicmptypes11in
#允许自己ping别人的服务器。也允许内部网络用router命令进行路由跟踪。

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 