02.iptables攻击防御

article/2025/9/19 12:39:38

DDOS 攻击

  • 分布式拒绝服务(Distributed Denial of service)

  • 多计算机联合发起DOS攻击,造成目标机器资源耗尽、系统过载

 

DDOS 攻击方式

  • Ping flood:大量ping包

  • Ping of Death:修改后的ping包,如造成逻辑错误、加长数据包使其超过IP报文限制

  • Teardrop attacks:损坏的IP包,如重叠的包或过大的包负荷

  • UDP Flood:大量udp小包

  • SYN flood:利用tcp连接过程,消耗系统资源(大量syn包)

  • CC(challenge Collapsar) : 针对业务,构造大量消耗服务器资源的业务请求

DDOS 攻击现象

  • 服务器上大量TIME_WAIT包

  • 网络中大量无用包

  • 源地址为假

  • 重复的服务请求

  • 服务器死机、重启

  • 网络拥塞、访问慢

  • 服务器CPU满负荷

DDOS 防护措施

  • 主机防护

    • 关闭非必要的服务和端口

    • 同一时间段内限制打开的syn半连接数量

    • 缩短syn半连接的超时时间

    • 及时打补丁

  • 网络防护

    • 禁止对主机非开放服务的访问

    • 限制同时打开的syn最大连接数

    • 限制特定IP访问

    • 启用防火墙防DDoS属性

DDOS 防御脚本

该脚本主要用于测试,目的是将一些连接数多的IP加入到iptables并DROP掉,生产环境中基本没有作用

脚本内容

vim dropip.sh # 自动提取攻击 ip#!/bin/bash
netstat -na | awk '/ESTABLISHED/{split($5,T,":");print T[1]}' | sort | grep -v -E '192.168|127.0' | uniq -c | sort -rn | head -10 | awk '{if ($2!=null && $1>4) {print $2}}' > /var/log/rejectipfor i in $(cat /var/log/rejectip)
dorep=$(iptables-save | grep $i)if [[ -z $rep ]];then/sbin/iptables -A INPUT -s $i -j DROPecho "$i kill at `date`">>/var/log/ddos-ipfi
done

脚本逻辑

脚本的执行过程:

  • 首先通过 netstat -na 查看所有的连接

  • 然后通过 awk 提取所有已经成功建立连接的远程 IP 地址(也就是疑似攻击者的 IP)

    • awk 只对包含 ESTABLISHED 关键字的行做处理

    • split 指定处理第五列(也就是远程 IP 的列),将处理的数据存放入 T 数组中,指定以 : 来分隔

  • 接着通过 sort 排序,此时会将相同的 IP 放在一起(因为 uniq 统计的时候是按行处理的,分开的相同行处理不到)

  • 我们将本地的连接剔除统计

  • 随后通过 uniq 命令对相同的 IP 做统计,统计出其出现的次数

  • 再通过 sort 命令做反向的排序( -r 参数出现次数高的排前,低的排后)

  • 使用 head 命令来读取前十个 IP 地址

  • 随后我们再次使用 awk 过滤出连接数超过 4 次的 IP 地址

  • 然后将过滤出来的 IP 地址重定向至 /var/log/rejectip 中

  • 使用 for 循环读取文本中的 IP 地址

    • 首先检查这个 IP 地址是否已经加入了 iptables 的规则中

      • 若是已经加入则不处理

      • 若是还未加入则使用 iptables 将其 drop 掉并记录至日志中

SYN攻击

大量连接处于SYN RECV(半连接),导致服务器资源耗费。此状况称为 ** SYN flood**

在tcp连接过程中,客户端发送了SYN,服务端响应了请求,TCP连接会变成 SYN_RCVD状态(服务端发送回确认信息以及请求信号,并将该信息加入到未连接队列中)。此时TCP状态变化为:LISTEN->SYN RECV 此时若客户端不做处理,则会一直处于该状态等待超时。该状态将造成资源的耗费。

 

SYN攻击的模拟测试

