简单的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

相关推荐

  • Shell脚本编程 流程控制—循环

    循环:重复执行所指定的代码片段,直到循环条件不满足,则退出循环 一、for循环     语法格式:     for 变量名 in 列表     do         循环体     done &nbs…

    Linux干货 2016-08-24
  • 为什么系统可执行文件多用相对路径创建链接

    为什么系统可执行文件多用相对路径创建链接 使用链接有什么好处 作为一个linux初学者,我们首先要知道,在linux中使用链接的好处是什么。总结下来一共有几个: 使用链接可以使我们在访问文件时省去一大笔敲文件路径的时间。对于我们运维工程师来说,我们经常要查看某个文件或者访问某个目录,再进行该项工作时,往往需要敲很多路径才能找到我们想访问的文件,创建链接可以让…

    Linux干货 2017-07-23
  • 磁盘管理之LVM

    1、什么是LVM     LVM(Logical Volume Manager)逻辑卷管理,是linux环境下将一种将一个或多个硬盘的分区在逻辑上集合来呈现给上层应用,对磁盘实现动态管理的机制。相对于普通的磁盘分区有很大的灵活性,使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。 2、专业术语     &nbsp…

    Linux干货 2016-09-02
  • 定时任务应用示例

    定时任务应用示例 1.每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202 mkdir /backup crontab -e * */4 * * * cp -ar /etc/ /backup/etc-$(date +%Y%m%d%H%M) 2.每周2,4,6备份/var/log/messages…

    Linux干货 2017-08-06
  • 学习宣言

    人所缺乏的不是才干而是志向,不是成功的能力而是勤劳的意志。

    Linux干货 2016-10-30
  • CentOS 更改改网卡名称

    1 查看你的CentOS7网卡名字叫什么(通常第一个网卡叫做eno16777736) ip addr 2 编辑配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 把配置文件里面所有eno16777736改为eth0 3 把网卡配置文件名字也修改一下 cd /etc/sysconfig/networ…

    2018-01-18