当前位置: 首页 > article >正文

《深入解析:DOS检测的技术原理与方法》

DDOS入侵检测与防御

一、实现Linux下DDOS的入侵检测与防御

利用Python编程实现对wrk的泛洪攻击检测,并让程序触发调用Linux命令实现防御:

1、泛洪攻击的检测,可以考虑使用的命令,这些命令可以通过Python进行调用和分析

(1) netstat -ant | wc -l
(2) netstat -ant | grep SYN_RECV
(3) netstat -s | grep overflowed
(4) netstat -s | grep dropped
(5) top -n 1 获取CPU的使用率

以上操作过程的命令,允许使用管道和AWK等技术提取数据,也可以直接使用Python进行数据提取。

2、防御措施可以选择以下几种

(1) 修改系统配置参数,来增加系统的TCP连接数 (2) 直接结束某些消耗CPU的进程,或者停止Apache的服务 (3) 开启防火墙,将目标IP地址进行封锁 (4) 自行查阅资料,进行其他可行的操作

上述Python代码实现的核心就是调用系统命令,再通过Python进行分析,触发命令的执行等。建议在Linux上安装Python3.7及以上的版本。

3、基本步骤

1、确保在Linux上可以正常运行Python3,而CentOS内置的是Python 2.7。 2、做基本的调研,明确对于DOS的入侵检测,需要使用哪些方法或命令。 3、将可以使用的命令通过Python来运行,并进行调试,确保Python+命令可以正常工作。可以直接使用命令提取数据,如使用grep,awk或sort等,也可以直接使用python解析字符串提取数据。 4、想办法找到连接数最多的攻击源IP地址,驱动Linux的防火墙进行入侵防御。5、最后进行整合,测试,再模拟攻击,来确保脚本本身可以正常检测。

二、理解各个命令的含义

1、uptime

uptime命令用于查看主机的开机时长,用户连接数量,以及在1、5、15分钟三段时间内,CPU的负载情况。

2、netstat

netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux操作系统的网络情况。需要注意的是在Windows和Linux上的参数会略有不同。

1. 以数字方式列出所有TCP连接情况:netstat -ant
2. 以数字方式列出所有UDP连接情况:netstat -anu
3. 以数字方式列出所有TCP和UDP处理监听状态的情况:netstat -anult
4. 显示所有端口的统计信息:netstat -s
5. 显示TCP端口的统计信息:netstat -st
6. 显示核心路由信息:netstat -r
7. 显示所有连接的进程信息:netstat -ap

3、ss

用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

1. 显示监听状态下的队列情况:ss -lnt
2. 显示非监听状态下的连接详情:ss -nt
3. 显示socket摘要信息:ss -s

LISTEN状态:Recv-Q表示的当前等待服务端调用accept完成三次握手的listen backlog数值,也就是说,当客户端通过connect()去连接正在listen()的服务端时,这些连接会一直处于这个queue里面直到被服务端accept();Send-Q表示的则是最大的listen backlog数值,这就是上面提到的min(backlog, somaxconn)的值。

非LISTEN状态:Recv-Q表示receive queue中的bytes数量;Send-Q表示send queue中的bytes数值,该数值意义不大,更多关注连接的数量和状态即可。

4. firewall-cmd

1. 关闭防火墙: `systemctl stop firewalld`
2. 添加允许端口: `firewall-cmd --add-port=80/tcp`
3. 列出防火墙规则: `firewall-cmd --list-all`
4. 禁止IP地方访问80端口: `firewall-cmd --add-rich-rule='rule family="ipv4 source address=192.168.112.148 port port=80 protocol=tcp reject'`(解封只需要把add——remove)
5. 让配置永久生效: 添加允许端口: `firewall-cmd --add-port=80/tcp --permanent`

5. sysctl

sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数。可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。

1. 显示所有系统参数: `sysctl -a`
2. 使用cat查看指定参数: `cat /proc/sys/net/ipv4/ip_forward`,除/proc/sys外,后面的路径与参数名称一致,换成/即可
3. 临时改变某个指定参数的值,如: `sysctl -w net.ipv4.ip_forward=1`,也可以: `echo 1 > /proc/sys/net/ipv4/ip_forward`
4. 如果想永久保留配置,可以修改/etc/sysctl.conf文件

快速修改部分参数,优化性能:

1. net.ipv4.tcp_syncookies:是否打开SYN COOKIES的功能,“1”为打开,“2”关闭。
2. net.ipv4.tcp_max_syn_backlog:SYN队列的长度,加大队列长度可以容纳更多等待连接的网络连接数。
3. net.ipv4.tcp_synack_retries 和 net.ipv4.tcp_syn_retries:定义SYN重试次数,默认为5,建议为2。
4. net.ipv4.sack=0

