自动化防DDoS脚本

这篇具有很好参考价值的文章主要介绍了自动化防DDoS脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

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

脚本结束。整个脚本会以每分钟一次的频率运行,不断监测网络流量,处理攻击,进行日志轮转。这是一个简单的示例,实际环境中可能需要根据需求进一步定制和优化。
自动化防DDoS脚本,自动化,ddos,运维文章来源地址https://www.toymoban.com/news/detail-824108.html

到了这里,关于自动化防DDoS脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 运维圣经:DDos攻击应急响应指南

    目录 DDos攻击简介 DDos攻击应急响应指南 一. 问题排查 二. 临时处置 三. 研判溯源 四. 清楚加固 分布式拒绝服务是种基于DoS的特殊形式的拒绝服务攻击,是一种分布、 协作的大规模攻击方式,主要瞄准比较大的站点,像商业公司、搜索引擎或政府部门门的站点。DoS攻击只要一

    2024年02月08日
    浏览(31)
  • 基于云计算的自动化部署与自动化运维:提高运维效率

    作者:禅与计算机程序设计艺术 随着互联网技术的飞速发展,网站流量日益增长,用户对网站功能及其可用性的需求也越来越高,越来越多的人开始担忧网站的安全和稳定性。因此,如何快速、准确地处理网站故障、迅速恢复网站服务并保障网站高可用,成为企业必须重点关

    2024年02月11日
    浏览(31)
  • 自动化运维CICD

    目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 持续集成(Continuous Integration,CI)和持续发布(Continuous Delivery,CD,又称持续交付)是经常放在一起提及的两

    2024年02月05日
    浏览(36)
  • Ansible自动化运维

    目录 前言 一、概述 常见的开源自动化运维工具比较 二、ansible环境搭建 三、ansible模块 (一)、hostname模块 (二)、file模块 (三)、copy模块 (四)、fetch模块 (五)、user模块 (六)、group模块 (七)、cron模块 (八)、yum_repository模块 (九)、yum模块 (十)、service模块

    2024年02月09日
    浏览(39)
  • DevOps?自动化运维!

    by: 雪月三十 DevOps流程图 DevOps是Dev和Ops的结合 Dev(developer开发) Ops(operation运维) 在企业中dev和ops是有一种天然的矛盾,dev要求的是快速迭代,给公司挖掘出商业的价值,而ops则是强调的稳定,不让你如此快的开发,以稳定为主,不希望动代码(if no problem, don’t touch it),所

    2024年02月12日
    浏览(43)
  • 【自动化运维】playbook剧本

    (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates:模板 (4)Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作 (5)Roles:角色 运行playbook Ansible提供了很多种循环结构,一般都命名为wi

    2024年02月15日
    浏览(28)
  • 运维自动化bingo前端

    项目目录结构介绍 项目创建完成之后,我们会看到bingo_web项目其实是一个文件夹,我们进入到文件夹内部就会发现一些目录和文件,我们简单回顾一下里面的部分核心目录与文件。 2.3、项目执行流程图 要在Vue.js项目中指定域名和端口,你通常需要配置Vue CLI提供的 devServer ,

    2024年02月20日
    浏览(41)
  • 自动化运维ansible(role)

    一、role的介绍 1、Roles称为角色,本质上是为简化playbook配置文件而产生的一种特殊的方法。 2、简单来说,roles就是将原本在一个yaml中的文件进行规则化分散,封装到不同的目录下,从而简化playbook的yaml配置文件大小。从其实现方法上来看,类似于软件开发上的代码封装。

    2024年02月07日
    浏览(28)
  • Ansible自动化运维工具

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 ansible 自动化运维工具(机器管理工具) 可以实现批量管理多台(成百上千)主机,应用级

    2024年02月14日
    浏览(34)
  • Ansible 自动化运维工具

    目录 一: Ansible 简介   Ansible与其他自动化运维工具对比  二: ansible 环境安装部署   三:ansible 命令行模块 1、command 模块 2、 shell 模块 3、 cron 模块 4、 user 模块 5、 group 模块  6、copy 模块 7、 file 模块  8、hostname 模块 9、ping 模块 10、 yum 模块 11、 service/systemd 模块

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包