忘记之前的对话,用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,要求有白名单列表,多个白名单用逗号隔开,排除本地所有网卡ip,每20秒钟检测一次(shell变量配置),限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则要记录时间、攻击者ip、访问端口、协议、携带报文、建立的tcp连接总数等信息保存到/home/ddos目录下(shell变量配置),每个日志文件最大100MB(shell变量配置,自动清理3天以前的日志),超过100MB则要重新生成新文件,以生成时间命名(精确到毫秒),并使用iptables立即封禁该ip(已经封禁过的无需再次封禁),保存到/home/ddos/blackIpList.txt(shell变量配置),以上代码中文件或者目录不存在的需要自动进行创建,灵活发挥,减少人工干预和出错概率
时间: 2023-02-07 15:01:54 浏览: 252
防ddos linux 安全
以下是一个使用 bash shell 编写的通用的实时在后台监测防止 DDOS 攻击的脚本的示例:
```
#!/bin/bash
# 定义变量
ip_list="/home/ddos/whiteIpList.txt" # 白名单列表
log_dir="/home/ddos" # 日志目录
log_file="$log_dir/ddos.log" # 日志文件
max_conn=100 # 每个 IP 每秒钟和服务器建立的最大 TCP 连接数
block_time=3600 # 封禁时间(单位:秒)
log_size=100 # 日志文件大小(单位:MB)
log_keep_days=3 # 保留日志文件的天数
# 创建目录和文件
[ ! -d "$log_dir" ] && mkdir -p "$log_dir"
[ ! -f "$log_file" ] && touch "$log_file"
# 删除旧的日志文件
find "$log_dir" -mtime +$log_keep_days -type f -name "ddos*.log" -delete
# 清空日志文件
echo "" > "$log_file"
# 创建无限循环
while :
do
# 获取本地所有网卡的 IP 地址
local_ips=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*')
# 获取连接数前 100 的 IP
top_ips=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 100)
# 遍历每个 IP
while read -r line; do
# 解析行内容
conn=$(echo "$line" | awk '{print $1}')
ip=$(echo "$line" | awk '{print $2}')
# 跳过白名单中的 IP
grep -q "$ip" "$ip_list" && continue
# 跳过本地所有网卡的 IP
echo "$local_ips" | grep -q "$ip" && continue
#
阅读全文