其他参数的说明: https://www.cnblogs.com/feiyun126/p/8646989.html

一些优化方案: https://blog.csdn.net/wangshuminjava/article/details/80935792

三、DOS的实现

1,python解析字符串

kali:vi dos.py(需要安装python3环境)
import os
import time
from collections import Counterdef get_cpu_load():# 第一步:先采集跟DOS攻击关联度较高的数据# 1、采集cpu数据的平均负载uptime = os.popen('uptime').read()# print(uptime)uptime = uptime.replace(": ", ",")float(uptime.split(",")[-3])# print(cpu_load)# print(type(cpu_load))# 利用awk命令来提取数据cpu_load = os.popen("uptime | awk -F ': ' '{print $2}' | awk -F ',' '{print $1}'").read()# print(cpu_load)# print(type(cpu_load))cpu_load = float(cpu_load)# print(type(cpu_load))# print(cpu_load)# 返回数据return cpu_load# 采集netstat -ant的连接数量
def get_conn_count():netstat = os.popen('netstat -ant | wc -l').read()return int(netstat)# 3、采集队列长度
def get_queue_size():# ss -lnt | grep :80 | awk '{print $3}'sslnt = os.popen("ss -lnt | grep :80").read()recvq = int(sslnt.split()[1])sendq = int(sslnt.split()[2])return recvq, sendq# 4、采集连接数据最多的IP地址
def get_most_ip():result = os.popen('netstat -ant | grep :80').read()line_list = result.split('\n')ip_list = []for line in line_list:try:temp_list = line.split()ip = temp_list[-2].split(':')[0]ip_list.append(ip)except:passdict = Counter(ip_list)most_ip = dict.most_common(3)return most_ip[0][0]# 5、调用firewall -cmd防火墙命令封锁被攻击IP地址
def firewall_ip(ip):result = os.popen(f"firewall-cmd --add-rich-rule='rule family=ipv4 source address={ip} port port=80 protocol=tcp reject'").read()if 'success' in result:print(f"已成功封禁可疑{ip}")else:print(f"对可疑攻击{ip}封锁失败")if __name__ == '__main__':while True:cpu = get_cpu_load()conn = get_conn_count()recvq, sendq = get_queue_size()most_ip = get_most_ip()print(f"cpu_load:{cpu},TCP_Conn:{conn},TCP_Queue:{recvq, sendq}")# 对采集到的数据进行判断,并进行预警提醒if cpu > 50 and conn > 500 and recvq > sendq - 10:print(f"当前系统TCP连接负载过重,CPU使用率过高,存在DOS攻击的可能性,可疑IP地址为:{most_ip}")firewall_ip(most_ip)time.sleep(5)

2,命令行提取数据

uptime | awk -F ": " '{print $2}'
uptime | awk -F ": " '{print $2}' | awk -F "," '{print $1}'

 

相关文章:

《深入解析:DOS检测的技术原理与方法》

DDOS入侵检测与防御 一、实现Linux下DDOS的入侵检测与防御 利用Python编程实现对wrk的泛洪攻击检测,并让程序触发调用Linux命令实现防御: 1、泛洪攻击的检测,可以考虑使用的命令,这些命令可以通过Python进行调用和分析 (1) netstat -ant …...

PID如何调试,如何配置P,I,D值,如何适配pwm的定时器配置,如何给小车配电源

首先你要搞清楚PID公式原理 PID算法解析PID算法解析_pid滤波算法-CSDN博客 然后你要明白调试原理 首先要确定一个电源 电源决定了你后面调试时电机转动速度大小和pwm占空比的关系,电源电压越大那要转到同一速度所需的占空比越小,反之电源电压越小那要…...

小马模拟器-第三方全街机游戏模拟器

链接:https://pan.xunlei.com/s/VOHSiB6st-f3RWlIK01MS2fUA1?pwd44v7# 1.小马模拟器是一款完全免费的游戏模拟器软件,支持街机(FBA,MAME,PGM2),3DS,WII,NGC,DC,SS,DOS,MD,WSC,NDS,JAVA,PCE,FC,SFC,GBA,GBC,PSP,PS,N64等多种游戏…...

Qwen2-VL:在任何分辨率下增强视觉语言模型对世界的感知 (大型视觉模型 核心技术 分享)

摘要 我们推出了Qwen2-VL系列,这是对之前Qwen-VL模型的高级升级,重新定义了视觉处理中的常规预设分辨率方法。Qwen2-VL引入了Naive Dynamic Resolution机制,使模型能够动态地将不同分辨率的图像转换为不同的视觉令牌数量。这种方法允许模型生成更高效和准确的视觉表示,紧密…...

