记录一次cc攻击之旅,使用ddos deflate 修改之旅
2018-03-31 15:11
330 查看
故事的开篇,是在三月三十日,应该是友商攻击公司网站。
从晚上四点开始攻击,攻击网站上,还有 里面还有阿里云的ip。气愤。想投诉。
开始讲如何解决的把。首先用 netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
尼玛卖批。哪个龟儿子一直请求这个页面。并发2800.
首先,把他ip从防火墙禁止了。
iptables -I INPUT -s 1.2.3.4 -j DROP
五条命名下去。想如何防范下一次,这种问题。
1、首先找到了ddos deflate 开源来轻微减少一点
切换超级管理员命令
安装路劲都在/usr/local/ddos/里面。 安装执行后,会自动在/etc/cron.d/里面加入一个ddos.cron 文件
这个我们就不用去管了。
2、 因为ddos.sh 会自动在把连接地址,加入白名单的行为。我觉得,如果一不小心,删除了iptables里面的DROP INPUT.会让攻击者IP 进来。我们对ddos.sh 源码做一个更改。
3、修改配置文件ddos.conf
ddos.sh源码
好了,下次给你们写。一千条nginx日志,同一个ip 禁的脚本,
感谢观看。
从晚上四点开始攻击,攻击网站上,还有 里面还有阿里云的ip。气愤。想投诉。
开始讲如何解决的把。首先用 netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
尼玛卖批。哪个龟儿子一直请求这个页面。并发2800.
首先,把他ip从防火墙禁止了。
iptables -I INPUT -s 1.2.3.4 -j DROP
五条命名下去。想如何防范下一次,这种问题。
1、首先找到了ddos deflate 开源来轻微减少一点
切换超级管理员命令
wget http://www.inetbase.com/scripts/ddos/install.sh //下载DDoS deflate chmod 0700 install.sh //添加权限 ./install.sh //执行
安装路劲都在/usr/local/ddos/里面。 安装执行后,会自动在/etc/cron.d/里面加入一个ddos.cron 文件
这个我们就不用去管了。
2、 因为ddos.sh 会自动在把连接地址,加入白名单的行为。我觉得,如果一不小心,删除了iptables里面的DROP INPUT.会让攻击者IP 进来。我们对ddos.sh 源码做一个更改。
3、修改配置文件ddos.conf
##### Paths of the script and other files PROGDIR="/usr/local/ddos" PROG="/usr/local/ddos/ddos.sh" IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list" //IP地址白名单 CRON="/etc/cron.d/ddos.cron" //定时执行程序 APF="/etc/apf/apf" IPT="/sbin/iptables" ##### frequency in minutes for running the script ##### Caution: Every time this setting is changed, run the script with --cron ##### option so that the new frequency takes effect FREQ=1 //检查时间间隔,默认1分钟 (当修改这个值,需要手动/usr/local/ddos/ddos.sh -c 设置一下ddos.cron定时文件) ##### How many connections define a bad IP? Indicate that below. NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可 ##### APF_BAN=1 (Make sure your APF version is atleast 0.96) ##### APF_BAN=0 (Uses iptables for banning ips instead of APF) APF_BAN=0 这里我设置的是0 通过防火墙来屏蔽 ##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script) ##### KILL=1 (Recommended setting) KILL=1 //是否屏蔽IP,默认即可 ##### An email is sent to the following address when an IP is banned. ##### Blank would suppress sending of mails EMAIL_TO="root" //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可(使用这个必须要安装发送邮件,以后会讲) ##### Number of seconds the banned ip should remain in blacklist. BAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整 用户可根据给默认配置文件加上的注释提示内容,修改配置文件。
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() { CONF="/usr/local/ddos/ddos.conf" if [ -f "$CONF" ] && [ ! "$CONF" == "" ]; then source $CONF else head echo "\$CONF not found." exit 1 fi } head() { echo "DDoS-Deflate version 0.6" echo "Copyright (C) 2005, Zaf <zaf@vsnl.com>" echo } showhelp() { head echo 'Usage: ddos.sh [OPTIONS] ' 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() { UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX` TMP_FILE=`mktemp /tmp/unban.XXXXXXXX` UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX` echo '#!/bin/sh' > $UNBAN_SCRIPT echo "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT if [ $APF_BAN -eq 1 ]; then while read line; do echo "$APF -u $line" >> $UNBAN_SCRIPT echo $line >> $UNBAN_IP_LIST done < $BANNED_IP_LIST else while read line; do echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT echo $line >> $UNBAN_IP_LIST done < $BANNED_IP_LIST fi echo "grep -v --file=$UNBAN_IP_LIST $IGNORE_IP_LIST > $TMP_FILE" >> $UNBAN_SCRIPT echo "mv $TMP_FILE $IGNORE_IP_LIST" >> $UNBAN_SCRIPT echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT echo "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPT echo "rm -f $TMP_FILE" >> $UNBAN_SCRIPT . $UNBAN_SCRIPT & } add_to_cron() { rm -f $CRON sleep 1 service crond restart sleep 1 echo "SHELL=/bin/sh" > $CRON if [ $FREQ -le 2 ]; then echo "0-59/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON else let "START_MINUTE = $RANDOM % ($FREQ - 1)" let "START_MINUTE = $START_MINUTE + 1" let "END_MINUTE = 60 - $FREQ + $START_MINUTE" echo "$START_MINUTE-$END_MINUTE/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON fi service crond restart } load_conf while [ $1 ]; do case $1 in '-h' | '--help' | '?' ) showhelp exit ;; '--cron' | '-c' ) add_to_cron exit ;; '--kill' | '-k' ) KILL=1 ;; *[0-9]* ) NO_OF_CONNECTIONS=$1 ;; * ) showhelp exit ;; esac shift done TMP_PREFIX='/tmp/ddos' TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX" BANNED_IP_MAIL=`$TMP_FILE` BANNED_IP_LIST=`$TMP_FILE` IPTABLES_LIST=`$TMP_FILE` #新建防火墙列表文件 echo "Banned the following ip addresses on `date`" > $BANNED_IP_MAIL 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 cat $BAD_IP_LIST echo *************************** $IPT -L -n > $IPTABLES_LIST cat $IPTABLES_LIST if [ $KILL -eq 1 ]; then IP_BAN_NOW=0 while read line; do CURR_LINE_CONN=$(echo $line | cut -d" " -f1) CURR_LINE_IP=$(echo $line | cut -d" " -f2) if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then break fi IGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST` if [ $IGNORE_BAN -ge 1 ]; then continue fi #查看是否在防火墙里面是否存在此ip IPTABLES_EXSISTS=`grep -c $CURR_LINE_IP $IPTABLES_LIST` #如果存在这个IP ,则不做后续处理 #echo $IPTABLES_EXSISTS if [ $IPTABLES_EXSISTS -ge 1 ]; then continue fi IP_BAN_NOW=1 echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL echo $CURR_LINE_IP >> $BANNED_IP_LIST #因为怕人工手动修改忽略IP,出错。下一次继续攻击 所以去掉这一行 # echo $CURR_LINE_IP >> $IGNORE_IP_LIST if [ $APF_BAN -eq 1 ]; then $APF -d $CURR_LINE_IP else $IPT -I INPUT -s $CURR_LINE_IP -j DROP fi done < $BAD_IP_LIST if [ $IP_BAN_NOW -eq 1 ]; then dt=`date` #不用发邮件 #if [ $EMAIL_TO != "" ]; then # cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO #fi unbanip fi fi rm -f $TMP_PREFIX.*
好了,下次给你们写。一千条nginx日志,同一个ip 禁的脚本,
感谢观看。
相关文章推荐
- 使用Hibernate修改数据库表中一条记录的某些字段
- 记录一次使用Glide的BUG
- 记录一次使用terminal进行git管理与提交到Github的过程
- 使用JDBC一次插入多个表、多条记录
- Ext.grid.EditorGridPanel的使用、修改记录的获取及提交
- (转)Elasticsearch 的坑爹事——记录一次mapping field修改过程
- mysql 修改密码忘记使用password函数导致后面无法连接,解决方法记录
- levenblog一次被CC攻击的分析以及应对攻击记录
- maven 使用记录之修改 maven默认jdk版本
- Java中Preference 类的使用,保存上一次记录
- 随手记录-修改某条记录时,不使用数据库控件而用datareader
- 使用git命令修改指定的commit提交记录并提交到远程服务器的方法
- 记录一次bug解决过程:mybatis中$和#的使用
- 记录一次Bug修改__数据库连接不关闭引发的bug
- Idea使用记录--每次修改JS文件都需要重启Idea才能生效解决方法
- Elasticsearch 的坑爹事——记录一次mapping field修改过程
- Jquery 记一次使用fullcalendar的使用记录
- Elasticsearch 的坑爹事——记录一次mapping field修改过程
- 防止ddos攻击软件DDoS-Deflate 的安装和使用
- 记录上一次访问时间 Cookie的使用