| Gman! 的个人资料史前巨兽 嗷嗷啊嗷~照片日志列表 | 帮助 |
史前巨兽 嗷嗷啊嗷~修身.齐家.治国.平天下 正心.诚意.致知.格物 1月8日 SYN flood网络攻击的原理及其防御方法作者: 来源: 冰盾科技 日期: 2006-8-6 9:38 http://www.janker.org/hacker/47.html 摘要 介绍了SYN Flood攻击的基本原理,详细地描述了目前几种比较有效的两种防御措施:SYN-cookie技术和地址状态监控技术。 关键词 SYN Flood攻击 拒绝服务攻击 SYN cookie 1 SYN Flood攻击介绍: 拒绝服务攻击(Denial of Service,DoS)是目前比较有效而又非常难于防御的一种网络攻击方式,它的目的就是使服务器不能够为正常访问的用户提供服务。所以,DoS对一些紧密依靠互联网开展业务的企业和组织带来了致命的威胁。 SYN Flood是最为有效和流行的一种DoS攻击形式。它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的资源,从而不能够为正常用户提供服务。 1.1 TCP连接建立的过程 要掌握SYN Flood攻击的基本原理,必须先介绍TCP的三次握手机制。 2)服务器端收到客户端发送来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,包含确认号为x+1和服务器的初始序列号y; 3)
服务器端口 客户端收到服务器返回的SYN+ACK报文后,向服务器返回一个确认号为y+1序号为x+1的ACK报文,一个标准的TCP连接完成。如图1所示: body.clientHeight)this.width=body.clientHeight" border=0> body.clientHeight)this.width=body.clientHeight" border=0> TCP客户端 2 几种防御技术 SYN Flood攻击给互联网造成重大影响后,针对如何防御SYN Flood攻击出现了几种比较有效的技术。 2.1 SYN-cookie技术 一般情况下,当服务器收到一个TCP SYN报文后,马上为该连接请求分配缓冲区,然后返回一个SYN+ACK报文,这时形成一个半连接。SYN Flood正是利用了这一点,发送大量的伪造源地址的SYN连接请求,而不完成连接。这样就大量的消耗的服务器的资源。 SYN-cookie技术针对标准TCP连接建立过程资源分配上的这一缺陷,改变了资源分配的策略。当服务器收到一个SYN报文后,不立即分配缓冲区,而是利用连接的信息生成一个cookie,并将这个cookie作为将要返回的SYN+ACK报文的初始序列号。当客户端返回一个ACK报文时,根据包头信息计算cookie,与返回的确认序列号(初始的序列号+1)的前24位进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。 该技术的巧妙之点在于避免了在连接信息未完全到达前进行资源分配,使SYN Flood攻击的资源消耗失效。实现的关键之处在于cookie的计算。cookie的计算应该做到包含本次连接的状态信息,使攻击者不能伪造cookie。cookie的计算过程如下: 1)服务器收到一个SYN包后,计算一个消息摘要mac: 2)生成cookie: 3)设置将要返回的SYN+ACK报文的初始序列号,设置过程如下: SYN-cookie技术由于在连接建立过程中不需要在服务器端保存任何信息,实现了无状态的三次握手,从而有效的防御了SYN Flood攻击。但是该方法也存在一些弱点。由于cookie的计算只涉及了包头的部分信心,在连接建立过程中不在服务器端保存任何信息,所以失去了协议的许多功能,比如,超时重传。此外,由于计算cookie有一定的运算量,增加了连接建立的延迟时间,因此,SYN-cookie技术不能作为高性能服务器的防御手段。通常采用动态资源分配机制,当分配了一定的资源后再采用cookie技术,Linux就是这样实现的。还有一个问题是,当我们避免了SYN Flood攻击的同时,同时也提供了另一种拒绝服务攻击方式,攻击者发送大量的ACK报文,使服务器忙于计算验证。尽管如此,在预防SYN Flood攻击方面,SYN-cookie技术仍然是一种有效的技术。 2.2 地址状态监控的解决方法 地址状态监控的解决方法是利用监控工具对网络中的有关TCP连接的数据包进行监控,并对监听到的数据包进行处理。处理的主要依据是连接请求的源地址。 每个源地址都有一个状态与之对应,总共有四种状态: 1)监听到SYN包,如果源地址是第一次出现,则置该源地址的状态为NEW状态;如果是NEW状态或BAD状态;则将该包的RST位置1然后重新发出去,如果是GOOD状态不作任何处理。 2)监听到ACK或RST包,如果源地址的状态为NEW状态,则转为GOOD状态;如果是GOOD状态则不变;如果是BAD状态则转为NEW状态;如果是BAD状态则转为NEW状态。 3)监听到从服务器来的SYN ACK报文(目的地址为addr),表明服务器已经为从addr发来的连接请求建立了一个半连接,为防止建立的半连接过多,向服务器发送一个ACK包,建立连接,同时,开始计时,如果超时,还未收到ACK报文,证明addr不可达,如果此时addr的状态为GOOD则转为NEW状态;如果addr的状态为NEW状态则转为BAD状态;如果为addr的状态为BAD状态则不变。 body.clientHeight)this.width=body.clientHeight" border=0> 初态 下面分析一下基于地址状态监控的方法如何能够防御SYN Flood攻击。
2)对于一个合法的SYN报文,若源地址第一次出现,则源地址的状态为NEW状态,服务器响应请求,发送SYN+ACK报文,监控程序发送ACK报文,连接建立完毕。之后,来自客户端的ACK很快会到达,该源地址的状态转为GOOD状态。服务器可以很好的处理重复到达的ACK包。 3 小结 本文介绍了SYN Flood攻击的基本原理,然后详细描述了两种比较有效和方便实施的防御方法:SYN-cookie技术和基于监控的源地址状态技术。SYN-cookie技术实现了无状态的握手,避免了SYN Flood的资源消耗。基于监控的源地址状态技术能够对每一个连接服务器的IP地址的状态进行监控,主动采取措施避免SYN Flood攻击的影响。这两种技术是目前所有的防御SYN Flood攻击的最为成熟和可行的技术。 10月23日 CACTI Installation and ConfigurationCACTI Installation and Configuration
#LastUpdated:2006-10-23
#Version:0.0.1 #Compatible: Redhat AS Linux /FC series #Comment:个人研习类文档,非企业配置规范,非企业安全规范. #By:Gman! ###### Download Source ######
mkdir-p /opt/distfiles/src
cd /opt/distfiles; wget ......pkgs...... #将如下所需要的包解压到/opt/distfiles/src下;逐一安装.
mysql-4.1.15.tar.gz httpd-2.0.55.tar.gz php-4.4.1.tar.gz cacti-0.8.6h.tar.gz rrdtool-1.2.15.tar.gz (需要如下两个包的支持) - libart_lgpl-devel-2.3.16-2.1.i386.rpm - libpng-devel-1.2.2-22.i386.rpm net-snmp-5.1.2-11.i386.rpm (需要如下两个包的支持)
- net-snmp-libs-5.1.2-11.i386.rpm - lm_sensors-2.8.7-2.i386.rpm Net-SNMP的开发包和工具包,如果可以安装在系统上,则不需要安装net-snmp-tar.gz包
net-snmp-devel-5.1.1-2.i386.rpm net-snmp-utils-5.1.1-2.i386.rpm [net-snmp-5.2.1.tar.gz]
///////////////////////////////////////////////////////////////// ######## Install MySQL ######## groupadd mysql useradd -g mysql mysql cd /opt/distfiles;
tar -zxf mysql-4.1.15.tar.gz -C src/ cd /opt/distfiles/src/mysql-4.1.15 ./configure --prefix=/usr/local/mysql --enable-assembler \
--with-charset=gb2312 --with-mysqld-ldflags=-all-static \ --without-debug make && make install ### Init MySQL ###
#复制MySQL配置文件
cp support-files/my-medium.cnf /etc/my.cnf #初始化数据库
/usr/local/mysql/bin/mysql_install_db --user=mysql #修正目录权限
chown -R root /usr/local/mysql ; chown -R mysql /usr/local/mysql/var ; chgrp -R mysql /usr/local/mysql ; #启动数据库
/usr/local/mysql/bin/mysqld_safe --user=mysql & #查看进程及端口
ps axuww |grep mysql;netstat -nlp ; #更改mysql root 密码
/usr/local/mysql/bin/mysqladmin -u root password MYSQLPASSWD ######## End Of Install MySQL ########
######## Install Apache2 ########
cd ../.. tar -zxf httpd-2.0.55.tar.gz -C src/ cd /opt/distfiles/src/httpd-2.0.55 ./configure --prefix=/usr/local/apache2 --enable-module=so --enable-module=setenvif \ --enable-module=rewrite --enable-rewrite=shared --enable-proxy=shared --with-mpm=prefork \ --enable-so --enable-auth-anon --enable-file-cache=shared --enable-cache=shared \ --enable-disk-cache=shared --enable-mem-cache=shared make && make install
######## End Of Install Apache2 ########
######## Install PHP4 and Config httpd.conf ######## cd ../.. tar -zxf php-4.4.1.tar.gz -C src/ cd /opt/distfiles/src/php-4.4.1 ./configure --prefix=/usr/local/php \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-mysql=/usr/local/mysql \ --enable-sockets \ --with-zlib-dir=/usr/include \ --with-gd make && make install
#创建apache web根目录
mkdir -p /opt/data/www vi /usr/local/apache2/conf/httpd.conf
#查看是否有如下行: LoadModule php4_module modules/libphp4.so #改DocumentRoot
DocumentRoot /opt/data/www #添加如下行:
AddType application/x-httpd-php .php #添加index.php
DirectoryIndex index.php index.html index.htm index.shtml #启动apache
/usr/local/apache2/bin/apachectl start #查看进程及端口
ps axuww |grep httpd;netstat -nlp ; ######## End Of Install PHP4 ########
######## Install rrdtool ######## cd ../.. tar -zxf php-4.4.1.tar.gz -C src/ cd /opt/distfiles/src/rrdtool-1.2.15 (需要如下两个包的支持--先安装!)
- libart_lgpl-devel-2.3.16-2.1.i386.rpm - libpng-devel-1.2.2-22.i386.rpm ./configure --prefix=/usr/local/rrdtool; make install; ######## End Of Install rrdtool ########
######## Install net-snmp ########
net-snmp-5.1.2-11.i386.rpm (需要如下两个包的支持)
- net-snmp-libs-5.1.2-11.i386.rpm - lm_sensors-2.8.7-2.i386.rpm rpm -ivh lm_sensors-2.8.7-2.i386.rpm;
rpm -ivh net-snmp-libs-5.1.2-11.i386.rpm; rpm -ivh net-snmp-5.1.2-11.i386.rpm; #配置本地snmpd服务
mv /etc/snmpd/snmpd.conf /etc/snmpd/snmpd.conf.bkp vi /etc/snmpd/snmpd.conf
#粘贴如下内容: #####################snmpd.conf################################# #snmpd.conf #For Linux #Lastupdate:2005-09-16 #Simplification edition # First, map the community name "public" into a "security name" # sec.name source community
com2sec notConfigUser default mrtgmgr # Second, map the security name into a group name: # groupName securityModel securityName
group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser # Third, create a view for us to let the group have rights to: # Make at least snmpwalk -v 1 localhost -c public system fast again.
# name incl/excl subtree mask(optional) view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25.1.1 # Finally, grant the group read-only access to the systemview view. # group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact mib2 none none # -----------------------------------------------------------------------------
# Here is a commented out example configuration that allows less
# restrictive access. # YOU SHOULD CHANGE THE "COMMUNITY" TOKEN BELOW TO A NEW KEYWORD ONLY
# KNOWN AT YOUR SITE. YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO # SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE. ## sec.name source community
#com2sec local localhost COMMUNITY #com2sec mynetwork NETWORK/24 COMMUNITY ## group.name sec.model sec.name
#group MyRWGroup any local #group MyROGroup any mynetwork # #group MyRWGroup any otherv3user #... ## incl/excl subtree mask
#view all included .1 80 ## -or just the mib2 tree-
view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
## context sec.model sec.level prefix read write notif #access MyROGroup "" any noauth 0 all none none #access MyRWGroup "" any noauth 0 all all all syslocation Unknown
syscontact Gman #####################END OF snmpd.conf#################################
#启动本地即snmpd服务 /etc/rc.d/init.d/snmpd start [service snmpd start] #查看进程及端口
ps axuww |grep snmpd;netstat -nlp ; #加入开机自动运行
ntsysv #Net-SNMP的开发包和工具包,如果可以安装在系统上,则不需要安装net-snmp-tar.gz包 - net-snmp-devel-5.1.1-2.i386.rpm - net-snmp-utils-5.1.1-2.i386.rpm #如因为缺少依存关系,而无法安装net-snmp-devel和net-snmp-utils包,则安装net-snmp-tar.gz包
cd ../..
tar -zxf net-snmp-5.2.1.tar.gz -C src/ cd /opt/distfiles/src/net-snmp-5.2.1 ./configure --prefix=/usr/local/net-snmp make && make install ######## End Of Install net-snmp ########
######## Install cacti ######## #添加cactiuser groupadd cactiuser useradd cactiuser -g cactiuser cd ../..
tar -zxf cacti-0.8.6h.tar.gz -C src/ mv /opt/distfiles/src/cacti-0.8.6h /opt/data/www/cacti #修正目录权限
cd /opt/data/www/cacti chown -R cactiuser rra/ log/ scripts/ #登陆mysql数据库
/usr/local/mysql/bin/mysql -u root -pROOTPASSWD mysql> create database cacti;
mysql> grant all on cacti.* to root; mysql> grant all on cacti.* to root@localhost; mysql> grant all on cacti.* to cactiuser; mysql> grant all on cacti.* to cactiuser@localhost; mysql> set password for cactiuser@localhost=password('cactipw'); #以上语句输出 Query OK, 0 rows affected (0.01 sec) 表示成功
mysql> exit #导入cacti数据库到mysql
/usr/local/mysql/bin/mysql -u root -pROOTPASSWD cacti < /opt/data/www/cacti/cacti.sql #配置cacti
vi /opt/data/www/cacti/include/config.php #更改用户,密码等项 $database_type = “mysql”; $database_default = “cacti”; $database_hostname = “localhost”; $database_username = “cactiuser”; $database_password = “cactipw”; #将cacti加入计划任务 crontab -e cactiuser [crontab -u cactiuser -e ] */5 * * * * /usr/local/php/bin/php /opt/data/www/cacti/poller.php > /dev/null 2>&1 #在第一次启动cacti时,cacti将自动检测如下程序是否存在,如果采用cacti默认路径,则做如下连接: ln -s /usr/local/php/bin/php /usr/bin/ ln -s /usr/local/rrdtool/bin/rrdtool /usr/local/bin/
ln -s /usr/local/net-snmp/bin/snmpwalk /usr/local/bin/
ln -s /usr/local/net-snmp/bin/snmpget /usr/local/bin/ ln -s /usr/local/net-snmp/bin/snmpbulkwalk /usr/local/bin/ ln -s /usr/local/net-snmp/bin/snmpgetnext /usr/local/bin/ #测试cacti
http://ip-addr/cacti 默认登陆密码:'admin' #SNMP Utility Version 选择: NET-SNMP5.x #RRDTool Utility Version 选择: RRDTool-1.2.x #snmpwalk debug #For example: #测试某服务器snmp服务是否开通,'public'为snmpd的community,取if开头的字段; snmpwalk -v 2c -c public 192.168.11.3 if NFS Deployment#NFS Deployment #LastUpdate: 2005-08-15 服务器端: #建立目录和组
#添加NFS 目录权限. #for union #启动服务 #如果更改了/etc/exports 则重新mount目录. #在"another udp rules"中添加: iptables -L -vn #开机自动启动 =========================
建立mount点: #[电信] #[网通] # [电信] #客户端查看NFS资源. #修改 /etc/fstab 23.5.9.56:/data/modules/kmmaster/data/incoming/anon_root/union /data/www/union/wwwroot/union/download/import nfs defaults
如果出现:"connect time out"则是防火墙配置有问题,必须将tcp和udp input规则打开. NFS有关的一些命令. NTP Service Client ConfigurationNTP Service Client Configuration
#手动更新一次 #vi /etc/ntp.conf ## #NTP地址池列表
* */6 * * * /usr/sbin/ntpdate -u asia.pool.ntp.org
Linux Rsync Installation & Configuration配置KDN前端.[FDS]
#LastUpdated:2006-10-23
#Version:0.0.1 #Compatible: Redhat AS Linux /FC series #Comment:企业配置规范,企业安全规范. #By:Gman! #server端操作
mkdir -p /usr/empty groupadd rsync -g 900 useradd rsync -u 900 -g rsync -d /usr/empty -s /sbin/nologin # #客户端/服务器端操作
mkdir -p /opt/data/kdn/export/pub mkdir -p /opt/modules/kdn /opt/modules/src cd /opt/distfiles/
wget -c http://165.165.105.105:5180/distfiles/rsync-2.6.4.tar.gz; tar vxfz rsync-2.6.4.tar.gz -C src && cd src/rsync-2.6.4 ./configure --prefix=/opt/modules/kdn
make && make install #server端操作
cat /etc/services |grep rsync mkdir -p /opt/modules/kdn/rsync/run #touch /opt/modules/kdn/rsync/rsync.pas cd /etc wget -c http://165.165.105.105:5180/config/rsyncd.conf # vi /opt/sbin/kmt-fw-ctl #打开tpc:5873端口 # //////////////////////////////////////// #FDS Rsync configure files #LastUpdate:2005-06-20 #Version:1.0.0 #By:Gman. uid = rsync
#用户和组id为:900 gid = rsync port = 9873 use chroot = no # 不使用chroot max connections = 24 # 最大连接数为24 pid file = /opt/modules/kdn/rsync/run/rsyncd.pid lock file = /opt/modules/kdn/rsync/run/rsync.lock log file = /opt/modules/kdn/rsync/run/rsyncd.log # 日志记录文件 [FDSconf] # 认证的模块名,在client端指定 path = /opt/data/kdn/export/pub/ # 需要做镜像的目录 comment = For sync file from KDN mid server ignore errors # 可以忽略一些无关的IO错误 read only = yes # 只读 list = no # 不允许列文件 #auth users = inburst # 认证的用户名,如果无这行,则为匿名 #secrets file = /opt/modules/kdn/rsync/rsync.pas # 认证密码文件名.匿名则不用. ///////////////////////////////////////// |
|
|||||
|
|