微信小程序date picker的一些说明

微信小程序的picker是一个功能强大的组件&#xff0c;它可以是一个普通选择器&#xff0c;也可以是多项选择器&#xff0c;也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…...

MySQL 基础学习(2): INSERT 操作

在这篇文章中&#xff0c;我们将专注于 MySQL 中的 INSERT 操作&#xff0c;深入了解如何高效地向表中插入数据&#xff0c;并探索插入操作中的一些常见错误与解决方案。 一、基础 INSERT 语法 在 MySQL 中&#xff0c;INSERT 操作用于向表中插入新记录&#xff0c;基本语法如…...

关于opensips的帮助命令的解释

opensips -help以下是 opensips 命令及其选项的中文解释&#xff08;基于 3.6.0-dev 版本&#xff09;&#xff1a; 命令用法 opensips -l 地址 [-l 地址 ...] [选项]选项说明 选项功能-f 文件指定配置文件&#xff08;默认为 /usr/local//etc/opensips/opensips.cfg&#x…...

新项目传到git步骤

1.首先创建远程仓库,创建一个空白项目,即可生成一个克隆URL,可以是http也可以是SSH,copy下这个地址 2.找到项目的本机目录,进入根目录,打开git bash here命令行 3.初始化: git init 4.关联远程地址: git remote add origin "远程仓库的URL" 5.查看关联 git re…...

【力扣每日一题】LeetCode 2412: 完成所有交易的初始最少钱数

LeetCode 2412: 完成所有交易的初始最少钱数 题目解析 问题描述 给定一个二维数组 transactions&#xff0c;每个元素 transactions[i] [costi, cashbacki] 表示一个交易。对于每笔交易&#xff0c;要求你完成该交易时有足够的初始资金 money&#xff0c;并且交易会减少或增…...

【算法】递归型枚举与回溯剪枝初识

递归型枚举与回溯剪枝初识 1.枚举子集2.组合型枚举3.枚举排列4.全排列问题 什么是搜索&#xff1f;搜索&#xff0c;是一种枚举&#xff0c;通过穷举所有的情况来找到最优解&#xff0c;或者统计合法解的个数。因此&#xff0c;搜索有时候也叫作暴搜。搜索一般分为深度优先搜索…...

pytorch 多机多卡训练方法

在深度学习训练中&#xff0c;使用多机多卡&#xff08;多台机器和多块 GPU&#xff09;可以显著加速模型训练过程。 PyTorch 提供了多种方法来实现多机多卡训练&#xff0c;以下是一些常用的方法和步骤&#xff1a; 1. 使用 torch.distributed 包 PyTorch 的 torch.distribut…...

InfiniBand客户端注册机制详解:ib_register_client函数的作用与实现

在Linux内核的InfiniBand(IB)子系统中,ib_register_client函数扮演着至关重要的角色。它允许上层用户(如特定的IB设备驱动程序或相关应用模块)注册为IB客户端,并定义在IB设备添加或移除时应执行的回调函数。这一机制确保了IB设备的动态管理,以及资源的有效分配和回收。本…...

rocketmq-product-send方法源码分析

先看有哪些send方法 首先说红圈的 有3个红圈。归类成3种发送方式。假设前提条件&#xff0c;发送的topic&#xff0c;有3个broker&#xff0c;每个broker总共4个write队列&#xff0c;总共有12个队列。 普通发送。负载均衡12个队列。指定超时时间指定MessageQueue,发送&#…...

centos下设置服务器开机自启动 redis

在客户服务器中&#xff0c;服务器重启&#xff0c;发现 Redis 没有重启&#xff0c; 可以按照类似的步骤来创建自启动脚本&#xff0c;并将它添加到定时任务中。 解决办法&#xff1a; 1. 创建自启动脚本 进入服务器并创建脚本文件&#xff0c;例如 /usr/local/bin/redis_…...

【Linux】APT 密钥管理:官方推荐的解决方案应对 apt-key 弃用

引言 在 Ubuntu 和 Debian 系统中&#xff0c;apt-key 命令用于管理 GPG 密钥&#xff0c;验证来自软件包存储库的包是否合法并且未被篡改。然而&#xff0c;从 Debian 11 和 Ubuntu 22.04 开始&#xff0c;apt-key 被弃用&#xff0c;并将在未来的版本中完全移除。因此&#…...

69.在 Vue 3 中使用 OpenLayers 拖拽实现放大区域的效果(DragPan)

