简介
DDoS (分布式拒绝服务攻击)是一种恶意的网络攻击,旨在通过占用目标系统的资源,使其无法提供正常的服务。在DDoS攻击中,攻击者通常控制大量的被感染的计算机或其他网络设备,同时将它们协调起来向目标系统发起海量的请求,超出其处理能力范围,导致服务不可用。
防DDoS脚本指的是用于识别和阻止DDoS攻击的自动化脚本。这些脚本可以运行在网络设备如防火墙、入侵检测系统(IDS)等中,也可以在服务器上运行。
脚本编写
#!/bin/bash
# 配置参数
LOG_DIR="/var/log/ddos"
ERROR_LOG="$LOG_DIR/error.log"
DETECTION_LOG="$LOG_DIR/detection.log"
PREVENTION_LOG="$LOG_DIR/prevention.log"
THRESHOLD=100 # 定义攻击阈值
BLOCK_TIME=600 # 定义阻止攻击者的时间(秒)
ARCHIVE_DIR="/var/log/ddos/archive" # 存档目录
# 创建日志目录
mkdir -p "$LOG_DIR"
mkdir -p "$ARCHIVE_DIR"
# 检查是否以root用户运行
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root." >&2
exit 1
fi
# 检查ufw是否可用
if ! command -v ufw &> /dev/null; then
echo "ufw command not found. Please install ufw." >&2
exit 1
fi
# 主循环
while true; do
# 获取当前网络流量
CURRENT_TRAFFIC=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail -n 1 | awk '{print $1}')
# 判断是否超过阈值
if [ "$CURRENT_TRAFFIC" -gt "$THRESHOLD" ]; then
# 记录攻击信息
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
ATTACKER_IP=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail -n 1 | awk '{print $2}')
echo "$TIMESTAMP - Detected DDoS attack from $ATTACKER_IP with $CURRENT_TRAFFIC connections" >> "$DETECTION_LOG"
# 阻止攻击者的IP
ufw deny from "$ATTACKER_IP"
# 记录阻止信息
echo "$TIMESTAMP - Blocked IP: $ATTACKER_IP" >> "$PREVENTION_LOG"
# 等待一段时间后解封IP
sleep "$BLOCK_TIME"
ufw delete deny from "$ATTACKER_IP"
echo "$TIMESTAMP - Unblocked IP: $ATTACKER_IP" >> "$PREVENTION_LOG"
fi
# 每天轮转一次日志
if [ "$(date '+%H%M')" == "0000" ]; then
# 将当前日志归档
ARCHIVE_FILE="$ARCHIVE_DIR/ddos_$(date +'%Y%m%d').log.gz"
cat "$DETECTION_LOG" "$PREVENTION_LOG" >> "$ARCHIVE_FILE"
# 清空当前日志
> "$DETECTION_LOG"
> "$PREVENTION_LOG"
# 压缩存档文件
gzip "$ARCHIVE_FILE"
fi
# 每分钟轮询一次
sleep 60
done
脚本释义
# 配置参数
LOG_DIR="/var/log/ddos"
ERROR_LOG="$LOG_DIR/error.log"
DETECTION_LOG="$LOG_DIR/detection.log"
PREVENTION_LOG="$LOG_DIR/prevention.log"
THRESHOLD=100 # 定义攻击阈值
BLOCK_TIME=600 # 定义阻止攻击者的时间(秒)
ARCHIVE_DIR="/var/log/ddos/archive" # 存档目录
这一段定义了脚本中使用的一些配置参数,例如日志目录、日志文件路径、攻击阈值、阻止攻击者的时间、以及存档目录。
# 创建日志目录
mkdir -p "$LOG_DIR"
mkdir -p "$ARCHIVE_DIR"
这里使用 mkdir -p 命令来创建日志目录和存档目录。 -p 参数会确保如果目录不存在的话,也会递归地创建它。
# 检查是否以root用户运行
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root." >&2
exit 1
fi
这个部分检查脚本是否以 root 用户的身份运行。如果不是,脚本会输出错误信息并退出。
# 检查ufw是否可用
if ! command -v ufw &> /dev/null; then
echo "ufw command not found. Please install ufw." >&2
exit 1
fi
这个部分检查系统是否安装了 ufw 命令。如果没有安装,脚本会输出错误信息并退出。
# 主循环
while true; do
脚本进入一个无限循环,用于不断地监测网络流量。
# 获取当前网络流量
CURRENT_TRAFFIC=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail -n 1 | awk '{print $1}')
这一行使用 netstat 命令获取当前网络连接的信息,然后通过一系列的 awk、cut、sort 等命令进行处理,最终得到当前网络流量的连接数。
# 判断是否超过阈值
if [ "$CURRENT_TRAFFIC" -gt "$THRESHOLD" ]; then
这一行判断当前网络流量是否超过了预设的阈值。
# 记录攻击信息
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
ATTACKER_IP=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail -n 1 | awk '{print $2}')
echo "$TIMESTAMP - Detected DDoS attack from $ATTACKER_IP with $CURRENT_TRAFFIC connections" >> "$DETECTION_LOG"
如果检测到攻击,脚本会获取当前时间戳和攻击者的IP地址,然后将攻击信息记录到检测日志中。
# 阻止攻击者的IP
ufw deny from "$ATTACKER_IP"
使用 ufw 命令阻止攻击者的IP。
# 记录阻止信息
echo "$TIMESTAMP - Blocked IP: $ATTACKER_IP" >> "$PREVENTION_LOG"
将阻止信息记录到防攻击日志中。
# 等待一段时间后解封IP
sleep "$BLOCK_TIME"
ufw delete deny from "$ATTACKER_IP"
echo "$TIMESTAMP - Unblocked IP: $ATTACKER_IP" >> "$PREVENTION_LOG"
脚本会等待一段时间后,解封被阻止的IP,并将解封信息记录到防攻击日志中。
# 每天轮转一次日志
if [ "$(date '+%H%M')" == "0000" ]; then
这一段判断是否到了每天的午夜时分(00:00),如果是,则进行日志轮转。
# 将当前日志归档
ARCHIVE_FILE="$ARCHIVE_DIR/ddos_$(date +'%Y%m%d').log.gz"
cat "$DETECTION_LOG" "$PREVENTION_LOG" >> "$ARCHIVE_FILE"
将当前的检测日志和防攻击日志合并,并将合并后的日志归档到指定的存档文件中。
# 清空当前日志
> "$DETECTION_LOG"
> "$PREVENTION_LOG"
清空当前的检测日志和防攻击日志。
# 压缩存档文件
gzip "$ARCHIVE_FILE"
fi
对归档文件进行压缩。
# 每分钟轮询一次
sleep 60
done
脚本结束。整个脚本会以每分钟一次的频率运行,不断监测网络流量,处理攻击,进行日志轮转。这是一个简单的示例,实际环境中可能需要根据需求进一步定制和优化。
原文地址:https://blog.csdn.net/weixin_57025326/article/details/135833182
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_66761.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!