网络安全——Iptables防DDoS攻击实验

一、实验目的要求:

二、实验设备与环境:

三、实验原理:

四、实验步骤:

五、实验现象、结果记录及整理:

六、分析讨论与思考题解答:


一、实验目的要求:

1、掌握常见DDoS攻击SYN Flood的攻击原理。

2、学习设计防火墙的过滤策略,防御DDoS攻击。

3、具体要求:

        1)模拟DDoS攻击的方式实现SYN Flood攻击。

        2)通过配置不同的防御策略和IPtables规则,防御SYN Flood攻击


二、实验设备与环境:


三、实验原理:

1SYN Flood攻击

        根据TCP协议传输的特点,攻击方向目标发送大量伪造的TCP连接请求,即目标主机在发出SYN+ACK应答报文后无法收到ACK报文,第三次握手失败,从而使目标连接资源耗尽,无法正常响应TCP的连接请求。常见的攻击方式有Direct Attack攻击方使用固定的IP发起攻击和Spoofing Attack攻击方使用变化的IP发起攻击。

2SYN Flood防御

主要有两种,一种是通过Linux内核提供的SYN相关配置,另一种是通过Iptables规则设置。

配置Linux中的SYN:1)缩短SYN Timeout的时间,降低服务器的负荷;2)设置SYN Cookie,若有重复的SYN报文,判定为受到攻击并丢弃。

Iptables规则设置:1)固定的IP发起攻击,对SYN包进行监视,异常行为则列入黑名单;2)变化的IP发起攻击,控制单个IP的最大并发连接数,即在一定时间内允许新建立的连接数。

3Sysctl命令

Sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。根据Sysctl相关命令,进行信息的增删改查。格式为:"sysctl [选项] [参数]"。

4Netstat命令

Netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。根据Netstat相关命令,进行信息的打印输出。格式为:"netstat [选项]"。


四、实验步骤:

(一)轻量级防御SYN Flood攻击

       1、查看环境:登录被攻击主机3,执行"sudo -i"命令切换至root用户模式;再执行" sysctl -a | grep syn "命令,查看系统Linux内核提供的SYN相关配置。Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。输出信息如图1所示。

"net.ipv4.tcp_max_syn_backlog"定义了处于SYN_RECV的TCP最大连接数,当处于SYN_RECV状态的TCP连接数超过tcp_max_syn_backlog后,会丢弃后续的SYN报文。

"net.ipv4.tcp_syncookies=1"表示默认打开SYN Cookie功能,该功能可以防止部分SYN攻击。

"net.ipv4.tcp_synack_retries=6"和"net.ipv4.tcp_syn_retries=5"表示SYN的重试次数。

执行"sysctl -w net.ipv4.tcp_syncookies=0"命令可以关闭SYN Cookie功能。

执行"sysctl -w net.ipv4.tcp_syncookies=1"命令可以打开SYN Cookie功能,最终保持打开状态。

        2、规则配置:将主机3的SYN重试次数设置为3;降低SYN重试次数可以降低处于半连接状态的数量,有效缓解SYN Flood攻击。

tcp_syn_retrie:对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。

tcp_synack_retries:对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。

# sysctl -w net.ipv4.tcp_synack_retries=3

# sysctl -w net.ipv4.tcp_syn_retries=3

# sysctl -a | grep syn

(二)防御固定IPSYN Flood攻击

       1、发起攻击:登录主机1,进入终端,通过终端进行对主机3(30.0.1.4)的攻击;

       "# hping3 -S --flood -V 30.0.1.4 -p 22"命令实现;

       hping是面向命令行的用于生成和解析TCP/IP协议数据包汇编/分析的开源工具。本次利用其中的功能之一,拒绝服务攻击。对目标机发起大量SYN连接。

       2、查看状态:登录主机3,进入root模式,查看SYN_RECV半连接状态的TCP连接。

       "# netstat -an | grep SYN_RECV"命令查看连接状态;

       从结果可看出,有大量由30.0.1.4发起的TCP连接处于半连接状态;

       "# netstat -an | grep SYN_RECV | wc –l"命令查看连接数量;

       从结果可看出,TCP连接处于半连接状态的数量为256个。

         3、防御攻击:在主机3下,执行命令配置Iptables规则,防御来自源IP 30.0.1.4 SYN Flood攻击。

       "# iptables -I INPUT -p tcp -m connlimit  --connlimit-above 5 -j REJECT"命令配置允许单个IP访问服务器的最大连接数为5。

       "iptables -L -v"使其生效。从结果可看出,Iptables拦截了大量的TCP并发连接。"# netstat -an | grep SYN_RECV | wc -l # netstat -an | grep SYN_RECV"命令,查看处于SYN_RECV(半连接)状态的数量,限制在iptables规则连接数内。 TCP连接处于半连接状态的数量逐渐减少,最后降为0,说明防御策略生效。

        4、还原设置:在主机1上,停止(Ctrl+C)SYN Flood攻击;在主机3上,清空(iptales -F)iptables规则

 (三)防御变化IPSYN Flood攻击

    1、发起攻击:同理,登录主机2,通过终端发送变化IP的SYN报文攻击目标主机3(30.0.1.4)。

       "# hping3 -S --flood -V 30.0.1.4 -p 22 --rand-source"命令实现;

       2、查看状态:登录主机3,执行以下命令查看处于SYN_RECV(半连接)的TCP连接;存在207个SYN_RECV连接。

       "# netstat -an | grep SYN_RECV | wc -l # netstat -an | grep SYN_RECV"命令实现;

       3、防御攻击:登录主机3,配置每分钟最多允许1个SYN新连接;

       "# iptables -A INPUT -p tcp --syn -m limit --limit 1/m --limit-burst 1 -j ACCEPT"

       "# iptables -L -v"使其生效;