引言 在现代 Web 开发中&#xff0c;地图功能已经成为许多应用的重要组成部分。OpenLayers 是一个功能强大的开源地图库&#xff0c;支持多种地图源和交互操作。Vue 3 是一个流行的前端框架&#xff0c;以其响应式数据和组件化开发著称。本文将介绍如何在 Vue 3 中集成 OpenLa…...

77,【1】.[CISCN2019 华东南赛区]Web4

有句英文&#xff0c;看看什么意思 好像也可以不看 进入靶场 点击蓝色字体 我勒个豆&#xff0c;百度哇 所以重点应该在url上&#xff0c;属于任意文件读取类型 接下来该判断框架了 常见的web框架如下 一&#xff0c;Python 框架 1.Flask URL 示例 1&#xff1a;http://…...

手撕B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…...

SQL 指南

SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...

一文简单回顾复习Java基础概念

还是和往常一样&#xff0c;我以提问的方式回顾复习&#xff0c;今天回顾下Java小白入门应该知道的一些基础知识 Java语言有哪些特点呢&#xff1f; Java语言的特点有&#xff1a; 面向对象&#xff0c;主要是封装、继承、多态&#xff1b;平台无关性&#xff0c;“一次编写…...

Git上传了秘钥如何彻底修改包括历史记录【从安装到实战详细版】

使用 BFG Repo-Cleaner 清除 Git 仓库中的敏感信息 1. 背景介绍 在使用 Git 进行版本控制时&#xff0c;有时会不小心将敏感信息&#xff08;如 API 密钥、密码等&#xff09;提交到仓库中。即使后续删除&#xff0c;这些信息仍然存在于 Git 的历史记录中。本文将介绍如何使用…...

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...

Linux二进制部署K8s集群的平滑升级教程

一、升级前的准备工作 备份集群配置和数据 备份/etc/kubernetes/目录&#xff0c;其中包含Kubernetes集群的配置文件。 备份/var/lib/etcd/目录&#xff0c;其中存储了etcd数据库的数据。 使用etcdctl工具备份etcd数据&#xff1a; bash复制 ETCDCTL_API3 etcdctl snapshot s…...

2.1.3 第一个工程,点灯!

新建工程 点击菜单栏左上角&#xff0c;新建工程或者选择“文件”-“新建工程”&#xff0c;选择工程类型“标准工程”选择设备类型和编程语言&#xff0c;并指定工程文件名及保存路径&#xff0c;如下图所示&#xff1a; 选择工程类型为“标准工程” 选择主模块机型&#x…...

图像处理算法研究的程序框架

目录 1 程序框架简介 2 C#图像读取、显示、保存模块 3 C动态库图像算法模块 4 C#调用C动态库 5 演示Demo 5.1 开发环境 5.2 功能介绍 5.3 下载地址 参考 1 程序框架简介 一个图像处理算法研究的常用程序逻辑框架&#xff0c;如下图所示 在该框架中&#xff0c;将图像处…...

计算机工程:解锁未来科技之门!

计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展&#xff0c;计算机技术已经深深渗透到我们生活的方方面面&#xff0c;从医疗、金融到教育&#xff0c;无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业&#xff0c;计算机技术的应用尤为突出。比如&a…...

Linux初识——基本指令(2)

本文将继续从上篇末尾讲起&#xff0c;讲解我们剩下的基本指令 一、剩余的基本指令 1、mv mv指令是move&#xff08;移动&#xff09;的缩写&#xff0c;其功能为&#xff1a;1.剪切文件、目录。2.重命名 先演示下重命名&#xff0c;假设我想把当前目录下的di34改成dir5 那…...

单片机-STM32 WIFI模块--ESP8266 (十二)

1.WIFI模块--ESP8266 名字由来&#xff1a; Wi-Fi这个术语被人们普遍误以为是指无线保真&#xff08;Wireless Fidelity&#xff09;&#xff0c;并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词&#xff0c;Wi-Fi还出现在ITAA的一个论文中。…...

[C++技能提升]类注册

最近在做AI信息在各个平台流转的框架设计&#xff0c;想要设计一种可以灵活扩展、不改变原有代码的框架&#xff0c;了解到了类注册。 具体需求是这样的&#xff1a;AI算法在客户本地电脑和云端都有部署&#xff0c;原先AI在这两个平台下的输出格式并不统一&#xff0c;且每个…...

OpenHarmony 5.0.2 Release来了!

版本概述 OpenHarmony 5.0.2 Release版本对标准系统的能力进行持续完善&#xff0c;以快速迭代的方式推出API 14&#xff0c;相比5.0.1 Release版本&#xff0c;重点做出了如下特性新增或增强&#xff1a; 进一步增强ArkUI、图形图像的能力&#xff0c;提供更多组件的高级属性…...