5636联盟 2

网吧网络

加固TCP/IP和谈来防备SYN攻击
2017-08-22 作者:小郭 点击: 1,046次

  防备SYN攻击的另一项首要技能是加固tcp/ip和谈栈,修正tcp和谈完成。首要办法有SynAttackProtect维护机制、SYN cookies技能、添加最多半衔接和缩短超不时间等。tcp/ip和谈栈的加固能够惹起某些功用的受限,网吧管理员应该在进行充沛调查和测试的前提下进行此项任务。
  ·SynAttackProtect机制
  为防备SYN攻击,Windows2000系统的tcp/ip和谈栈内嵌了SynAttackProtect机制,Win2003系统也采用此机制。SynAttackProtect机制是经过封闭某些socket选项,添加额定的衔接指示和削减超过时间,使系统能处置更多的SYN衔接,以到达防备SYN攻击的目标。默许状况下,Windows 2000操作系统并不支撑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和可滑动窗囗将被制止。
  我们应该晓得,平常,系统是不启用SynAttackProtect机制的,仅在检测到SYN攻击时,才启用,并调整tcp/ip和谈栈。那么系统是若何检测SYN攻击发作的呢?现实上,系统依据TcpMaxHalfOpen,TcpMaxHalfOpenRetried 和TcpMaxPortsExhausted三个参数判别能否蒙受SYN攻击
  TcpMaxHalfOpen 透露表现能还处置的最多半衔接数,假如超越此值,系统以为正处于SYN攻击中。Windows2000 server默许值为100,Windows2000 Advanced server为500。
  TcpMaxHalfOpenRetried界说了保管在backlog队列且重传过的半衔接数,假如超越此值,系统主动启动SynAttackProtect机制。Windows2000 server默许值为80,Windows2000 Advanced server为400。
  TcpMaxPortsExhausted是指系统回绝的SYN恳求包的数目,默许是5。
  假如想调整以上参数的默许值,可以在注册内外修正(地位与SynAttackProtect一样)
  · SYN cookies技能
  我们晓得,TCP和谈开拓了一个比拟大的内存空间backlog队列来存储半衔接条目,当SYN恳求不时添加,并这个空间,致使系统丢掉SYN衔接。为使半衔接队列被塞满的状况下,服务器仍能处置新到的SYN恳求,SYN cookies技能被设计出来。
  SYN cookies使用于linux、FreeBSD等操作系统,当半衔接队列满时,SYNcookies并不丢掉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
  · 添加最多半衔接数
  很多的SYN恳求招致未衔接队列被塞满,使正常的TCP衔接无法顺畅完成三次握手,经过增大未衔接队列空间可以缓解这种压力。当然backlog队列需求占用很多的内存资本,不克不及被无限的扩展。
  Windows2000:除了上面引见的TcpMaxHalfOpen, TcpMaxHalfOpenRetried参数外,Windows2000操作系统可以经过设置动态backlog(dynamic backlog)来增大系统所能包容的最多半衔接数,装备动态backlog由AFD.SYS驱动完成,AFD.SYS是一种内核级的驱动,用于支撑基于window socket的使用顺序,比方ftp、telnet等。AFD.SYS在注册表的地位:
  HKLM\\System\\CurrentControlSet\\Services\\AFD\\Parameters\\EnableDynamicBacklog值为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
  ·缩短超不时间
  上文提到,经过增大backlog队列能防备SYN攻击;别的削减超过时间也使系统能处置更多的SYN恳求。我们晓得,timeout超过时间,也即半衔接存活工夫,是系统一切重传次数等候的超不时间总和,这个值越大,半衔接数占用backlog队列的工夫就越长,系统能处置的SYN恳求就越少。为缩短超不时间,可以经过缩短重传超过时间和削减重传次数来完成。
  Windows2000第一次重传之前等候工夫默许为3秒,为改动此默许值,可以经过修正网络接囗在注册内外的TcpInitialRtt注册值来完成。重传次数由TcpMaxConnectResponseRetransmissions 来界说,注册表的地位是:
  HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters registry key
  当然我们也可以把重传次数设置为0次,如许服务器假如在3秒内还未收到ack确认包就主动从backlog队列中删除该衔接条目。
  LINUX:Redhat运用变量tcp_synack_retries界说重传次数,其默许值是5次,总超不时间需求3分钟。
  Sun Solaris Solaris 默许的重传次数是3次,总超不时间为3分钟,可以经过ndd敕令修正这些默许值。
 

以上内容整理自互联网,如有侵权,请立即与小编联系,小编将及时处理。转载或引用本网版权所有之内容请注明来源,感谢您对本站的支持! 联系QQ:2850592923 欢迎加入网吧业主 交流群:614859884(已满)397580722(可加)

点击排行榜