浅谈iptables防synflood攻击和cc攻击

面对疾风 面对疾风     2022-08-18     599

关键词:

 

------------------------本人为自己实践所总结,概念性的东西不全,这里粗劣提下而已,网上很多,本文主要说下目前较流行的syn洪水攻击和cc攻击-------------------------------------

何为syn flood攻击:

  SYN Flood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式(TCP协议的缺陷,所以没办法根除,除非重做TCP协议,目前不可能)。

  正常原理是:1、TCP三次握手,客户端向服务器端发起连接的时候发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号

        2、服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgment),夹带也发送一个SYN包给客户端,并且服务器分配资源给该连接。

        3、客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。

  syn flood攻击利用TCP三次握手的缺陷,在TCP连接的第三次握手中,当服务器收到客户端的SYN包后并且返回客户端ACK+SYN包,由于客户端是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会有重试默认5次回应第二个握手       包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。通常SYN Flood会和ARP欺骗一起使用,这样就造成了SYN攻击。

何为CC攻击:

  CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡(被黑客黑的电脑)向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

 攻击检测:

  当你发现发服务器很卡,web访问很慢 甚至连SSH操作都开始有点卡的时候,你就要非常注意了。

  检测可以这样做:

  top 查看CPU使用率和CPU负载情况

      负载一般小于CPU核数*0.7算正常,负载内等于或者稍大于核数。说明CPU负载开始严重了,如果超过,说明有问题。

      看看哪些程序CPU使用率较高,是否为正常占用,可以使用 pidof 进程名 查看该进程名的所有进程号,然后ll /proc/进程号/exe、fd查看是否为正常信息。

  netstat查看端口状态

       netstat -n | grep "^tcp" | awk ‘{print $6}‘ | sort  | uniq -c | sort -n

         1 SYN_RECV

         13 FIN_WAIT1

         64 TIME_WAIT
         149 ESTABLISHED

     可以查看当前连接状态的数量,从而进行判断。

         还有vmstat、sar、等检测命令,网上有使用方法!

Syn Flood 一般的防御:

    第一种:缩短SYN Timeout时间,由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间。

    第二种:设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。

        (缺陷:缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用ARP欺骗随机改写IP报文中的源地址,以上的方法将毫无用武之地。)

    vim /etc/sysctl.conf

    增加或者修改如下:(修改保存后记得sysctl -p 使之生效)

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_fin_timeout = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_max_tw_buckets = 6000

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_syn_retries = 1

    net.ipv4.tcp_synack_retries = 1

    net.ipv4.tcp_max_syn_backlog = 262144

    net.core.netdev_max_backlog = 262144

    net.ipv4.tcp_max_orphans = 262144

    net.ipv4.tcp_keepalive_time = 30

 

 

  iptables性质防御:

  限制syn的请求速度(这个方式需要调节一个合理的速度值,不然会影响正常用户的请求)

    iptables -N syn-flood   (新建一条链)

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

    iptables -A syn-flood  -p tcp -m limit --limit 2/s --limit-burst 50 -j RETURN

    iptables -A syn-flood -j DROP

  Tips:攻击这东西只能防御不能完全根除!只能缓解,降低到最低的风险。有钱可以上第三方公司的产品服务!嘿嘿。

 

CC攻击一般防御:

    1、一般而言,CC攻击都是真实的IP,所以一般的做法通俗点就是封IP

    2、更改web端口,默认CC攻击都是攻击服务器的80端口  

    3、域名欺骗,我们可以使用cdn等加速工具代理我们的服务器,从而实现防御,(网上有人说把域名解析到127.0.0.1 让攻击者自己攻击自己,不知道有没有用,没试过。而且正式业务,你怎么可能去做这样的解析,那业务怎么办?)

    使用抓包命令,抓取访问服务器80的IP数  

     tcpdump -tnn dst port 80 -c 100 | awk -F"." ‘{print $1"."$2"."$3"."$4}‘ | sort | uniq -c | sort -n -r |head -20

       tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

       listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
       100 packets captured
        101 packets received by filter
        0 packets dropped by kernel
           78 IP 221.239.28.142
                  17 IP 124.65.101.82
                 13 IP 14.123.162.69
                 7 IP 183.238.49.188
                7 IP 120.234.19.186

可以看到221.239.28.142的包最多,所以我们进行封IP处理。

  iptables -I INPUT -s 221.239.28.142 -j REJECT 

iptabes 其他限制规则:            

#防御太多DOS攻击连接,可以允许外网每个IP最多15个初始连接,超过的丢弃,第二条是在第一条的基础上允许已经建立的连接和子连接允许

iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 --connlimit-mask 32 -j DROP  (--connlimit-mask 32为主机掩码,32即为一个主机ip,也可以是网段)
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#抵御DDOS ,允许外网最多24个初始连接,然后服务器每秒新增12个,访问太多超过的丢弃,第二条是允许服务器内部每秒1个初始连接进行转发
iptables -A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

#允许单个IP访问服务器的80端口的最大连接数为 20 

iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 20 -j REJECT 

 #对访问本机的22端口进行限制,每个ip每小时只能连接5次,超过的拒接,1小时候重新计算次数

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 3600 --hitcount 5 -j DROP

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT

 

 

 

iptables防ddos攻击方法

