千家信息网

DoS Deflate Iptables

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,DoS Deflate 是一个轻量级阻止拒绝服务***的bash shell脚本。我们可以根据自己需要修改特定参数,来达到目的!安装/卸载都很简单,分别执行下面三步就可以了:wget http://w
千家信息网最后更新 2026年10月31日DoS Deflate Iptables

DoS Deflate 是一个轻量级阻止拒绝服务***的bash shell脚本。我们可以根据自己需要修改特定参数,来达到目的!
安装/卸载都很简单,分别执行下面三步就可以了:

  1. wget http://www.inetbase.com/scripts/ddos/install.sh
  2. chmod 0700 install.sh
  3. ./install.sh
  4. wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
  5. chmod 0700 uninstall.ddos
  6. ./uninstall.ddos
  1. [root@localhost src]#less install.sh
  2. #!/bin/sh
  3. if [ -d '/usr/local/ddos' ]; then
  4. echo; echo; echo "Please un-install the previous version first"
  5. exit 0
  6. else
  7. mkdir /usr/local/ddos
  8. fi
  9. clear
  10. echo; echo 'Installing DOS-Deflate 0.6'; echo
  11. echo; echo -n 'Downloading source files...'
  12. wget -q -O /usr/local/ddos/ddos.conf http://www.inetbase.com/scripts/ddos/ddos.conf
  13. echo -n '.'
  14. wget -q -O /usr/local/ddos/LICENSE http://www.inetbase.com/scripts/ddos/LICENSE
  15. echo -n '.'
  16. wget -q -O /usr/local/ddos/ignore.ip.list http://www.inetbase.com/scripts/ddos/ignore.ip.list
  17. echo -n '.'
  18. wget -q -O /usr/local/ddos/ddos.sh http://www.inetbase.com/scripts/ddos/ddos.sh
  19. chmod 0755 /usr/local/ddos/ddos.sh
  20. cp -s /usr/local/ddos/ddos.sh /usr/local/sbin/ddos
  21. echo '...done'
  22. echo; echo -n 'Creating cron to run script every minute.....(Default setting)'
  23. /usr/local/ddos/ddos.sh --cron > /dev/null 2>&1
  24. echo '.....done'
  25. echo; echo 'Installation has completed.'
  26. echo 'Config file is at /usr/local/ddos/ddos.conf'
  27. echo 'Please send in your comments and/or suggestions to zaf@vsnl.com'
  28. echo
  29. cat /usr/local/ddos/LICENSE | less

