簡單的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.www58058.com/74076

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

相關推薦

  • 周期性計劃任務crond講解

    crond是Linux或者unix系統的作業調度程序。運用它,在設定的時間段周期性執行某個命令或腳本。下文的例子均在centos 7.3上測試。一、crond組件 如果centos7.3最小化安裝,不一定存在crond服務,需要手動安裝,安裝之后手動啟動并設置以后自行開機啟動。 主要有cronie、cronie-anacron、crontabs三個程序包。 …

    Linux干貨 2017-03-27
  • 交換分區管理

    創建交換分區 linux上的交換分區必須使用獨立的文件系統且文件系統的systemid必須為82mkswap [options] device [size] 創建交換分區文件系統 掛載交換分區     swapon 設備名稱 處理交換文件和分區     交換分區是系統RAM的補充  &nb…

    Linux干貨 2016-09-02
  • Linux基礎知識之選擇循環執行

    1.選擇執行:     a.單分支if語句:         if 判斷條件;then(此處必須有;和then  then可以單獨占一行)        &nb…

    Linux干貨 2016-08-18
  • 簡述硬盤參數和ext2文件系統

    硬盤類型: HDD機械硬盤和SSD固態硬盤: HDD是現在最普通的硬盤,容量大,穩定,是存儲數據的首選。SSD是現在新興的硬盤,相比HDD,它的并發i/o高,傳輸速度可達HDD的幾倍以上,無噪音低功耗,而且輕便防震,隨著各大廠商發力,性價比也越來越高,要求性能高或者數據輕度使用者可以優先考慮SSD。   容量:存儲數據的空間大小,一般來說HDD每G…

    Linux干貨 2016-04-19
  • linux 常用命令

    命令1 rm 作用: 刪除指定的文件  選項 作用 -f 強制刪除 -i 刪除前提示詢問 -r  或  -R 遞歸處理,刪除指定目錄下的所有文件包括子目錄 -v 顯示指令執行過程 -d 直接把刪除目錄的硬連接數據刪成零,刪除該目錄 命令2 終端(tty): 終端類型 開啟方式 物理終端 console 控制臺console 虛擬…

    Linux干貨 2017-07-13
  • 面向對象的實例方法,類方法和靜態方法

    類方法和靜態方法 普通函數 class Person: def normal_method(): print(‘normal’) Person.normal_method() # Person().normal_method() print(Person.__dict__) Person.normal_method()可以,是因為這個方法只是被Person這…

    2017-11-11
欧美性久久久久