# 安装apache,因为要使用ab
yum -y install httpd
systemctl restart httpd
​
# ab发起并发请求
ab -n 1000000 -c 600 http://localhost/index.html        # -n 总请求数 -c 并发数
​
# 服务器过滤连接情况
netstat -an | grep SYN
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
​

 

Iptables层面的防护

#使用 limit 对 syn 的每秒钟最多允许 1 个新链接,接收第三个数据包的时候触发
iptables -A INPUT -p tcp --syn -m limit --limit 1/s    --limit-burst 3 -j ACCEPT
​
#或者针对每个客户端做出限制,每个客户端限制并发数为 10 个,这里的十个只是为了模拟,可以自己酌情考虑
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT

SYN 防范配置文件

vim /etc/sysctl.conf
​
# 表示开启 SYN Cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭
net.ipv4.tcp_syncookies = 1
​
# 表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
​
# 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭。
net.ipv4.tcp_tw_recycle = 1
​
# 表示开启 TCP 连接的最大数量的限制
net.ipv4.tcp_max_tw_buckets = 5000

CC攻击

  • 发送大量数据包给服务器,导致服务器资源耗尽

  • 主要用来攻击页面,导致访问慢

  • 模拟大量用户发起访问

  • 完整请求,属于TCP全连接攻击

防御方法

  • 域名欺骗解析,比如解析成127.0.0.1

  • 更改web端口,改成非常用端口

  • IIS屏蔽IP


http://chatgpt.dhexx.cn/article/WULwgFnW.shtml

相关文章

畸形报文攻击(1)

畸形报文攻击(1) 0x01 写在前面 最近在工作之余,都在看CTF东西,然后和朋友们玩狼人杀玩到昏天黑地,差点忘记要把对畸形报文攻击的研究记录下来,这篇文章的内容是畸形报文攻击中的smurf攻击,land攻击,Fragg…

单包攻击防御

单包攻击防御 目录 单包攻击防御 畸形报文攻击防御 1.smurf攻击 处理方式 2.Land攻击 处理方式 3.Fraggle攻击 处理方式 IP分片报文攻击 (IP Fragment攻击) 定义: 处理方式 Ping of Death攻击 定义 处理方式 TCP报文标志位攻…

【计算机网络原理·实验·第八章】SYN攻击Land攻击

SYN攻击和land攻击,使用 虚拟机环境测试。 SYN攻击:发送端发送数据时截获该数据包,然后篡改发送端的源IP地址并发给服务器,服务器会返回给错误的IP地址确认数据包,而收到确认数据包计算机会忽略该请求,然而…

着陆攻击LAND Attack

2019独角兽企业重金招聘Python工程师标准>>> 着陆攻击LAND Attack 着陆攻击LAND Attack也是一种拒绝服务攻击DOS。LAND是Local Area Network Denial的缩写,意思是局域网拒绝服务攻击,翻译为着陆攻击只是一种错误的理解。攻击原理为&#xff0…

浅析GC-垃圾回收

前置知识 CLR:公共语言运行时 CLR(Common Language Runtime):CLR的核心功能包括内存管理,程序集加载,类型安全,异常处理和线程同步,而且还负责对代码实施严格的类型安全检查&#…

【JVM】垃圾回收机制详解(GC)

目录 一.GC的作用区域二.关于对象是否可回收1.可达性分析算法和引用计数算法2.四种引用类型 三.垃圾收集算法1.标记-清除算法2.复制算法3.标记-整理算法4.分代收集算法 四.轻GC(Minor GC)和重GC(Full GC) 一.GC的作用区域 可以看jvm详解之后,再来理解这篇文章更好 …

垃圾回收机制的各种疑问

目录 jvm的内存模型中,运行时数据区分为哪几个部分?JVM如何判断一个对象所占内存是可以被回收的?什么是年轻代?方法区和永久带的联系是什么?为什么要分年轻代和老年代?为什么新生代和老年代要采用不同的回收…

垃圾回收(GC) 很干,很全

