网站首页 > 教程文章 正文
SYN洪水攻击原理
SYN Flood 或称 SYN洪水、SYN洪泛是一种阻断服务攻击,起因于攻击者传送一系列的SYN请求到目标系统。 SYN洪水攻击是DDOS攻击中最常见的攻击类型之一,是一种利用TCP 协议缺陷,攻击者向被攻击的主机发送大量伪造的TCP连接请求,从而使得被攻击方主机服务器的资源耗尽(CPU 满负荷或内存不足) 的攻击方式。
SYN攻击的目标不止于服务器,任何网络设备,都可能会受到这种攻击,针对网络设备的SYN攻击往往会导致整个网络瘫痪。
用户和服务器之间的正常连接,正确执行3次握手。
当客户端尝试与服务器建立TCP连接时,客户端和服务器在正常情况下交换一组信息,如下所示:
1、客户端将SYN同步信息发送到服务器并请求连接设置
2、服务器响应客户端SYN-ACK响应请求
3、客户端承诺ACK并建立连接
这是在所谓的TCP 3次握手中使用TCP传输协议的每个连接的基础。
水槽洪水,攻击者发送许多数据包,但不向服务器发送“ACK”。因此,连接半开,吞下服务器资源,由于阻止服务攻击,合法用户尝试连接到服务器但被拒绝。
SYN Flood是一种众所周知的攻击,在现代网络中通常无效。这种类型的攻击仅在服务器收到SYN后才分配资源,但在本节中,它会在收到ACK之前生效。
目前有两种SYN Flood攻击方式,但它与所有服务器都没有收到ACK的事实有关。恶意用户无法接收ACK,因为服务器向假IP地址发送SYN-ACK,跳过最后一条ACK消息或模拟SYN的源IP地址。在这两种情况下,服务器都需要时间来复制通知,这可能会导致简单的网络拥塞而无需ACK
如果这些半开放连接绑定服务器资源,则服务器可以向服务器排出大量SYN信息。如果为半开连接保留所有资源,则会阻止服务攻击,因为无法设置新连接(无论合法)。其他操作系统功能可能需要这种形式的资源,即使在某些系统上,即使停机也可能非常严重。
1996年用于分配半开放连接资源的技术通常包括相当短的队列(例如,8个空座位)。当连接完成或过期时(例如,3分钟后),您可以打开队列间隔。如果队列已满,则新的传入连接将失败。在上面的示例中,在发送总共8个数据包之前,所有新的传入连接都被阻止。这意味着每3分钟计算8个数据包,并阻止所有新的TCP连接。此阻止服务仅攻击少量流量。
建议的措施包括SYN cookie和限制在特定时间段内从同一源请求的新连接数,但最新的TCP / IP堆栈没有上面提到的瓶颈因为它位于SYN Flood和其他基于通道的容量之间。攻击类型应该很少或没有区别。
企业遭到SYN攻击该如何防御呢?分享一下如何利用iptables来缓解SYN攻击。
syn洪水攻击的解决办法
1、修改等待数
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
2、启用syncookies
sysctl -w net.ipv4.tcp_syncookies=1
3、修改重试次数
sysctl -w net.ipv4.tcp_syn_retries = 0
重传次数设置为0,只要收不到客户端的响应,立即丢弃该连接,默认设置为5次
4、限制单IP并发数
使用iptables限制单个地址的并发连接数量:
iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT
5、限制C类子网并发数
使用iptables限制单个c类子网的并发链接数量:
iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 24 -j REJECT
6、限制单位时间内连接数
设置如下:
iptables -t filter -A INPUT -p tcp --dport 80 -m --state --syn -m recent --set
iptables -t filter -A INPUT -p tcp --dport 80 -m --state --syn -m recent --update --seconds 60 --hitcount 30 -j DROP
7、修改modprobe.conf
为了取得更好的效果,需要修改/etc/modprobe.conf
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
作用:记录10000个地址,每个地址60个包,ip_list_tot最大为8100,超过这个数值会导致iptables错误
8、限制单个地址最大连接数
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j D
- 上一篇: C++网络编程之最简单的服务端和客户端
- 下一篇: Nginx-性能优化
猜你喜欢
- 2025-01-18 Nginx-性能优化
- 2025-01-18 C++网络编程之最简单的服务端和客户端
- 2025-01-18 Centos7系统内核优化脚本
- 2025-01-18 OpenStack 计算节点 ARP表 溢出导致批量宕机案例分析
- 2025-01-18 高流量大并发Linux TCP性能调优
- 2025-01-18 TCP之面向连接
- 2025-01-18 CentOS8服务器搭建L2TP服务器(over IPsec)操作指南
- 2025-01-18 网络性能debug参数整理
- 2025-01-18 高并发/高io下,设置linux下文件打开数限制
- 2025-01-18 Linux TCP队列相关参数的总结
- 05-11阿里开源MySQL中间件Canal快速入门
- 05-11MyBatis插件开发实战:手写一个分页插件
- 05-11Flask数据库——SQLAlchemy
- 05-11MySQL 到 Hazelcast Cloud 实时数据同步实操分享
- 05-11sqlmap 详解
- 05-11一篇文章让你学会Elasticsearch中的查询
- 05-11Mysql性能优化这5点你知道吗?简单却容易被初学者忽略!
- 05-11Spring Boot 实现 MySQL 读写分离技术
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)