synflood攻击:SYNFlood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式(TCP... 查看详情

iptables防ddos攻击和cc攻击设置

防范DDOS攻击脚本#防止SYN攻击轻量级预防 iptables-Nsyn-floodiptables-AINPUT-ptcp--syn-jsyn-floodiptables-Isyn-flood-ptcp-mlimit--limit3/s--limit-burst6-jRETURNiptables-Asyn-flood-jREJECT#防止DOS太多连接进来,可以允许外网网卡每个IP最 查看详情

iptables防ddos攻击和cc攻击配置(代码片段)

防范DDOS攻击脚本#防止SYN攻击轻量级预防iptables-Nsyn-floodiptables-AINPUT-ptcp–syn-jsyn-floodiptables-Isyn-flood-ptcp-mlimit–limit3/s–limit-burst6-jRETURNiptables-Asyn-flood-jREJECT#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接, 查看详情

利用iptables防止synflood攻击

650)this.width=650;"src="https://s2.51cto.com/wyfs02/M01/A5/F6/wKioL1nGTTCwE0p9AAGVJibPwX0491.png"title="781735-20160929125832281-151696413.png"alt="wKioL1nGTTCwE0p9AAGVJibPwX0491.png"/>命令:iptables-Ns 查看详情

iptables防攻击

...可能通过向服务器大量发送SYN消息来占用所有这些资源。Synflood是常见的攻击,可以通过以下iptables规则进行阻挡:所有进入的连接是允许的,直到达到极限:-limit1/s:以秒为单位的最大平均匹配率-limit-burst3:要匹配的包的最大初始数... 查看详情

服务器要怎么防cc攻击?

什么是CC攻击: CC攻击可以归为DDoS攻击的一种。他们之间的原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。CC攻击又可分为代理CC攻击,和肉鸡CC攻击。代理CC攻击是黑客借助代理服务器生... 查看详情

cc攻击可以防么

当然可以,通过以下几种方法可以防御CC攻击:1、取消域名绑定一般CC攻击都是针对网站的域名进行攻击,比如我们网站域名为:www.oldboyedu.com,那么攻击者就在攻击工具中设定攻击对象为该域名然后实施攻击。对于这样的攻击... 查看详情

防cc攻击利器之httpgrard

...httpgrard介绍HttpGuard是基于openresty,以lua脚本语言开发的防cc攻击软件。而openresty是集成了高性能web服务器Nginx,以及一系列的Nginx模块,这其中最重要的,也是我们主要用到的nginxlua模块。HttpGuard基于nginxlua开发,继承了nginx高并发... 查看详情

使用iptables缓解ddos及cc攻击

防止SYN攻击,轻量级预防iptables -N syn-floodiptables -A INPUT -p tcp –syn -j syn-floodiptables -I syn-flood -p tcp -m limit –limit 查看详情

防火墙和iptables

...攻击6.3.1三次握手建立tcp连接6.3.2四次挥手端口tcp连接6.3.3synflood攻击6.4各种文件分布6.4.1从链路层来判断是否处理6.4.2从网络层来判断是否处理6.4.3从传输层来判断是否处理6.4.4从应用层来判断是否处理6.4.5特殊 查看详情

iptables限制同一ip连接数,防防cc/ddos攻击

启动sftp本机的iptables防火墙功能,限制每个ip连接22端口(sftp连接端口即是ssh端口)最大为50个,当超过50后的连接数的流量就会被DROP掉!同时iptables需要开放50000-65535范围的端口的访问(linux系统最大的端口为65535) [[email ... 查看详情

synflood了解和简单防范笔记!

一:什么是CentOSSYNFlood攻击?CentOSSYNFlood攻击利用的是IPv4中TCP协议的三次握手(Three-WayHandshake)过程进行的攻击。这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCPSYN(synchronize)包到对方。对方收到后发送一个TCP... 查看详情

ddos/cc攻击单靠单独硬防有用?

...避免的困扰。比如一些游戏或者人气站点很容易受到同行攻击或索要保护费等。DDOS与CC攻击是最为常见,其中DDOS流量攻击最为致命也是最难防御的。除非依靠庞大的网络带宽及硬件防火墙才能缓解或与之抗衡,但真实的费用将... 查看详情

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

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

linux下ngxin服务器防ddos攻击自动加iptables的shell脚本(代码片段)

...,自动筛选出访问量大于5000的IP,并将其加入到iptables的进制黑名单中,多少对DDos攻击有些帮助。#!/bin/bashDATE=$(date+%d/%b/%Y:%H:%M)LOG_FILE=/u 查看详情

linux下ngxin服务器防ddos攻击自动加iptables的shell脚本(代码片段)

...,自动筛选出访问量大于5000的IP,并将其加入到iptables的进制黑名单中,多少对DDos攻击有些帮助。#!/bin/bashDATE=$(date+%d/%b/%Y:%H:%M)LOG_FILE=/u 查看详情

linux下ngxin服务器防ddos攻击自动加iptables的shell脚本(代码片段)

...,自动筛选出访问量大于5000的IP,并将其加入到iptables的进制黑名单中,多少对DDos攻击有些帮助。#!/bin/bashDATE=$(date+%d/%b/%Y:%H:%M)LOG_FILE=/u 查看详情

linux里面cc攻击和ddos攻击区别是啥?

DDOS和CC攻击的区别dos攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动攻击,从而成倍地提高拒绝服务攻击的威力。ddos的攻击方式有很多种,最基本的dos攻击就是利用合理的服务请求... 查看详情