Shell脚本防攻击一例

不知道得罪了哪路神仙,收到nagios报警,发现有个网站有CC攻击。看样子,量还不小,把服务器的负载都弄到40+了,虽然网站还能打开,但打开也是非常的缓慢。如果不是配置高点,估计服务器早就挂掉了。看来又是不一个不眠之夜了。

  迅速查看一下nginx的访问日志

  #tail -f access.log

  貌似全是像这样的状态。

  我先紧急手动封了几个访问量比较大的Ip。

  1. #iptables -A INPUT -s 83.187.133.58 -j DROP 
  2. #iptables -A INPUT -s 80.171.24.172 -j DROP 
  3. ......

  紧急封了几个ip后,负载降了一些了,网站访问速度有所提升了,但是不一会,又来了一批新的Ip, 受不了了,看来要出绝招了。写了shell脚本,让他逮着了,就封。发现他攻击的状态都相同,每一个攻击ip后面都有 HTTP/1.1" 499 0 "-" "Opera/9.02 (Windows NT 5.1; U; ru) 的字段,那我们就来搜这个字段。

  1. #vim fengip.sh 
  2. #! /bin/bash 
  3. for i in `seq 1 32400` 
  4. do 
  5. sleep 1 
  6. x=`tail -500 access.log |grep 'HTTP/1.1" 499 0 "-" "Opera/9.02'|awk '{print $1}'|sort -n|uniq` 
  7. if [ -z "$x" ];then 
  8. echo "kong" >>/dev/null 
  9. else 
  10. for ip in `echo $x` 
  11. do 
  12. real=`grep -l ^$ip$ all` 
  13. if [ $? -eq 1 ];then 
  14. echo iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP 
  15. iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP 
  16. echo $ip >>all 
  17. fi 
  18. done 
  19. fi 
  20. done

  脚本写好了。如图

我们来运行一下,运行几分钟后,如下图所示

  经过半个小时的观察,服务器负载也降到0.几了,脚本也不断在封一些CC攻击的ip。

  一直让他运行着,晚上应该能睡个好觉了。

  下来我们来对脚本进行解释一下。

  1. #vim fengip.sh 
  2.  
  3. #! /bin/bash 
  4. Touch all    #建立all文件,后面有用到 
  5. for i in `seq 1 32400` #循环32400次,预计到早上9点的时间 
  6. do 
  7. sleep 1 
  8.  
  9. x=`tail -500 access.log |grep 'HTTP/1.1" 499 0 "-" "Opera /9.02'|awk '{print $1}'|sort -n|uniq` #查看最后500行的访问日志,取出包含 'HTTP /1.1" 499 0 "-" "Opera/9.02' 的行的ip并排序,去重复 
  10. if [ -z "$x" ];then 
  11. echo "kong" >>/dev/null #如果$x是空值的话,就不执行操作,说明500行内,没有带 'HTTP/1.1" 499 0 "-" "Opera/9.02' 的行 
  12. else 
  13. for ip in `echo $x` #如果有的话,我们就遍历这些ip 
  14. do 
  15. real=`grep -l ^$ip$ all` #查看all文件里有没有这个ip,因为每封一次,后面都会把这个ip写入all文件,如果all文件里面有这个ip的话,说明防火墙已经封过了。 
  16. if [ $? -eq 1 ];then #如果上面执行不成功的话,也就是在all文件里没找到,就用下面的防火墙语句把ip封掉,并把ip写入all文件 
  17. echo iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP 
  18. iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP 
  19. echo $ip >>all 
  20. fi 
  21. done 
  22. fi 
  23. done

  脚本很简单,大牛略过啊。。。

  有什么不明白话,欢迎一起探讨学习。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-17 03:54:23

Shell脚本防攻击一例的相关文章

用shell脚本防ssh和vsftpd暴力破解的详解讲解_linux shell