登录主机3,执行"iptables -L -v"命令可查看到主机以每分钟新增1个连接数的速度接受数据包。可看出,每分钟只有一个数据包连接。

       4、还原设置:在主机1上,停止(Ctrl+C)SYN Flood攻击;在主机3上,清空(iptales -F)iptables规则


五、实验现象、结果记录及整理:

1、在轻量级防御SYN Flood攻击中,结合grep正则表达式可清楚的查看出Linux内核提供的SYN相关配置;可结合自身环境所需,对信息进行相应的配置修改;

2、在防御固定IP的SYN Flood攻击中,即Direct Attack攻击,使用限制服务器的最大连接数方法,有效的拦截了大量的TCP并发连接;

3、在防御变化IP的SYN Flood攻击中,即Spoofing Attack 攻击,使用每分钟最大连接数的方法进行防御,有效的拦截了大量的SYN新连接。


六、分析讨论与思考题解答:

1、Hping的功能?

防火墙测试、端口扫描、Idle扫描、拒绝服务攻击、文件传输、木马功能

2、Syn Flood有哪些种类?

①Direct Attack攻击方使用固定的源地址发起攻击,对攻击方的消耗最小;

②Spoofing Attack攻击方使用变化的源地址发起攻击,需要攻击方不停地修改源地址

③Distributed Direct Attack这种攻击主要是使用僵尸网络进行固定源地址的攻击

3、有哪些方法可预防Syn Flood攻击?

①对SYN包进行监视;如果发现某个IP发起了较多的攻击报文,直接将这个IP列入黑名单;

②无效连接监视释放;这种方法不停监视系统的半开连接和不活动连接,当达到一定阈值时拆除这些连接,从而释放系统资源;

③延缓TCB分配方法;当正常连接建立起来后再分配TCB则可以有效地减轻服务器资源的消耗,主要是是使用SYN Cache和SYN Cookie技术;

④使用SYN Proxy防火墙。


七、实验相关截图:

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCL点云处理之主成分分析(PCA)拟合圆柱参数(C++详细介绍)(二百二十六)

PCA点云处理之主成分分析拟合圆柱参数(C++详细介绍)(二百二十六) 一、算法介绍二、算法设计三、算法实现1.代码2.结果3.矩阵分解的特征值和特征向量的说明一、算法介绍 这个算法的作用是对给定的点云数据进行圆柱拟合,从而得到圆柱的主轴向量、中心点和半径参数。具体来说…

Cmake基础(4)

