Linux Shell脚本检测DDoS攻击案例分析


以下是一个用于检查服务器是否可能遭受DDoS攻击的Shell脚本示例,该脚本会分析网络连接状态并给出潜在攻击警告:

#!/bin/bash

# DDoS攻击检查脚本
# 设置日志文件路径
LOG_FILE="/var/log/ddos_check.log"

# 阈值设置(可根据实际情况调整)
IP_CONNECTIONS_LIMIT=100   # 单个IP的最大连接数
SYN_RECV_LIMIT=50         # SYN_RECV状态连接阈值
TOTAL_CONNECTION_LIMIT=500 # 总连接数阈值

# 获取当前时间戳
timestamp() {
    date +"%Y-%m-%d %T"
}

# 检查异常IP连接
check_ip_connections() {
    echo "[$(timestamp)] 正在检查高并发连接IP..."
    
    # 使用ss或netstat获取连接信息
    if command -v ss &> /dev/null; then
        cmd="ss -ntu | awk '{print \$6}' | cut -d: -f1 | sort | uniq -c | sort -nr"
    else
        cmd="netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -nr"
    fi

    eval $cmd | while read count ip; do
        if [[ "$count" -gt $IP_CONNECTIONS_LIMIT && "$ip" != "Address" ]]; then
            echo "[$(timestamp)] 警告! 疑似异常IP: $ip 当前连接数: $count" | tee -a $LOG_FILE
        fi
    done
}

# 检查SYN_RECV状态连接(SYN洪水攻击特征)
check_syn_flood() {
    echo "[$(timestamp)] 正在检查SYN_RECV状态连接..."
    
    if command -v ss &> /dev/null; then
        syn_count=$(ss -n state syn-recv | wc -l)
    else
        syn_count=$(netstat -n -t | grep SYN_RECV | wc -l)
    fi

    if [[ $syn_count -gt $SYN_RECV_LIMIT ]]; then
        echo "[$(timestamp)] 警告! SYN_RECV连接数异常: $syn_count" | tee -a $LOG_FILE
    fi
}

# 检查总连接数
check_total_connections() {
    echo "[$(timestamp)] 正在检查总连接数..."
    
    if command -v ss &> /dev/null; then
        total=$(ss -s | grep "TCP:" | awk '{print $2}')
    else
        total=$(netstat -ant | wc -l)
    fi

    if [[ $total -gt $TOTAL_CONNECTION_LIMIT ]]; then
        echo "[$(timestamp)] 警告! 总连接数异常: $total" | tee -a $LOG_FILE
    fi
}

# 执行所有检查
main() {
    echo "==== 开始DDoS检查 ===="
    check_ip_connections
    check_syn_flood
    check_total_connections
    echo "==== 检查完成 ===="
}

# 以root权限运行
if [[ $EUID -ne 0 ]]; then
    echo "错误: 需要root权限运行此脚本" >&2
    exit 1
fi

main | tee -a $LOG_FILE

使用说明

  1. 保存脚本ddos_check.sh
  2. 赋予执行权限
    chmod +x ddos_check.sh
    
  3. 以root权限运行
    sudo ./ddos_check.sh
    

功能说明

  1. 异常IP检测

    • 检查单个IP的并发连接数
    • 默认阈值:100个连接(通过IP_CONNECTIONS_LIMIT调节)
  2. SYN洪水攻击检测

    • 监控SYN_RECV状态连接数
    • 默认阈值:50个(通过SYN_RECV_LIMIT调节)
  3. 总连接数监控

    • 监控服务器总连接数
    • 默认阈值:500(通过TOTAL_CONNECTION_LIMIT调节)
  4. 自动日志记录

    • 所有警告信息会记录到/var/log/ddos_check.log
    • 包含时间戳记录

建议增强措施

  1. 定时监控

    # 每5分钟执行一次检查
    */5 * * * * root /path/to/ddos_check.sh
    
  2. 自动阻止可疑IP(谨慎使用):

    # 在检查到异常IP时自动封锁(需要iptables)
    iptables -A INPUT -s $ip -j DROP
    
  3. 集成专业工具

    • 使用fail2ban进行自动封锁
    • 部署Cloudflare等专业DDoS防护服务
    • 使用nloadiftop进行实时流量监控

注意事项

  • 阈值设置需要根据服务器实际负载调整
  • 本脚本只能检测基础攻击特征,复杂攻击需要专业方案
  • 生产环境建议使用专业DDoS防护设备/服务
  • 频繁检查可能影响服务器性能,建议合理设置检查间隔

建议结合网络监控工具(如Zabbix、Nagios)实现更全面的监控方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值