脚本需求如下:此SHELL脚本放在crontab计划任务里,每隔6小时(此时间根据实际情况来定义)就去读取/var/log/secure脚本,取出里面恶意猜测IP,如果单位时间内(一星期)的连接数是高于一个阀值,例如100(此阀值也可以根据实际情况来定义),则将其加进/etc/hosts.deny黑名单里,如果低于此阀值,则无视此IP. /var/log/secure里认证失败信息如下: 复制代码 代码如下: Nov 28 10:18:08 centos2 sshd[7556]: Connect

Linux下用Shell脚本防CC攻击自动拉黑IP增强版

一.Shell代码 #!/bin/bash #Author:ZhangGe #Desc:Auto Deny Black_IP Script. #Date:2014-11-05 #取得参数$1为并发阈值,若留空则默认允许单IP最大50并发(实际测试发现,2M带宽,十来个并发服务器就已经无法访问了!) if [[ -z $1 ]];then         num=50 else         num=$1 fi   #巧妙的进入到脚本工作目录 cd $(cd $(dirname $BASH_SO

Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)_Linux

前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原因是因为360网站卫士的缓存黑名单突然无法过滤后台,导致WordPress无法登录!虽然,可以通过修改本地hosts文件来解决这个问题,但是还是想暂时取消CDN加速和防护来测试下服务器的性能优化及安全防护. 前天写的Shell脚本是加入到crontab计划任务执行的,每5分钟执行一次,今天实际测试了下,可还是可以用的,但是感觉5分钟时间有点过长,无法做到严密防护.于是稍微改进了下代码,现在简单的分享下! 一.Shell代码 #

shell脚本结合iptables防端口扫描的实现_linux shell

网上有现在的防端口工具如psad.portsentry但觉得配置有点麻烦且服务器不想再装一个额外的软件.所以自己就写了个shell脚本实现这个功能.基本思路是使用iptables的recent模块记录下在60秒钟内扫描超过10个端口的IP并结合inotify-tools工具实时监控iptables的日志一旦iptables日志文件有写入新的ip记录则使用iptables封锁源ip起到了防止端口扫描的功能. 1.iptables规则设置新建脚本iptables.sh执行此脚本. 复制代码 代码如下

如何短时间内学好一门语言 shell脚本语言为例_linux shell

这里我分享的是学习计算机shell脚本语言的方法,可能你不是在软件行业,但我建议也看看,因为我并没有讲什么技术细节,主要分享的是提炼出的通用性方法,这是对学习任何东西都是有用的. 当然,如果你好奇心足够强的话,建议也可以按照下面的方法来尝试一下,因为科学家已经预测:以后的世界就是一个软件定义的世界,机器人和人工智能会非常普及,而支持它们运行的除了我们看得见的硬件,最关键的就是里面的软件. 所以,学会编程以后就不仅仅只是软件从业人员需要掌握的技能,任何人都可以掌握它,既可以用它来不断提高工作效率,

Linux shell脚本基础学习详细介绍(完整版)

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可

Linux shell脚本基础学习详细介绍(完整版)第1/2页_linux shell

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

shell脚本学习指南[三](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

今天木有冷笑话,只有一个噩耗.噩耗是:今天木有冷笑话!!!不要总想着冷笑话嘛,有点追求,听毛主席的话:好好学习,天天向上! 第七章输入输出.文件与命令执行 学C的应该了解标准输入输出和错误输出吧?感觉总打很多字进度太慢,所以一直在省略类似C的东西,也方便以后看这篇文章的人能够快速学完shell脚本(或者是快速看完这本书). 读取行read命令是重要方式之一,它可以自标准输入读取行后,通过shell字段切割的功能(使用$IFS)进行切分,第一部分给第一个变量,第二部分给第二个,类推.如果切割单词多

提前认识软件开发(22) shell脚本中的文件操作

编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令. 本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. 一.概述 在某些软件项目的需求文档中,要求程序一次性读或写的数据规模较大,可达1000万行级,这就涉及到对程序执行方法和效率等的考虑. 本文比较了不同shell命令在对文件进行读或写操作过程中执行效率