简单的shell脚本结合awk实现防止对web服务的dos攻击

一 实验环境

        鄙人使用的是centos 6.8操作系统   需要安装iptables(常见的linux系统貌似都会自动安装iptables)这条可以忽略   awk也需要安装没有的话就用yum装下吧

        当然最重要的是web服务 我这里使用的是apache  对日志进行分析  当然你也可以分析其他的日志嘛  只是拿web服务来当例子而已

  二 脚本介绍

        使用的机制主要是对日志进行切片   对日志段进行分析  并写进防火墙规则中

        为什么使用awk  awk对文本处理速度比较快 而且语法相对简单

        #!/bin/bash         (1)
        while true           (2)
        do
        echo “`awk -v dateTime=”$datetimes”  ‘{if($1==dateTime){i=1}if(i==1){dateArry[$1]++}} \  
        END{for(j in dateArry){printf “%s %s\n”,j,dateArry[j]}}’ /var/log/httpd/access_log`” \
        |  awk ‘{if($2>=20){system(“iptables -A INPUT -j REJECT -p tcp –dport 80  -s “$1)}}’
        datetimes=`date +%y-%m-%d-%H-%M-%s`      (3)
        echo “$datetimes” >> /var/log/httpd/access_log  (4) 
        sleep 30              (5)
        done
         (1)声明使用bash

         (2)使用while循环

         (3)datetimes=`date +%y-%m-%d-%H-%M-%s`   生成时间1.便于查看是什么时候产生的攻击2.相当于随机数避免产生重复

         (4)将产生伪随机数写入到web服务的日志中  

         (5)这里可以自定义时间当然你也可以写到计划里边当然这一行也可以注释掉  (当然while循环也得注释掉如果你使用计划任务)当然我这里的30有点小你可以自己定制一下我主要是进行快速的测试

        下面对awk部分进行分段分析

        echo “`awk -v dateTime=”$datetimes

        “‘{if($1==dateTime){i=1}if(i==1){dateArry[$1]++}} \   awk对日志文件进行分析 “↓” 对就是对小箭头指的这个文件如果第一个字段等于dateTime则开始计数 并赋予i一个值1  如果i=1  则对数组下标为dateArry[$1]的值进行+1

        END{for(j in dateArry){printf “%s %s\n”,j,dateArry[j]}}’            /var/log/httpd/access_log`” \ 

        END看到没有就在上边   等awk处理结束后  对处理的字段进行输出操作  遍历dateArry数组  输出IP地址(j 的值)和IP出现的次数( dateArry[j] 的值)
        |  awk ‘{if($2>=20){system(“iptables -A INPUT -j REJECT -p tcp –dport 80  -s “$1)}}’

        看到最上边的echo没有  使用echo输出awk的值传递给另一个awk进行iptables的写规则操作

        当然我这里是测试20这个值也是太小了  你可以根据实际环境进行修改   如果 IP出现的次数( dateArry[j] 的值)这个值大于20就讲这个所对应的ip写入到防火墙的规则里  使用system()函数”   iptables -A INPUT -j REJECT -p tcp –dport 80  -s “$1 最后的 $1 输出IP地址(j 的值)就是将这个ip添加到拒绝的规则中

三 测试

        运行脚本

        简单的shell脚本结合awk实现防止对web服务的dos攻击        

        疯狂刷新页面

        简单的shell脚本结合awk实现防止对web服务的dos攻击

        查看日志

        简单的shell脚本结合awk实现防止对web服务的dos攻击

        我刚开始故意等了一个疗程的

        后边是几百条的日志信息

        然后后查看防火墙规则

        简单的shell脚本结合awk实现防止对web服务的dos攻击

        当我打开浏览器的时候他就这样了

        简单的shell脚本结合awk实现防止对web服务的dos攻击

原创文章,作者:wode,如若转载,请注明出处:http://www.178linux.com/74076

(0)
wodewode
上一篇 2017-04-24 20:34
下一篇 2017-04-24 21:23

相关推荐

  • python知识点

    #ipython的使用## 帮助功能?:Ipython的概述和简介help(name):查询指定名称的帮助obj?:列出obj对象的详细信息obj??:列出更加详细信息 ## 特殊变量_ :表示前一次的输出__:倒数第二次输出___:倒数第三次输出_dh:目录历史_oh:输出历史 ## shell命令!command 执行shell命令!ls -l!touc…

    Linux干货 2017-10-03
  • 测试so接口函数的脚本 [python]

    下面是一个测试solib库中调用函数的测试脚本,但该脚本还存在这一些问题,我目前无法理解和解决; 问题: 1.我定义了logging采用日志滚动的方式,写日志,并且每个日志的大小是20M,但测试结果发现日志连1M都没到就开始轮转了,并且在轮转过程中,还出现logging写日志,却发现,日志轮转了,结果竟然报了,轮转日志不存在。 Traceback (most…

    Linux干货 2016-01-05
  • 关于大型网站技术演进的思考(九)–网站静态化处理–总述(1)

    原文出处: 夏天的森林    在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据库的网站是很难做到通过增加web服务器数量的方式来有效的增加网站并发访问能力的。但是现实情况是像淘宝、京东这样的大型动态网站在承担高并发的情况下…

    Linux干货 2015-03-11
  • httpd服务归纳:httpd基本配置(配置文件格式以及常用选项)

    一、 httpd文件的基本格式 主配置文件位置, /etc/httpd/conf/httpd.conf    1. 配置文件参数格式  配置参数    值       特点:    &nbs…

    Linux干货 2015-05-13
  • mkdir练习

    课外资料 mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。 注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它…

    Linux干货 2016-08-08