synflood了解和简单防范笔记!

author author     2022-08-03     773

关键词:

一:什么是CentOS SYN Flood攻击?

CentOS SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCP SYN (synchronize)包到对方。


对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK (ACKnowledge Character)包回去,这样三次握手就结束了。在上述过程中,还有一些重要的概念。


未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的CentOS SYN包 (syn=j)开设一个条目,该条目表明服务器已收到CentOS SYN包,并向客户发出确认,正在等待客户的确认包。


这些条目所标识的连接在服务器处于CentOS SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。或者说TCP服务器收到TCP SYN request包时。


在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即把形成的TCP连接。一般把收到CentOS SYN包而还未收到ACK包时的连 接状态成为半开连接(Half-open Connection)。


Backlog参数:表示未连接队列的最大容纳数目。CentOS SYN -ACK 重传次数:服务器发送完CentOS SYN -ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数。


系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间。


该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、CentOS SYN _RECV存活时间。在最常见的CentOS SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者,这时攻击者是TCP客户机,受害者是TCP服务器。


根据上面的描述,受害者会为每个TCP SYN包分配一个特定的数据区,只要这些CentOS SYN 包具有不同的源地址(这一点对于攻击者来说是很容易伪造的)。这把给TCP服务器系统造成很大的系统负担, 最终导致系统不能正常工作。


二:CentOS SYN Cookie原理

能够有效防范CentOS SYN Flood攻击的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。CentOS SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范CentOS SYN Flood攻击的一种手段。


它的原理是, 在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个CentOS SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。


如果合法,再分配专门的数据区进行处理未来的TCP连接。下面分Linux和FreeBSD来说说如何配置内核参数来实现CentOS SYN Cookie


三:Linux下设置

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


TIME_WAIT可以通过以下命令查看:以下是代码片段:netstat -an | grep "TIME_WAIT" | wc -l 在Linux下,如CentOS,可以通过修改/etc/sysctl.conf文件来达到目的。


增加以下几行:以下是代码片段:

net.ipv4.tcp_fin_timeout = 30 


net.ipv4.tcp_keepalive_time = 1200 

    

net.ipv4.tcp_syncookies = 1 

    

net.ipv4.tcp_tw_reuse = 1 

    

net.ipv4.tcp_tw_recycle = 1 

    

net.ipv4.ip_local_port_range = 102465000 

    

net.ipv4.tcp_max_syn_backlog = 8192 

    

net.ipv4.tcp_max_tw_buckets = 5000 

    

net.ipv4.tcp_synack_retries = 2 

    

net.ipv4.tcp_syn_retries = 2  

说明:

net.ipv4.tcp_syncookies = 1 表示开启CentOS SYN Cookies,这是个BOOLEAN。当出现CentOS SYN等待队列溢出时,启用cookies来处理,可防范少量CentOS SYN攻击,默认为0,表示关闭;


net.ipv4.tcp_tw_reuse = 1 表示开启重用,这是个BOOLEAN。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;


net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,这是个BOOLEAN,默认为0,表示关闭。


net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。单位为秒。


net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。单位为秒。


net.ipv4.ip_local_port_range = 102465000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。


net.ipv4.tcp_max_syn_backlog = 8192 表示CentOS SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。


net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。


默认为180000,改 为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。


net.ipv4.tcp_synack_retries和net.ipv4.tcp_syn_retries是定义CentOS SYN重试次数。 执行以下命令使配置生效:以下是代码片段:/sbin/sysctl -p 如果你不想修改/etc/sysctl.conf,你也可以直接使用命令修改:以下是代码片段:/sbin/sysctl -w key=value

摘自:http://www.bingdun.com/news/bingdun/6092.htm


缺点:

通常,有两种简单的方法可以防御SYN Flood攻击。一是缩短等待时间( SYN Timeout)并增大队列的SYN包最大容量( tcp _max_SYN _backlog) ,二是设置SYN Cookie。但是,这两种方法只能对付比较原始的SYN Flood攻击。缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,而SYNCookie依赖于对方使用真实的IP地址。如果攻击者以每秒数万条的速度发送SYN 报文,同时利SOCK_RAW等工具随机改写IP报文中的源地址,那么上述方法显然无法生效。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

四、iptables轻量级防止syn-flood

CC攻击可算是最郁闷的攻击了,硬防防不住,软防防不来。 不过用linux自带的iptables却可以减缓CC攻击

#iptables -N syn-flood (如果有此链,则不需要执行)

iptables -A INPUT -p tcp --syn -j syn-flood 

iptables -I syn-flood -p tcp -m limit --limit 4/s --limit-burst 6 -j RETURN 

iptables -A syn-flood -j REJECT

技术分享

#netstat -nat | grep SYN_RECV


本文出自 “[email protected]” 博客,转载请与作者联系!

hping简单了解安装和使用笔记!