说一下垃圾回收机制 垃圾回收主要针对的是JVM的堆内存,我讲一下我了解的hotspot实现的jvm, 分为新生代和老年代,按照以前的说法,还有一个永久代,永久代在方法区里(物理上跟老年代相连),保存了class信息,静态变量,常量池等, jdk1.8之后,方法区实现发生了变化,取消了永久代的概念…

浅谈垃圾回收机制

目录 前言: 1.标记清除(主要) 2.引用计数(次要) 3.一些注意的点 前言: JavaScript的垃圾回收机制是为了防止内存泄漏的,所谓的内存泄漏是指当已经不需要某块内存时这块内存还存在着&#xff…

通过图文给你讲明白java GC的垃圾回收机制

本文原链接 http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 1. JAVA GC 概述 JAVA GC采用了分代思想,将java堆分成新生代,年老代,永久代。GC算法主要有标记-清除,标记-压缩,复制算法。 新生代…

jvm垃圾回收是什么时候触发的? 垃圾回收算法? 都有哪些垃圾回收器

1.1。那究竟GC为我们做了什么操作呢? 1 ,哪些内存需要回收? 2 ,什么时候回收? 3 ,如何回收? 这时候有人就会疑惑了,既然GC 已经为我们解决了这个矛盾,我们还需…

Java回收垃圾的基本过程与常用算法

目录 一、基本概述 二、垃圾分类 基本背景 举例说明各种引用类型的作用 强引用(Strong Reference) 软引用(Soft Reference) 弱引用(Weak Reference) 虚引用(Phantom Reference&#xff…

java面试-GC垃圾回收机制

原理: GC是垃圾收集的意思(Garbage Collection),Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。 简而言之,GC是将java的无用的堆对象进行清理,释放内存,以免发生内存泄露。…

JVM垃圾回收算法、GC和分代回收、三色标记并发漏标、垃圾回收器

一.标记清除 标记速度与存活对象线性关系 清除速度与内存大小线性关系 标记清除法分为标记阶段和清除阶段,标记阶段首先找到一些GC Root对象(根对象),根对象是那些一定不能被回收的对象。清除阶段比较简单,加标记的对…

垃圾回收的主要区域是堆,那方法区会回收吗?

有些人认为方法区(如HotSpot虚拟机中的元空间或者永久代)是没有垃圾收集行为的,《Java虚拟机规范》中提到过可以不要求虚拟机在方法区中实现垃圾收集,事实上也确实有未实现或未能完整实现方法区类型卸载的收集器存在(如…

GC(垃圾回收)详解

JVM 1.年轻代:年轻代主要存放新创建的对象,垃圾回收会比较频繁。(稍微讲细一点就是即可,年轻代分成Eden Space和Suvivor Space。当对象在堆创建时,将进入年轻代的Eden Space。垃圾回收器进行垃圾回收时,扫描Eden Spac…

java---垃圾回收算法(GC)

目录 一、如何判断一个对象是否存活 1.引用计数法 2.可达性分析法 二、垃圾回收算法 1.标记清除法 2.复制算法 3.标记整理法 4.分代算法 具体流程 注意事项 空间分配担保原则 总结 一、如何判断一个对象是否存活 Java 堆中存放着几乎所有的对象实例,垃圾…

Java - GC 垃圾回收

JVM中一个垃圾回收线程,它的优先级较低,正常情况下不会执行。JVM空闲或者当前内存不足时,才会触发垃圾回收线程执行,扫描内没有被引用的对象,将这些对象添加到要回收的集合中进行回收。 GC介绍 Garbage Collection 垃圾收集,监测对象是否可…

GC是如何判断一个对象为垃圾的?被GC判断为垃圾的对象一定会被回收吗?

一.GC如何判断一个对象为”垃圾”的 java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。那么GC具体通过什么手段来判断一个对象已经”死去”的? 1.引用计数算法(…

基于28181协议的视频与平台的对接

问题描述 将IPC摄像头接入平台进行观看,或使用28181/rtsp/rtmp/flv等协议将视频流分发到其他平台。 解决方案 WVP-PRO(基于GB/T 28181-2016标准实现的流媒体平台),依托优秀的开源流媒体服务ZLMediaKit,提供完善丰富…