DDOS-deflate工具:ddos.sh脚本解读(预防DDOS攻击脚本)

[root@server ddos]# cat ddos.sh
#!/bin/sh
##############################################################################
# DDoS-Deflate version 0.6 Author: Zaf <zaf@vsnl.com>                        #
##############################################################################
# This program is distributed under the "Artistic License" Agreement         #
#                                                                            #
# The LICENSE file is located in the same directory as this program. Please  #
#  read the LICENSE file before you make copies or distribute this program   #
##############################################################################
load_conf()     # 定义一个加载DDOS配置文件的函数,DDOS配置文件存在则加载,否则输出head()并退出。
{CONF="/usr/local/ddos/ddos.conf"if [ -f "$CONF" ] && [ ! "$CONF" ==   "" ]; thensource $CONFelseheadecho "\$CONF not found."exit 1fi
}head()          # 定义固定文本的函数
{echo "DDoS-Deflate version 0.6"echo "Copyright (C) 2005, Zaf <zaf@vsnl.com>"echo
}showhelp()      # 定义显示帮助信息的函数
{headecho 'Usage: ddos.sh [OPTIONS] [N]'echo 'N : number of tcp/udp  connections (default 150)'echo 'OPTIONS:'echo '-h | --help: Show    this help screen'echo '-c | --cron: Create cron job to run this script regularly (default 1 mins)'echo '-k | --kill: Block the offending ip making more than N connections'
}unbanip()    # 等待指定时间后,删除无效的规则链,解除拒绝的IP
{UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`   # mktemp创建临时文件,文件名参数为:文件名.XXXX。使用iptables操作拒绝IP访问服务器的脚本文件。TMP_FILE=`mktemp /tmp/unban.XXXXXXXX`UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX`     # 已拒绝的IP都放到这个文件中echo '#!/bin/sh' > $UNBAN_SCRIPTecho "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT    # 等待600sif [ $APF_BAN -eq 1 ]; then    # APF_BAN值为1while read line; doecho "$APF -u $line" >> $UNBAN_SCRIPTecho $line >> $UNBAN_IP_LISTdone < $BANNED_IP_LIST      else         # APF_BAN值为0while read line; do    # echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT    # 把上一次被拒绝的IP地址重新设置为允许,即删除对应的DROP规则链echo $line >> $UNBAN_IP_LIST                  # 重新设置允许的IP都写入该文件done < $BANNED_IP_LIST              # 输入的文件,历史访问次数统计信息fiecho "grep -v --file=$UNBAN_IP_LIST $IGNORE_IP_LIST > $TMP_FILE" >> $UNBAN_SCRIPT   # IGNORE_IP_LIST文件根据UNBAN_IP_LIST文件中的匹配规则,筛选出匹配不上的IP地址,并写入到临时文件中。echo "mv $TMP_FILE $IGNORE_IP_LIST" >> $UNBAN_SCRIPT   # 将TMP_FILE文件重命名为IGNORE_IP_LIST,即不删除DROP规则链的IP地址。仍然设置为拒绝访问服务器。# 删除以下三个临时文件echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPTecho "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPTecho "rm -f $TMP_FILE" >> $UNBAN_SCRIPT. $UNBAN_SCRIPT &     # 后台执行脚本UNBAN_SCRIPT
}add_to_cron()   # 定义更新定时任务的函数
{rm -f $CRON    # 若ddos.cron定时任务存在,删除定时任务sleep 1service crond restart    # 重启crond服务sleep 1echo "SHELL=/bin/sh" > $CRONif [ $FREQ -le 2 ]; then   # 检查间隔小于等于2分钟,检查时间间隔的取值范围一般为0-59,单位分钟。echo "0-59/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRONelse    # 检查间隔大于2分钟let "START_MINUTE = $RANDOM % ($FREQ - 1)"  # 若FREQ是5,START_MINUTE为0 1 2 3let "START_MINUTE = $START_MINUTE + 1"      # START_MINUTE为1 2 3 4let "END_MINUTE = 60 - $FREQ + $START_MINUTE"     # END_MINUTE = 60 - 5 + [1 2 3 4] = [56 57 58 59]echo "$START_MINUTE-$END_MINUTE/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON    # 0-59之间的第一个检查时间START_MINUTE,最后一个检查时间END_MINUTEfiservice crond restart  # 重启crond服务
}load_conf   # 加载ddos.conf配置文件
while [ $1 ]; docase $1 in'-h' | '--help' | '?' )showhelp     # 显示帮助信息的函数exit;;'--cron' | '-c' )   # 添加定时任务add_to_cronexit;;'--kill' | '-k' )  # 启用拒绝IP的功能KILL=1;;*[0-9]* )NO_OF_CONNECTIONS=$1    # 指定阈值,用于手动执行ddos.sh脚本时使用,默认的阈值为ddos.conf文件中的NO_OF_CONNECTIONS;;* )showhelpcatcat exit;;esacshift
doneTMP_PREFIX='/tmp/ddos'   # 临时文件前缀
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"    # 创建一个临时文件的命令
BANNED_IP_MAIL=`$TMP_FILE`      # 执行创建一个临时文件
BANNED_IP_LIST=`$TMP_FILE`      # 执行创建一个临时文件
echo "Banned the following ip addresses on `date`" > $BANNED_IP_MAIL    # 在当前时间下禁止以下IP地址
echo >>   $BANNED_IP_MAIL    # 空一行
BAD_IP_LIST=`$TMP_FILE`
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST # 统计访问服务器的IP地址机器访问次数,并把结果写入文件BAD_IP_LIST
cat $BAD_IP_LIST    # 显示BAD_IP_LIST文件中的统计信息
if [ $KILL -eq 1 ]; then   # KILL的值等于1IP_BAN_NOW=0while read line; doCURR_LINE_CONN=$(echo $line | cut -d" " -f1)   # 次数CURR_LINE_IP=$(echo $line | cut -d" " -f2)     # IP地址if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then    # 次数小于阈值,跳出当前整个循环。breakfiIGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST`   # 计算统计信息中的IP地址在IGNORE_IP_LIST文件中的IP个数,即白名单IPif [ $IGNORE_BAN -ge 1 ]; then   # 若在文件IGNORE_IP_LIST文件中的IP个数大于等于1continue     # 继续循环fiIP_BAN_NOW=1echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL  # 说明某个IP访问多少次echo $CURR_LINE_IP >> $BANNED_IP_LIST   # 把IP写入到BANNED_IP_LIST文件中echo $CURR_LINE_IP >> $IGNORE_IP_LIST   # 把IP写入到IGNORE_IP_LIST文件中if [ $APF_BAN -eq 1 ]; then$APF -d $CURR_LINE_IP   # 当APF_BAN的值为1时,使用APF的方式拒绝IPelse$IPT -I INPUT -s $CURR_LINE_IP -j DROP   # 当APF_BAN不等于1时,使用iptables的方式添加规则拒绝指定IP访问服务器fidone < $BAD_IP_LIST    # 访问服务器的统计信息作为输入if [ $IP_BAN_NOW -eq 1 ]; then     # IP_BAN_NOW的值为1dt=`date`if [ $EMAIL_TO != "" ]; then    cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO # 把被拒绝的IP地址,发送到邮箱EMAIL_TOfiunbanip    # 取消拒绝IP地址fi
fi
rm -f $TMP_PREFIX.*   # 删除创建的临时文件

