用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则...

以下是一个实时监测并防止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/$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值