wrk泛洪攻击监控脚本
2023-5-17 09:52:43 Author: 安全info(查看原文) 阅读量:8 收藏

wrk泛洪攻击介绍

        WRK泛洪攻击(WRK Flood Attack)是一种基于WRK工具进行的DDoS攻击(分布式拒绝服务攻击)。WRK是一个高度并行的HTTP负载生成器,可以模拟大量用户访问一个网站,从而导致该网站服务器瘫痪或失效。

        WRK泛洪攻击的原理是,通过大量仿真的HTTP请求和响应来占用网站服务器的资源,使其无法正常处理真实用户的请求。攻击者会使用一组代理服务器来反复发送请求,从而增加攻击的威力,使目标服务器癱瘓。

        在WRK泛洪攻击中,攻击者可以设置一些参数来控制攻击规模和持续时间,如并发请求数、请求频率、请求协议等。这种攻击方式往往需要大量的计算资源和带宽,因此需要进行计算和网络资源的收集和使用,同时攻击难度也相对较高,需要一定的技术水平。

       WRK泛洪攻击对于网站服务器而言是一种非常严重的威胁,可以造成大量的损失和影响。因此,网站管理员需要采取一些有效的保护措施来防范此类攻击,如加大服务器处理能力、增加带宽容量、使用DDoS防护技术、提高系统的安全性等。

脚本监控指标

        该脚本监控的指标包括:

        1. 网络连接数:检测与端口80的连接数(使用netstat和ss命令);

        2. 系统负载均衡:使用uptime命令获取系统负载均衡数据;

        3. 访问日志情况:检测最近一千条访问日志中404状态码的数目(使用tail和grep命令)。

       当网络连接数、系统负载均衡或404日志数等任一指标超过设定的阈值时,脚本使用iptables命令封锁当前访问量最高的IP地址,从而阻止DDoS攻击。

使用方法如下

1、将脚本保存为.py文件;

2、在终端中进入该文件所在的目录,执行命令:python filename.py,其中filename.py为脚本文件名;

3、等待wrk工具启动;监控泛红攻击,当达到设定的阈值时,脚本会自动封锁IP并退出。

需要注意的是,该脚本需要权限才能使用iptables命令,因此需要使用root用户或sudo命令执行。

完整代码如下:

import osimport subprocessimport time
"""检测网络连接情况"""def check_connections(): # 通过 netstat 命令统计与端口80的连接数 netstat_result = subprocess.check_output('netstat -an | grep :80 | wc -l', shell=True) # 通过 ss 命令统计与端口80的连接数 ss_result = subprocess.check_output('ss -lnt | grep :80 | wc -l', shell=True) # 计算总连接数 connections = int(netstat_result.strip()) + int(ss_result.strip()) return connections
def check_load(): """检测系统负载情况""" # 执行 uptime 命令,获取系统负载均衡数据 result = subprocess.check_output('uptime', shell=True) # 将结果转化为字符串 result_str = result.decode('utf-8') # 根据空格分割字符串并获取最后三个元素(即负载均衡) load_avg = result_str.split()[-3:] # 将负载均衡前面的逗号去掉,并将结果转化为浮点数类型 load_avg_str = load_avg[0].strip(',') return float(load_avg_str)
def check_logs(): """检测访问日志情况""" # 查看日志文件,检索恶意IP result = subprocess.check_output('tail -n 1000 /opt/lampp/logs/access_log | grep \' 404 \' | wc -l', shell=True) return int(result.strip())
def block_ip(ip): """使用iptables命令封锁IP""" # 将IP通过防火墙加入黑名单 os.system('iptables -I INPUT -s {} -j DROP'.format(ip)) print('IP {} blocked.'.format(ip))
def main(): # 泛红攻击检测阈值 MAX_CONNECTIONS = 500 MAX_LOAD = 2.0 MAX_LOGS = 100
# 等待wrk工具启动 time.sleep(5)
# 循环检测泛红攻击 while True: connections = check_connections() load = check_load() logs = check_logs()
print('Connections: {}, Load: {}, Logs: {}'.format(connections, load, logs))
if connections > MAX_CONNECTIONS or load > MAX_LOAD or logs > MAX_LOGS: # 监测到泛红攻击,封锁IP ip = subprocess.check_output('netstat -an | grep :80 | awk \'{print $5}\' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 1 | awk \'{print $2}\'', shell=True) block_ip(ip.strip()) break
time.sleep(5)
if __name__ == '__main__': main()

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2MTc0NTYyNg==&mid=2247484362&idx=1&sn=a7f638132ce0bd892e19cbe019a8004c&chksm=ce133b7ff964b269cb1ff8076d80560fb600295a3b1451bd4929d1013c38a3d8f3c67bda361c#rd
如有侵权请联系:admin#unsafe.sh