ddos.sh 脚本总结:

  1. 脚本结构说明:
    声明了5个函数,分别为load_conf、head、showhelp、unbanip、add_to_cron。各函数作用如下:
    load_conf:加载ddox.conf文件的内容
    head:输出的固定表头
    showhelp:显示帮助信息
    unbanip:等待指定时间后,删除全部无效的规则链,解除拒绝的IP。
    add_to_cron:添加定时任务

  2. 主体说明【除函数声明外的部分】:
    ①创建临时文件BAD_IP_LIST,并把访问服务器的统计信息写入其中。
    ②KILL参数决定是否屏蔽IP,当KILL的值为1时,访问次数超过阈值的才会被屏蔽,并指定了屏蔽方式时APF还是iptables,建议使用iptables。
    ③当IP_BAN_NOW的值为1时,发送拒绝IP的消息给指定邮箱EMAIL_TO,然后执行unbanip函数,即等待BAN_PERIOD时间后,将已拒绝的IP地址对应的iptables规则链删除,允许其访问服务器。
    ④最后删除所有的临时文件。

  3. 整体流程说明:
    首先通过netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr 获取到访问服务器的IP地址和次数的统计信息,然后对访问次数超过阈值的IP地址进行拒绝访问操作,即添加DROP的规则链,最后等待BAN_PERIOD时间后,删除之前添加的DROP规则链。以上流程设置定时任务,默认是每分钟都进行一次。

