镇海区住房和建设交通局网站,有什么公司建网站,专注合肥网站建设,门户网站框架下载wrk泛洪攻击介绍 WRK泛洪攻击#xff08;WRK Flood Attack#xff09;是一种基于WRK工具进行的DDoS攻击#xff08;分布式拒绝服务攻击#xff09;。WRK是一个高度并行的HTTP负载生成器#xff0c;可以模拟大量用户访问一个网站#xff0c;从而导致该网站服务器瘫痪或失效…wrk泛洪攻击介绍 WRK泛洪攻击WRK Flood Attack是一种基于WRK工具进行的DDoS攻击分布式拒绝服务攻击。WRK是一个高度并行的HTTP负载生成器可以模拟大量用户访问一个网站从而导致该网站服务器瘫痪或失效。 WRK泛洪攻击的原理是通过大量仿真的HTTP请求和响应来占用网站服务器的资源使其无法正常处理真实用户的请求。攻击者会使用一组代理服务器来反复发送请求从而增加攻击的威力使目标服务器癱瘓。 在WRK泛洪攻击中攻击者可以设置一些参数来控制攻击规模和持续时间如并发请求数、请求频率、请求协议等。这种攻击方式往往需要大量的计算资源和带宽因此需要进行计算和网络资源的收集和使用同时攻击难度也相对较高需要一定的技术水平。 WRK泛洪攻击对于网站服务器而言是一种非常严重的威胁可以造成大量的损失和影响。因此网站管理员需要采取一些有效的保护措施来防范此类攻击如加大服务器处理能力、增加带宽容量、使用DDoS防护技术、提高系统的安全性等。
脚本监控指标
该脚本监控的指标包括
网络连接数检测与端口80的连接数使用netstat和ss命令系统负载均衡使用uptime命令获取系统负载均衡数据访问日志情况检测最近一千条访问日志中404状态码的数目使用tail和grep命令。
当网络连接数、系统负载均衡或404日志数等任一指标超过设定的阈值时脚本使用iptables命令封锁当前访问量最高的IP地址从而阻止DDoS攻击。
使用方法如下
将脚本保存为.py文件在终端中进入该文件所在的目录执行命令 python filename.py其中filename.py为脚本文件名等待wrk工具启动监控泛红攻击当达到设定的阈值时脚本会自动封锁IP并退出。
需要注意的是该脚本需要权限才能使用iptables命令因此需要使用root用户或sudo命令执行。
完整代码如下
import os
import subprocess
import time检测网络连接情况
def check_connections():# 通过 netstat 命令统计与端口80的连接数netstat_result subprocess.check_output(netstat -an | grep :80 | wc -l, shellTrue)# 通过 ss 命令统计与端口80的连接数ss_result subprocess.check_output(ss -lnt | grep :80 | wc -l, shellTrue)# 计算总连接数connections int(netstat_result.strip()) int(ss_result.strip())return connectionsdef check_load():检测系统负载情况# 执行 uptime 命令获取系统负载均衡数据result subprocess.check_output(uptime, shellTrue)# 将结果转化为字符串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():检测访问日志情况# 查看日志文件检索恶意IPresult subprocess.check_output(tail -n 1000 /opt/lampp/logs/access_log | grep \ 404 \ | wc -l, shellTrue)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 500MAX_LOAD 2.0MAX_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:# 监测到泛红攻击封锁IPip subprocess.check_output(netstat -an | grep :80 | awk \{print $5}\ | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 1 | awk \{print $2}\, shellTrue)block_ip(ip.strip())breaktime.sleep(5)if __name__ __main__:main()