简单的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
下一篇 2017-04-24

相关推荐

  • 马哥教育网络班21期-第一次课程作业

    计算机组成部分及其作用 1.总线 电子管道,携带信息字节并在各个部件间传输。分为地址总线,数据总线,控制总线。 CPU最大可寻址范围:2^N*M,  N为地址总线数量,M为数据总线数量。 2.I/O设备 I/O设备及输入输出设备,最常见的输入设备就是我们非常熟悉的键盘,鼠标,我们通过我们通过这些设备向计算机传达指令,让计算机完成我们想要它完成的工作…

    Linux干货 2016-06-29
  • 用户管理权限命令总结

    用户 Linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰。 用户分类 超级用户:(root,UID=0) 普通用户:(UID在500到60000) 伪用户:(UID在1到499) 系统和服务相关的:bin、daemon、shutdown等 进程相…

    Linux干货 2017-04-03
  • N–25期 第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash declare -i sumlogin=0 declare -i sumnologin=0 for i …

    Linux干货 2017-03-07
  • 马哥教育网络班第21期+第二周课程作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 命令 选项 解释 cp -r 递归复制 copy -f 强行复制,若已存在则覆盖 -i 交互式 -p 保留属主属组权限时间戳 -L(不加也可以,默认) (源文件为链接)复制指向连接的文件 -P (源文件为链接) 以链接的方式复制过来 -a 归档复制,常用备份 命令 选项 …

    Linux干货 2016-07-17
  • samba应用

    samba详解 前言 前面学过了NFS,是一个网络文件系统,可以让远程连接像访问本地文件一样,在同一个网络上的多个用户间共享目录和文件系统。只不过NFS只是针对于两个linux主机,我们现在需要linux主机和windows主机都能共享,这个时候就用到了samba。 1、步骤,允许个别用户访问 1、安装下面三个包: samba samba-common sa…

    Linux干货 2016-12-21