从install.sh可以看出DoS Deflate安装过程主要是下载四个文件(
ddos.conf DoS Deflate配置文件
LICENSE 说明文件
ignore.ip.list 白名单文件
ddos.sh 核心安装脚本
)和执行/usr/local/ddos/ddos.sh --cron 这个脚本。

  1. [root@localhost src]# cat /usr/local/ddos/ddos.sh
  2. #!/bin/sh
  3. ##############################################################################
  4. # DDoS-Deflate version 0.6 Author: Zaf <zaf@vsnl.com> #
  5. ##############################################################################
  6. # This program is distributed under the "Artistic License" Agreement #
  7. # #
  8. # The LICENSE file is located in the same directory as this program. Please #
  9. # read the LICENSE file before you make copies or distribute this program #
  10. ##############################################################################
  11. load_conf()
  12. {
  13. CONF="/usr/local/ddos/ddos.conf"
  14. if [ -f "$CONF" ] && [ ! "$CONF" == "" ]; then
  15. source $CONF
  16. else
  17. head
  18. echo "\$CONF not found."
  19. exit 1
  20. fi
  21. }
  22. ##加载配置文件/usr/local/ddos/ddos.conf
  23. head()
  24. {
  25. echo "DDoS-Deflate version 0.6"
  26. echo "Copyright (C) 2005, Zaf <zaf@vsnl.com>"
  27. echo
  28. }
  29. ##显示版本,作者信息
  30. showhelp()
  31. {
  32. head
  33. echo 'Usage: ddos.sh [OPTIONS] [N]'
  34. echo 'N : number of tcp/udp connections (default 150)'
  35. echo 'OPTIONS:'
  36. echo '-h | --help: Show this help screen'
  37. echo '-c | --cron: Create cron job to run this script regularly (default 1 mins)'
  38. echo '-k | --kill: Block the offending ip making more than N connections'
  39. }
  40. ##显示使用方式
  41. unbanip()
  42. {
  43. UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`
  44. TMP_FILE=`mktemp /tmp/unban.XXXXXXXX`
  45. UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX`
  46. echo '#!/bin/sh' > $UNBAN_SCRIPT
  47. echo "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT
  48. if [ $APF_BAN -eq 1 ]; then
  49. while read line; do
  50. echo "$APF -u $line" >> $UNBAN_SCRIPT
  51. echo $line >> $UNBAN_IP_LIST
  52. done < $BANNED_IP_LIST
  53. else
  54. while read line; do
  55. echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT
  56. echo $line >> $UNBAN_IP_LIST
  57. done < $BANNED_IP_LIST
  58. fi
  59. echo "grep -v --file=$UNBAN_IP_LIST $IGNORE_IP_LIST > $TMP_FILE" >> $UNBAN_SCRIPT
  60. echo "mv $TMP_FILE $IGNORE_IP_LIST" >> $UNBAN_SCRIPT
  61. echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT
  62. echo "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPT
  63. echo "rm -f $TMP_FILE" >> $UNBAN_SCRIPT
  64. . $UNBAN_SCRIPT &
  65. }
  66. ##用于取消已经被禁止访问的ip
  67. add_to_cron()
  68. {
  69. rm -f $CRON
  70. sleep 1
  71. service crond restart
  72. sleep 1
  73. echo "SHELL=/bin/sh" > $CRON
  74. if [ $FREQ -le 2 ]; then
  75. echo "0-59/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
  76. else
  77. let "START_MINUTE = $RANDOM % ($FREQ - 1)"
  78. let "START_MINUTE = $START_MINUTE + 1"
  79. let "END_MINUTE = 60 - $FREQ + $START_MINUTE"
  80. echo "$START_MINUTE-$END_MINUTE/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
  81. fi
  82. service crond restart
  83. }
  84. ##执行主程序,生成crontab,在安装的时候执行一次
  85. load_conf
  86. while [ $1 ]; do
  87. case $1 in
  88. '-h' | '--help' | '?' )
  89. showhelp
  90. exit
  91. ;;
  92. '--cron' | '-c' )
  93. add_to_cron
  94. exit
  95. ;;
  96. '--kill' | '-k' )
  97. KILL=1
  98. ;;
  99. *[0-9]* )
  100. NO_OF_CONNECTIONS=$1
  101. ;;
  102. * )
  103. showhelp
  104. exit
  105. ;;
  106. esac
  107. shift
  108. done
  109. TMP_PREFIX='/tmp/ddos'
  110. TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"
  111. BANNED_IP_MAIL=`$TMP_FILE`
  112. BANNED_IP_LIST=`$TMP_FILE`
  113. echo "Banned the following ip addresses on `date`" > $BANNED_IP_MAIL
  114. echo >> $BANNED_IP_MAIL
  115. BAD_IP_LIST=`$TMP_FILE`
  116. netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
  117. cat $BAD_IP_LIST
  118. if [ $KILL -eq 1 ]; then
  119. IP_BAN_NOW=0
  120. while read line; do
  121. CURR_LINE_CONN=$(echo $line | cut -d" " -f1)
  122. CURR_LINE_IP=$(echo $line | cut -d" " -f2)
  123. if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then
  124. break
  125. fi
  126. IGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST`
  127. if [ $IGNORE_BAN -ge 1 ]; then
  128. continue
  129. fi
  130. IP_BAN_NOW=1
  131. echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL
  132. echo $CURR_LINE_IP >> $BANNED_IP_LIST
  133. echo $CURR_LINE_IP >> $IGNORE_IP_LIST
  134. if [ $APF_BAN -eq 1 ]; then
  135. $APF -d $CURR_LINE_IP
  136. else
  137. $IPT -I INPUT -s $CURR_LINE_IP -j DROP
  138. fi
  139. done < $BAD_IP_LIST
  140. if [ $IP_BAN_NOW -eq 1 ]; then
  141. dt=`date`
  142. if [ $EMAIL_TO != "" ]; then
  143. cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO
  144. fi
  145. unbanip
  146. fi
  147. fi
  148. rm -f $TMP_PREFIX.*

整个脚本判断的根据通过单个ip连接数,然后根据/usr/local/ddos/ddos.conf里面定义的NO_OF_CONNECTIONS的值判断有没有达到drop条件,如果达到再根据里面定义(APF_BAN默认是APF,如需要iptables需要改)使用:iptables或者APF来drop掉这个ip地址,让它在规定的时间内(由BAN_PERIOD定义)无法访问该服务器。可以看出整个脚本如果使用iptables过滤的话是很简单的,完全自己可以写一个脚本来实现上面功能。

  1. #!/bin/bash
  2. NO_OF_CONNECTIONS=100
  3. BLACKLIST=/var/tmp/black
  4. WHITELIST=/var/tmp/white
  5. #cat ${ACCCESS_LOG} | awk '{print $1}' | sort | uniq -c | sort -r -n | head -n 200 >> my_check
  6. if [ ! -f ${BLACKLIST} ]; then
  7. touch ${BLACKLIST}
  8. fi
  9. if [ ! -f ${WHITELIST} ]; then
  10. touch ${WHITELIST}
  11. fi
  12. while read Num Ipaddr ;do
  13. if [ $(grep -c $Ipaddr ${WHITELIST}) -ne 0 ]; then
  14. echo 'Allow IP:' $Ipaddr
  15. continue
  16. fi
  17. if [ $(grep -c $Ipaddr ${BLACKLIST}) -eq 0 ] ; then
  18. if [ $Num -gt $NO_OF_CONNECTIONS ];then
  19. echo 'Deny IP:' $Ipaddr
  20. echo $Ipaddr >> ${BLACKLIST}
  21. iptables -I INPUT -p tcp --dport 80 -s $Ipaddr -j DROP
  22. fi
  23. fi
  24. done <<-'EOF'
  25. `netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr`
  26. EOF

只是上面的脚本少了解封被禁止的ip过程,我个人认为解封没有太大意义.无论是DoS Deflate或者是上面我自己写的脚本,最重要的都是NO_OF_CONNECTIONS值设置。

iptables
iptables 四表五链

  1. iptables(nat,filter,mangle,raw)(INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING)
  2. filter: INPUT, OUTPUT, FORWARD
  3. nat: PREROUTING, POSTROUTING, OUTPUT
  4. mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
  5. 规则管理类:
  6. -A
  7. -I
  8. -D
  9. -R
  10. 链接管理类:
  11. -F, flush, 清空链
  12. -N, new, 新建链
  13. -X, delete, 删除自定义的空链
  14. -E, rename
  15. 默认策略:
  16. -P, policy
  17. 清空计数器:
  18. -Z, zero
  19. 每条规则(包括默认策略)都有两个计数器:
  20. 被此规则匹配到的所有数据包的个数;
  21. 被此规则匹配到的所有数据包的大小之和;
  22. 查看类:
  23. -L, list
  24. -n, numeric
  25. -v, verbose
  26. -vv
  27. -vvv
  28. -x, exactly
  29. --line-numbers
  30. 基本匹配:
  31. -s SOURCE:IP, NETWORK
  32. -d DESTINATION:IP, NETWORK
  33. -p {tcp|udp|icmp}
  34. -i INTERFACE
  35. -o INTERFACE
  36. 扩展匹配:(调用iptables的模块,以便扩展iptables的匹配功能, -m)
  37. 隐含扩展
  38. -p tcp
  39. --sport PORT
  40. --dport PORT
  41. --tcp-flags ACK,SYN,RST,FIN SYN = --syn
  42. --tcp-flags ACK,SYN,RST,FIN SYN,ACK,RST,FIN
  43. --sport 22:23
  44. -p UDP
  45. --sport PORT
  46. --dport PORT
  47. -p icmp
  48. --icmp-type
  49. 8: echo-request
  50. 0: echo-reply
  51. 显式扩展:
  52. -m state --state NEW
  53. NEW
  54. ESTABLISHED
  55. INVALID
  56. RELATED
  57. -m multiport
  58. --source-ports 22,53,80
  59. --destination-ports
  60. --ports
  61. -m iprange
  62. --src-range
  63. --dst-range
  64. -m limit
  65. --limit
  66. --limit-burst
  67. -m string
  68. --algo bm|kmp
  69. --string "STRING"
  70. 处理动作
  71. -j
  72. ACCEPT
  73. DROP
  74. REJECT
  75. SNAT
  76. DNAT
  77. REDIRECT
  78. NASQUERADE

基本操作举例:

  1. iptables -F ##清空所有的链中的规则-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则 ,故使用这条命令一定要小心。
  2. iptables -t nat -F PREROUTING ##把nat表中的PREROUTING链中的规则清空
  3. iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP ##A插入一条规则默认放在最后一条
  4. iptables -t filter -I INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP ##I插入一条规则默认放在第一条
  5. iptables -t filter -I INPUT 3 -s 172.16.0.0/16 -p udp --dport 53 -j DROP ##插入一条规则放在第三条
  6. iptables -L -n --line-numbers ##查看iptables规则,并在每条规则前显示行号。
  7. iptables -D INPUT 5 ## 删除INPUT 链的第五条规则
  8. iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.103:8080##DNAT

自定义链应用:(先定义一个自定义链clean_in,然后把自定义链关联到主链上)

  1. iptables -N clean_in
  2. iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
  3. iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
  4. iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
  5. iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
  6. iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
  7. iptables -A clean_in -d 172.16.100.1 -j RETURN
  8. iptables -A INPUT -d 172.16.100.1 -j clean_in

iptables高级应用:(使用iptables前需要了解tcp连接/断开过程和ip报文头部结构,tcp数据包头结构。)
##服务器(本地ip192.168.1.103)只允许22,53,80,443端口和本机通迅并拒绝本机向外主动发起请求(防C/S******)

  1. iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
  2. iptables -A INPUT -d 192.168.1.103 -p tcp -m multiport --destination-ports 22,53,80,443 -m state --state NEW -j ACCEPT
  3. iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  4. iptables -P INPUT DROP
  5. iptables -P OUTPUT DROP

##连接数限定(设置ssh连接单个ip不能超过2个,利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。常用于防ddos***)

  1. iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
  2. iptables -I INPUT 2 -d 192.168.1.103 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT
  3. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
  4. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 2 --name SSH -j DROP
  5. iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  6. iptables -P INPUT DROP
  7. iptables -P OUTPUT DROP

##匹配数据包数限制(--limit 平均速率,--limit-burst峰值速率)

  1. iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
  2. iptables -A INPUT -d 202.75.219.205 -p tcp --dport 80 -m state --state NEW -m limit --limit 30/second --limit-burst 50 -j ACCEPT
  3. iptables -A INPUT -d 202.75.219.205 -p tcp -m state --state NEW -m multiport --destination-ports 22,53,80,443 -j ACCEPT
  4. iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  5. iptables -P INPUT DROP
  6. iptables -P OUTPUT DROP


规则 脚本 文件 数据 过程 本机 服务 限制 功能 单个 服务器 模块 策略 结构 计数器 速率 应用 管理 配置 重要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 深圳九邦互联网科技有限公司 科技互联网政务服务 智能科技公司是互联网公司吗 互联网 科技公司 深圳科技互联网 互联网医疗科技 互联网科技视频 科技创新互联网企业 融贸通互联网科技 互联网科技大会案例 团飞科技与伯堂互联网服务平台 2021互联网科技公司排名 35岁以上互联网科技行业 兰石爱特工业互联网科技分公司 马化腾互联网科技教学 第三届互联网大会安防黑科技 山东蛋芒互联网科技有限公司 伍佰万互联网科技是干嘛的 互联网科技创业有什么好项目 互联网科技公司起名 互联网科技会 互联网科技战争 世界互联网领先科技成果 太原新华互联网科技学校怎么样 互联网科技研发水平 允成互联网科技有限公司融资 洛阳共同富裕互联网科技有限公司 玉溪新华互联网科技好不好 半导体行业属于互联网高科技类吗
0