DDOS-deflate工具:ddos.sh脚本解读(预防DDOS攻击脚本)
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 脚本总结:
脚本结构说明:
声明了5个函数,分别为load_conf、head、showhelp、unbanip、add_to_cron。各函数作用如下:
load_conf:加载ddox.conf文件的内容
head:输出的固定表头
showhelp:显示帮助信息
unbanip:等待指定时间后,删除全部无效的规则链,解除拒绝的IP。
add_to_cron:添加定时任务主体说明【除函数声明外的部分】:
①创建临时文件BAD_IP_LIST,并把访问服务器的统计信息写入其中。
②KILL参数决定是否屏蔽IP,当KILL的值为1时,访问次数超过阈值的才会被屏蔽,并指定了屏蔽方式时APF还是iptables,建议使用iptables。
③当IP_BAN_NOW的值为1时,发送拒绝IP的消息给指定邮箱EMAIL_TO,然后执行unbanip函数,即等待BAN_PERIOD时间后,将已拒绝的IP地址对应的iptables规则链删除,允许其访问服务器。
④最后删除所有的临时文件。整体流程说明:
首先通过netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr 获取到访问服务器的IP地址和次数的统计信息,然后对访问次数超过阈值的IP地址进行拒绝访问操作,即添加DROP的规则链,最后等待BAN_PERIOD时间后,删除之前添加的DROP规则链。以上流程设置定时任务,默认是每分钟都进行一次。
DDOS-deflate工具:ddos.sh脚本解读(预防DDOS攻击脚本)相关推荐
- Linux+DDoS deflate 预防DDoS
使用DDoS脚本防止DDoS 使用DDoS脚本防止DDoS: DDoS概述: 分布式拒绝服务(DDoS:Distributed Denial of Service),指借助于客户/服务器技术,将多 ...
- 修改Linux SSH连接端口和禁用IP,安装DDoS deflate
测试系统:centos7 修改连接端口 修改配置文件 vi /etc/ssh/sshd_config 去掉port 22的注释,添加新的端口配置 port your_port_num 自定义端口选择建 ...
- linux 防ddos攻击软件,linux系统下免费防DDOS CC攻击脚本,有效减轻服务器压力 【转】...
网站DDOS是最头疼的事.即使是国内高防的服务器,也不能100%彻底解决CC,DDOS攻击,在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptables,但是iptables不能在自动屏蔽, ...
- DDoS deflate 解决服务器被DDOS攻击的问题
23.2.1 如何查是否受到了DDOS攻击 DDOS概述:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻 ...
- DDoS deflate - Linux下防御/减轻DDOS攻击
前言 互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事.在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptables,但是iptables不能在自动屏蔽,只能手动屏蔽. ...
- DDoS deflate的安装使用
DDoS deflate是一款免费的用来防御和减轻DDoS***的脚本.它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限制时,该程序会通过APF或IPTABLES禁 ...
- DDoS deflate–简单解决VPS被DDOS/CC攻击
为什么80%的码农都做不了架构师?>>> 我想现在大家接触VPS久了,也知道互联网上被DDOS,CC是家常便饭,在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptab ...
- 防DDOS攻击案例 -- ddos deflate
1.安装ddos deflate [root@localhost src]# wget http://www.inetbase.com/scripts/ddos/install.sh 下载这个安装脚本 ...
- 使用Ddos deflate 解决服务器被ddos攻击
1.DDOS概述 分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击 ...
最新文章
- 《精通Python设计模式》学习结构型之MVC模式
- Spring4.X系列之AOP-@AspectJ
- 【Python】pandas 1.3版本主要更新内容一览
- const对象,NULL和nullptr,C++中创建对象数组
- c++的vector容器
- pandas 基础用法
- 算法 - 斐波那契数列问题(转自微信公众号码农翻身)
- ffmpeg rtp传输使用
- c语言折半查找法找字符,C语言折半查找法练习题冒泡排序
- dao-service-servlet-jsp构建简易web通讯录(三层开发)软件安装
- 个人查阅资料-Sql语句
- Proxmark3教程1:用PM3解密复制M1全加密门禁IC卡图文详细介绍
- 图像处理:根据像素坐标及像素尺寸大小裁剪遥感影像
- FTP协议是一种用于什么的协议
- 插入式CAN总线隔离适配器LCAN-Opto在高空作业平台上隔离干扰、调理信号的应用案例介绍
- MarkdownPad2 自动生成目录
- 查看已删除好友聊天记录
- [Java高级](二)泛型
- 关于如何构建数字资产量化的投资组合的思考
- Arduino驱动OLED显示屏
热门文章
- 【嵌入式设计开发】基于STM32 HD01双H桥高功率C车模车驱动板 程序设计
- GLFW实例介绍(2)
- 手记账极速版 (html + php) 告别后端和数据库 附完整代码
- 三极管管型、管脚和性能测量方法
- 三分钟告诉你游戏配音软件有哪些
- 【直播、摄像头】 Http 流媒体服务器 对接摄像机(大华海康)使用 nginx 和 ffmpeg 对rtsp进行转码获取
- 使用CCriticalSection类的注意事项
- 23个你意想不到的程序员逻辑神操作!
- Cannot load Counter Name data because an invalid index
- 金融NLP需求落地实践总结——使用T5-Pegasus做一句话摘要