这篇文章在上一篇的基础之上应用多文件,即一个项目中添加多个文件 文章目录 GLOBsource_group排除文件 上一篇文章的cmake基本不变,这篇文章的重点在于add_executable(${EXECUTABLE_NAME} main.cpp) GLOB file(GLOB cpp_list ${CMAKE_CURRENT_SOURCE_…

FPGA实现腐蚀和膨胀算法verilog设计及仿真 加报告

要在FPGA上实现腐蚀和膨胀算法,你可以按照以下步骤进行: 图像存储:首先,你需要设计一个图像存储器来存储待处理的图像数据。这可以采用FPGA内部存储器或外部存储器。 读取图像数据:使用适当的接口从图像存储器中读取图像数据,并将其加载到FPGA的计算单元中。 结构元素定义…

Arrays.asList()方法:陷阱与解决之道

在Java编程中,Arrays类提供了一系列用于操作数组的实用方法。其中,​Arrays.asList()​方法是一个常用的方法,用于快速将数组转换为List集合。然而,这个方法存在一些潜在的陷阱,可能导致出现意外的行为。本文将介绍​A…

h5 hdf5 pytables 数据库 减少空间占用的方法

方法来源:https://forum.hdfgroup.org/t/hdf5-deleting-datasets-and-recovering-space/1293 h5 数据库,在删除一些数据,表,数组后,无法变小; 或是在多次读写后,会越来越大,并且有一…

剑指 Offer(第2版)面试题 35:复杂链表的复制

剑指 Offer(第2版)面试题 35:复杂链表的复制 剑指 Offer(第2版)面试题 35:复杂链表的复制解法1:模拟 剑指 Offer(第2版)面试题 35:复杂链表的复制 题目来源&…

python:import 自定义包或者.py文件时出现:ModuleNotFoundError: no module named 的问题解决

问题: 在以下的示例中,wuHanMoviesSprider.py文件,想要import引用指定目录下的Items类时,出现无法识别module模块的问题(from 的引用处报错)。 原因分析: 正常情况下,被引用的包(或目录)中存在一个空文件…

【华为数据之道学习笔记】5-3数据入湖标准

数据入湖是数据消费的基础,需要严格满足入湖的6项标准,包括明确数据Owner、发布数据标准、定义数据密级、明确数据源、数据质量评估、元数据注册。通过这6项标准保证入湖的数据都有明确的业务责任人,各项数据都可理解,同时都能在相…

vue 实现点击复制文本到剪贴板

vue 实现点击复制文本到剪贴板 共四种方法 1. navigator.clipboard.writeText该方法需要在安全域下才能够使用&#xff0c;比如&#xff1a;https 协议的地址、127.0.0.1、localhost <template><div><el-button type"primary" click"btn1"…

【PostgreSQL】从零开始:(八)PostgreSQL-数据库PSQL元命令

元命令 postgres# \? General\bind [PARAM]... set query parameters\copyright show PostgreSQL usage and distribution terms\crosstabview [COLUMNS] execute query and display result in crosstab\errverbose show most recent error…

Docker 部署 Lobe Chat 服务

拉取最新版本的 Lobe Chat 镜像&#xff1a; $ sudo docker pull lobehub/lobe-chat:latest使用以下命令来运行 Lobe Chat 容器: $ sudo docker run -d --name lobe-chat -p 10084:3210 -e OPENAI_API_KEYsk-xxxx -e OPENAI_PROXY_URLhttps://api.openai.com/v1 -e ACCESS_CO…

ES6 面试题 | 13.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

深度神经网络在作为人类听觉模型方面显示出了前景

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

android Retrofit2.0请求 延长超时操作

import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory;public class MyApiClient {private static final String BASE_URL "https://api.example.com/";// 创建 OkHttpClient&#xff0c;并设置超时时间…

普冉(PUYA)单片机开发笔记(10): I2C通信-配置从机

概述 I2C 常用在某些型号的传感器和 MCU 的连接&#xff0c;速率要求不高&#xff0c;距离很短&#xff0c;使用简便。 I2C的通信基础知识请参见《基础通信协议之 IIC详细讲解 - 知乎》。 PY32F003 可以复用出一个 I2C 接口&#xff08;PA3&#xff1a;SCL&#xff0c;PA2&a…

C++ 运算符重载

目录 前言 算术运算符重载 加号运算符 位运算符重载 左移运算符 自增自减运算符重载 前置自增运算符 后置自增运算符 赋值运算符重载 等号赋值运算符重 关系运算符重载 相等 不等 函数调用运算符重载 总结 前言 在C中&#xff0c;运算符重载是一种强大的特性…

C语言经典错误总结(三)

一.指针与数组理解 我们都知道定义一个数组然后对其进行各种想要的操作&#xff0c;但是你真的能够区分那些是对数组的操作&#xff0c;那些是通过指针实现的吗&#xff1f; 例如;arr[1]10;这个是纯粹对数组操作实现的吗&#xff1f; 答案肯定不是&#xff0c;实际上我们定义…

目标检测YOLO实战应用案例100讲-自动驾驶复杂场景下目标检测(续)

目录 3.2 YOLOv5框架的分析 3.3改进算法的基本思想 3.4改进聚类算法 3.5重构损失函数模型和NMS算法<

HiveSql语法优化四 :Bucket Map Join和Sort Merge Bucket Map Join优化

Bucket Map Join 之前的map join适用场景是大表join小表的情况&#xff0c;但是两张表都相对较大&#xff0c;若采用普通的Map Join算法&#xff0c;则Map端需要较多的内存来缓存数据&#xff0c;当然可以选择为Map段分配更多的内存&#xff0c;来保证任务运行成功。但是&#…

数据可视化---柱状图

import matplotlib.pyplot as plt import numpy as npdef plot_bar_chart(data, labels, colorsNone, title"Bar Chart", xlabel"X-Axis", ylabel"Y-Axis"):"""绘制柱状图&#xff0c;并在柱子上显示数量和比例。:param data: 包…