WPE|52wpe|我爱WPE

 找回密码
 注册会员
搜索
  • 1800查看
  • 0回复

主题

好友

654

积分

高级会员

发表于 2010-1-29 12:06:40 |显示全部楼层
在上文我们就已经提到通过对过滤网关进行的设置防护可以在一定程度上防止产生SYN攻击!那本文就给大家说一说另一项可以防止产生这种攻击的技术!主要技术是调整tcp/ip协议栈,修改tcp协议实现.主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.tcp/ip协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作. 加固tcp/ip协议栈进而有效防护sun攻击的各种设置方法:  SynAtackProect机制   为防范SYN攻击,win2000系统的tcp/ip协议栈内嵌了SynAtackProtect机制,Win2003系统也采用此机制.SynAtackProtect机制是通过关闭某些socket选项,增加额外的连接指示和减少超时时间,使系统能处理更多的SYN连接,以达到防范SYN攻击的目的.默认情况下,Win2000操作系统并不支持SynAttackProtect保护机制,需要在注册表以下位置增加SynAttackProtect键值:   HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters   当SynAttackProtect值(如无特别说明,本文提到的注册表键值都为十六进制)为0或不设置时,系统不受SynAttackProtect保护.   当SynAttackProtect值为1时,系统通过减少重传次数和延迟未连接时路由缓冲项(route cache entry)防范SYN攻击. 当SynAttackProtect值为2时(Microsoft推荐使用此值),系统不仅使用backlog队列,还使用附加的半连接指示,以此来处理更多的SYN连接,使用此键值时,tcp/ip的TCPInitialRTT、window size和可滑动窗囗将被禁止.    SYN cookies技术   我们知道,TCP协议开辟了一个比较大的内存空间backlog队列来存储半连接条目,当SYN请求不断增加,并这个空间,致使系统丢弃SYN连接.为使半连接队列被塞满的情况下,服务器仍能处理新到的SYN请求,SYN cookies技术被设计出来.   SYN cookies应用于linux、FreeBSD等操作系统,当半连接队列满时,SYN cookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态. 在TCP实现中,当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器.通常,服务器的初始序列号由服务器按照一定的规律计算得到或采用随机数,但在SYN cookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie.当服务器遭受SYN攻击使得backlog队列满时,服务器并不拒绝新的SYN请求,而是回复cookie(回复包的SYN序列号)给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie.如果相等,直接完成三次握手(注意:此时并不用查看此连接是否属于backlog队列). 在RedHat linux中,启用SYN cookies是通过在启动环境中设置以下命令来完成: # echo 1 > /proc/sys/net/ipv4/tcp_syncookies 我们在上面通过对SynAtackProect和SYN cookies这两地方做出设置后也只能说把这个全部的设置只完成了二分之一,剩下的一半则要由下面两个地方来实现!而对于在上面这处的修改设置过程中我们只要能够仔细的观看,我们也可以通过这两处设置来对TCP/IP协议栈有更深一层的了解!   增加最大半连接数   大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力.当然backlog队列需要占用大量的内存资源,不能被无限的扩大.   WIN2000:除了上面介绍的TcpMaxHalfOpen, TcpMaxHalfOpenRetried参数外,WIN2000操作系统可以通过设置动态backlog(dynamic backlog)来增大系统所能容纳的最大半连接数,配置动态backlog由AFD.SYS驱动完成,AFD.SYS是一种内核级的驱动,用于支持基于window socket的应用程序,比如ftp、telnet等.AFD.SYS在注册表的位置: HKLM\System\CurrentControlSet\Services\AFD\ParametersEnableDynamicBacklog值为1时,表示启用动态backlog,可以修改最大半连接数.  MinimumDynamicBacklog表示半连接队列为单个TCP端囗分配的最小空闲连接数,当该TCP端囗在backlog队列的空闲连接小于此临界值时,系统为此端囗自动启用扩展的空闲连接(DynamicBacklogGrowthDelta),Microsoft推荐该值为20.   MaximumDynamicBacklog是当前活动的半连接和空闲连接的和,当此和超过某个临界值时,系统拒绝SYN包,Microsoft推荐MaximumDynamicBacklog值不得超过2000.   DynamicBacklogGrowthDelta值是指扩展的空闲连接数,此连接数并不计算在MaximumDynamicBacklog内,当半连接队列为某个TCP端囗分配的空闲连接小于MinimumDynamicBacklog时,系统自动分配DynamicBacklogGrowthDelta所定义的空闲连接空间,以使该TCP端囗能处理更多的半连接.Microsoft推荐该值为10.   LINUX:Linux用变量tcp_max_syn_backlog定义backlog队列容纳的最大半连接数.在Redhat 7.3中,该变量的值默认为256,这个值是远远不够的,一次强度不大的SYN攻击就能使半连接队列占满.我们可以通过以下命令修改此变量的值:   # sysctl -w net.ipv4.tcp_max_syn_backlog="2048"   Sun Solaris Sun Solaris用变量tcp_conn_req_max_q0来定义最大半连接数,在Sun Solaris 8中,该值默认为1024,可以通过add命令改变这个值:   # ndd -set /dev/tcp tcp_conn_req_max_q0 2048   HP-UX:HP-UX用变量tcp_syn_rcvd_max来定义最大半连接数,在HP-UX 11.00中,该值默认为500,可以通过ndd命令改变默认值:   #ndd -set /dev/tcp tcp_syn_rcvd_max 2048 在这里我们再通过对这两个地方做出设置后就算是把这个加固tcp/ip协议栈的步骤给全部完成了,接下的事由这个已经加固好的tcp/ip协议栈和前一篇文章所说的过滤网关防护这两点结合到一起后就可以有效的防止在自己的[url=http://www.52wpe.net]私服[/url]中产生的这种syn攻击!也通过这种两中设置方法对自己的[url=http://www.52wpe.net]私服[/url]中产生更大的安全保护!

快速发帖

您需要登录后才可以回帖 登录 | 注册会员

手机版|Archiver|WPE|52wpe|我爱WPE ( 闽ICP备15009081号 )

GMT+8, 2024-5-19 02:56 , Processed in 0.065582 second(s), 16 queries .

返回顶部