用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则要记录时间、攻击者ip、访问端口、协议、携带报文、建立的tcp连接总数等信息保存到/home/ddos目录下(shell变量配置),每个日志文件最大100MB(shell变量配置),超过100MB则要重新生成新文件,以生成时间命名(精确到毫秒)
时间: 2023-02-07 22:01:19 浏览: 190
以下是一个实时监测并防止DDOS攻击的脚本示例:
```
#!/bin/bash
# 设置变量
log_dir="/home/ddos" # 日志文件目录
log_file="ddos.log" # 日志文件名
max_conn=1000 # 每个IP每秒最大连接数
max_log_size=100 # 日志文件最大大小(单位:MB)
# 循环监测
while true
do
# 获取当前秒数和毫秒数
secs=$(date +%s)
millis=$(date +%N)
# 统计每个IP的连接数
conns=$(netstat -anp | grep 'ESTABLISHED' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c)
# 遍历每个IP
while read -r line
do
# 获取IP地址和连接数
ip=$(echo $line | awk '{print $2}')
conn=$(echo $line | awk '{print $1}')
# 如果连接数超过限制
if [ $conn -gt $max_conn ]
then
# 获取攻击者信息
attacker=$(geoiplookup $ip)
port=$(netstat -anp | grep $ip | grep 'ESTABLISHED' | awk '{print $4}' | cut -d: -f2 | sort | uniq)
protocol=$(netstat -anp | grep $ip | grep 'ESTABLISHED' | awk '{print $6}' | sort | uniq)
packet=$(tcpdump -nn -c 1 "src $ip" | grep -oE 'length [0-9]+' | awk '{print $2}')
# 记录日志
echo "$secs.$millis $attacker $ip $port $protocol $packet $conn" >> $log_dir/$log_file
# 阻止攻击
iptables -I INPUT -s $ip -j DROP
fi
done <<< "$conns"
# 检查日志文件大小
log_size=$(du -m $log_dir/$log_file | awk '{print $1}')
if [ $log_size -ge $max_log_size ]
then
mv $log_dir/$
阅读全文