hping简介:Hping是一个命令行下使用的TCP/IP数据包组装/分析工具,其命令模式很像Unix下的ping命令,但是它不是只能发送ICMP回应请求,它还可以支持TCP、UDP、ICMP和RAW-IP协议,它有一个路由跟踪模式,能够在两个相互包含的通道之... 查看详情

csrf防范笔记

...http有一个refer字段,用以记录该http请求的来源地址好处:简单便捷,后台开发人员只需要设置一个拦截器缺点:Referer的值是由浏览器提供的,虽然HTTP协议上有明确的要求,但是每个浏览器对于Referer的具体实现可能有差别。比如IE6... 查看详情

浅谈iptables防synflood攻击和cc攻击

...行的syn洪水攻击和cc攻击-------------------------------------何为synflood攻击:  SYNFlood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议 查看详情

浅谈iptables防synflood攻击和cc攻击(代码片段)

...行的syn洪水攻击和cc攻击-------------------------------------何为synflood攻击:  SYNFlood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大 查看详情

springmvc笔记及简单了解

1.Springmvc是什么  SpringWebMVC是一种基于Java的实现了WebMVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化... 查看详情

mybatis学习笔记注解

...还是建议书写类配置文件。注解还是不推荐使用的。只是了解了解!简单的CRUD可以使用注解。简单写写。  把之前的例子改成使用注解的。 UserMapper.java 1packagecom.cy.mybatis.mapper;23importjav 查看详情

mybatis学习笔记注解

...还是建议书写类配置文件。注解还是不推荐使用的。只是了解了解!简单的CRUD可以使用注解。简单写写。  把之前的例子改成使用注解的。 UserMapper.java 1packagecom.cy.mybatis.mapper;23importjav 查看详情

1算法学习笔记(概念性了解)

1、大O表示法:比较操作数,指出算法运行时间的增速。2、大O表示法,指出了最糟糕情况下的运行时间。3、常见的复杂度:对数时间——》二分法查找;中间,,再中间,,,再中间线性时间——》简单查找;O(n*logn)——》快... 查看详情

反射型ddos攻击的原理和防范措施

...施-网易云博客随着僵尸网络的兴起,同时由于攻击方法简单、影响较大、难以追查等特点,分布式拒绝服务攻击(DDoS,DistributedDenialofService)得到快速壮大和日益泛滥。成千上万主机组成的僵尸网络为DDoS攻击提供了所需的带宽... 查看详情

20155331《网络对抗》exp7网络欺诈防范

...,以提高防范意识,并提出具体防范方法。具体实践有:简单应用SET工具建立冒名网站ettercapDNSspoof结合应用两种技术,用DNSspoof引导特定访问到冒名网站。实验过程1.简单应用SET工具建立冒名网站首先确认kali主机和靶机在同一网... 查看详情

logstash笔记----output插件

...件。同样在这里简单介绍一下,作为输出插件的一个共性了解配置事例:output {    stdout {  &n 查看详情

《网络对抗》exp7网络欺诈防范(代码片段)

...理,以提高防范意识,并提出具体防范方法。具体实践有简单应用SET工具建立冒名网站(1分)ettercapDNSspoof(1分)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。(1.5分)实验过程1.简单应用SET工具建立冒名网站首先确... 查看详情

deeplearningnanodegreefoundation笔记第1课:课程计划

...和机器学习。这将让你熟悉这些领域的常用术语,你需要了解的技术进展,并了解深度学习在更大的机器学习背景中的位置。直播:线性回归WEEK1TypesofMachineLearningandwhentouseMachineLearningLivesession:Linearregressionfromscratch第二周神经网络... 查看详情

20155304《网络对抗》exp7网络欺诈技术防范(代码片段)

...提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。实践步骤简单应用SET工具建立冒名网站攻击机:Kali靶机:windowsX... 查看详情

javascript中作用域和作用域链的简单理解(变量提升)

...计》这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看。再者,本人了解的比较基础,不足的地方希望大家一起交流... 查看详情

javascript中作用域和作用域链的简单理解(变量提升)

...计》这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看。再者,本人了解的比较基础,不足的地方希望大家一起交流... 查看详情

学习笔记(二十二)——了解进程和线程(代码片段)

文章目录一、进程1.1、什么是程序1.2、了解进程1.3、进程的三种状态1.4、多进程二、线程2.1、了解线程2.2、了解多线程2.3、进程与线程的区别2.4、多线程实现2.5、线程锁2.6、全局解释锁(GIL)一、进程1.1、什么是程序程序是指令和... 查看详情

python网络编程8-实现synflood攻击与图形化展示

...文HTTP/HTTPS报文等。  以下Python脚本可实现简易的SYNFlood攻击运行结果如下使用Wirshark观察如下,产生大量TCPsyn包;由于使用单IP单端口发送时,scapy使用了相同TCP序列号和数据,Wirshark认为是TCP重传,使用多IP多端口是则正... 查看详情