SYN Flood、SYN Cookie防御和Linux/FreeBSD的内核参

SYN Flood、SYN Cookie防御和Linux/FreeBSD的内核参

 

六:总结

  linuxsyn攻击存在这个规则导致一个后果就是在这个2MSL的时间内,该地址上的链接(客户端地址、端口和服务器端的地址、端口)不能被使用。比如我们在建立一个链接后关闭链接然后迅速重启链接,那么就会出现端口不可用的情况。

  Backlog参数:表示未连接队列的最大容纳数目。

  前阵子去面试正好被问到httpsession和cookie,今天正巧有个分享会讲到了session及负载均衡方面的东东,拿出来分享一下,以前也曾研究过负载均衡,在session共享的时候遇到了问题,这里面正好有解答,目前最好的办法是memcached。

  黑客是个令人向往、有前途的职业。我欣赏好黑客,讨厌坏黑客。所谓坏黑客,就是导致对方有人要加班的那种家伙。

  七:参考文章:

  SYN-ACK重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

  FreeBSD系统优化部分内核参数调整中文注释

  半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

  五:其他

  如果哪位看见有不对的地方,还请留意告知,谢谢!

  除了修改服务器的内核参数,还可以修改apache的配置文件中的Timeout、KeepAlive、MaxClients等参数来防止Dos,如果有接口调用,还要注意控制一下调用的时间。请听下文分解。

  TCP链接中有一个MSL(maxsegmentlifetime)的概念,也就是最大生成时间,MSL的值在一般的实现中取30s,有些实现采用2分钟。在TCP的状态机中的“被动关闭”:从CLOSE_WAIT到LAST_ACK中有一个如下的规则:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。

  SYNFlood是一种典型的服务型(DenialofService)。所谓服务型就是通过进行,使主机或网络不能够良好的提供服务,从而间接达到的目的。黑客喜欢玩这个,以让对方加班而显示自己有水平、有能力、有魄力,其实呢,啥都不是。

  在最常见的SYNFlood中,者在短时间内发送大量的TCPSYN包给者,这时者是TCP客户机,者是TCP服务器。根据的描述,者会为每个TCPSYN包分配一个特定的数据区,只要这些SYN包具有不同的源地址(这一点对于者来说是很容易伪造的)。这把给TCP服务器系统造成很大的系统负担,最终导致系统不能正常工作。

  yayu个人学习的观点:FreeBSD中对syn的防御和Linux下可能不一样,配置的参数也不完全相同,相关配置和理解可能不对:)

  如果你的服务器配置不太好,TCPTIME_WAIT套接字数量达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少服务器的TIME_WAIT套接字数量。

  说明:

  net.ipv4.tcp_max_tw_buckets=5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于SquidSYN Flood、SYN Cookie防御和Linux/FreeBSD的内核参数修改,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

  参数设置参考:

  SYNCookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYNFlood的一种手段。它的原理是,在TCP服务器收到TCPSYN包并返回TCPSYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCPACK包时,TCP服务器在根据那个cookie值检查这个TCPACK包的性。如果,再分配专门的数据区进行处理未来的TCP连接。

  未连接队列:在三次握手协议中,服务器一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。或者说TCP服务器收到TCPSYNrequest包时,在发送TCPSYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即把形成的TCP连接。一般把收到SYN包而还未收到ACK包时的连接状态成为半开连接(Half-openConnection)。

  TIME_WAIT可以通过以下命令查看:

  我讨厌让人加班的坏黑客,不过这也促进了我的学习。

  在上述过程中,还有一些重要的概念:

你可能感兴趣的:(linux,职场,cookie,syn,休闲,syncookie)