DDOS-deflate工具:ddos.sh脚本解读(预防DDOS攻击脚本)相关推荐

  1. Linux+DDoS deflate 预防DDoS

    使用DDoS脚本防止DDoS   使用DDoS脚本防止DDoS: DDoS概述: 分布式拒绝服务(DDoS:Distributed Denial of Service),指借助于客户/服务器技术,将多 ...

  2. 修改Linux SSH连接端口和禁用IP,安装DDoS deflate

    测试系统:centos7 修改连接端口 修改配置文件 vi /etc/ssh/sshd_config 去掉port 22的注释,添加新的端口配置 port your_port_num 自定义端口选择建 ...

  3. linux 防ddos攻击软件,linux系统下免费防DDOS CC攻击脚本,有效减轻服务器压力 【转】...

    网站DDOS是最头疼的事.即使是国内高防的服务器,也不能100%彻底解决CC,DDOS攻击,在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptables,但是iptables不能在自动屏蔽, ...

  4. DDoS deflate 解决服务器被DDOS攻击的问题

    23.2.1 如何查是否受到了DDOS攻击 DDOS概述:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻 ...

  5. DDoS deflate - Linux下防御/减轻DDOS攻击

    前言 互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事.在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptables,但是iptables不能在自动屏蔽,只能手动屏蔽. ...

  6. DDoS deflate的安装使用

    DDoS deflate是一款免费的用来防御和减轻DDoS***的脚本.它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限制时,该程序会通过APF或IPTABLES禁 ...

  7. DDoS deflate–简单解决VPS被DDOS/CC攻击

    为什么80%的码农都做不了架构师?>>>    我想现在大家接触VPS久了,也知道互联网上被DDOS,CC是家常便饭,在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptab ...

  8. 防DDOS攻击案例 -- ddos deflate

    1.安装ddos deflate [root@localhost src]# wget http://www.inetbase.com/scripts/ddos/install.sh 下载这个安装脚本 ...

  9. 使用Ddos deflate 解决服务器被ddos攻击

    1.DDOS概述 分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击 ...

最新文章

  1. 《精通Python设计模式》学习结构型之MVC模式
  2. Spring4.X系列之AOP-@AspectJ
  3. 【Python】pandas 1.3版本主要更新内容一览
  4. const对象,NULL和nullptr,C++中创建对象数组
  5. c++的vector容器
  6. pandas 基础用法
  7. 算法 - 斐波那契数列问题(转自微信公众号码农翻身)
  8. ffmpeg rtp传输使用
  9. c语言折半查找法找字符,C语言折半查找法练习题冒泡排序
  10. dao-service-servlet-jsp构建简易web通讯录(三层开发)软件安装
  11. 个人查阅资料-Sql语句
  12. Proxmark3教程1:用PM3解密复制M1全加密门禁IC卡图文详细介绍
  13. 图像处理:根据像素坐标及像素尺寸大小裁剪遥感影像
  14. FTP协议是一种用于什么的协议
  15. 插入式CAN总线隔离适配器LCAN-Opto在高空作业平台上隔离干扰、调理信号的应用案例介绍
  16. MarkdownPad2 自动生成目录
  17. 查看已删除好友聊天记录
  18. [Java高级](二)泛型
  19. 关于如何构建数字资产量化的投资组合的思考
  20. Arduino驱动OLED显示屏

热门文章

  1. 【嵌入式设计开发】基于STM32 HD01双H桥高功率C车模车驱动板 程序设计
  2. GLFW实例介绍(2)
  3. 手记账极速版 (html + php) 告别后端和数据库 附完整代码
  4. 三极管管型、管脚和性能测量方法
  5. 三分钟告诉你游戏配音软件有哪些
  6. 【直播、摄像头】 Http 流媒体服务器 对接摄像机(大华海康)使用 nginx 和 ffmpeg 对rtsp进行转码获取
  7. 使用CCriticalSection类的注意事项
  8. 23个你意想不到的程序员逻辑神操作!
  9. Cannot load Counter Name data because an invalid index
  10. 金融NLP需求落地实践总结——使用T5-Pegasus做一句话摘要