namedhao 发表于 2019-1-16 12:33:40

url防篡改脚本(nagios 插件)

  之前工作需要,为nagios写的url篡改告警shell脚本。若url页面变动则告警。若为正常修改,则需手动重新生成hash文件,适用于变动不频繁而又较关键url。根据经验,若页面插入其他统计流量,显示时间等代码,则无法很好经行url修改监控。
  功能核心是经行url比较。利用curl 下载页面,然后计算hash值,并保存以备下次比较,此部分思想由jokechoo提供,脚本实现:tqh。 不同于防篡改,此处是实时url比较,告警。
  而防篡改技术,一般由2组服务器提供web服务,一组对外服务,此组服务器无修改权限,一旦文件被修改就会被另一组后台服务器同步回去,以此实现防篡改。想要安全就要付出不少代价。
  
插件1.inithash.sh   计算原始hash值并保存 。(注意修改生成hash文件的权限,或改为nagios用户生成)
插件2. check_hashnagios的检测插件
  PS:插件内使用的是中文,注意编码格式utf-8,可先手工调试是否显示中文。若nagios主程序本身无中文支持可能显示为乱码。
  代码如下,需要可下载附件。
  一、插件1inithash.sh


[*]#!/bin/bash
[*]# version 1.0 beta,2011.01.17
[*]# used for add/updatewebpage hash
[*]hash_lib=/tmp/test/hashfile
[*]url_list=/tmp/test/urlfile         #模式1 直接修改url文件地址
[*]log_file=/tmp/test/updatehash.log
[*]
[*]#######@@ #注释掉上面url_list,开启此处@@之间内容,变为交互模式。另一check脚本会生成update.list方便update
[*]#if[ $# -eq 1-a-f "$1" ]
[*]#then
[*]#   url_list="$1"
[*]#   echo $url_list   
[*]#else
[*]#   echo "ERROR: plz input 1 urlfile"
[*]#   exit
[*]#fi
[*]########@@
[*]###以下注释内容暂无意义。
[*]#[ ! -e $url_list ] && echo "not exist urlfile" && exit
[*]###tmp_dir=/tmp/test
[*]###web_tmp=/tmp/test/tmpfile
[*]###cd $tmp_dir || echo "no tmp_dir,plz create first" && exit
[*]
[*]while read LINE
[*]do
[*]curl -s-A topsec $LINE > tmpfileabc   
[*] #URL名可能含/,无法直接作为文件名,hash表需针对URL作修改
[*]#if [ !$? -eq 0 ]                     #URL页面无法下载,测试中
[*]#then
[*]#echo "this page cant download"
[*]#fi
[*]hashtmp=`sha1sum tmpfileabc`            #生成当前页面HASH
[*]greptmp=`grep $LINE $hash_lib`          #检测该URL是否已hash
[*]if [ $? -eq 0]
[*]    then
[*]      echo "The site $LINE has checked before, update the hash value."
[*]      sed -i "s#$greptmp#$hashtmp#"$hash_lib      #用#做分隔,确保页面url中无#号         
[*]            sed -i s#tmpfileabc#"$LINE"#   $hash_lib   #将tmpfileabc替换为正确url
[*]      echo `date +%Y%m%d_%R` "$LINE hash has updated" >> $log_file
[*]    else
[*]      echo "The site $LINE is a new check, add the hash value."
[*]      echo $hashtmp>> $hash_lib
[*]      sed -i "s#tmpfileabc#$LINE#"   $hash_lib      
[*]
[*]fi
[*]rm -f tmpfileabc
[*]
[*]done < $url_list


二、 插件2.check_url


[*]#!/bin/bash
[*]#version 1.0 ,2011.01.18
[*]#nagios check http plug.check whether webpage has modified . url list is from file
[*]#后续不同参数不同站点等
[*]
[*]url_list=/tmp/test/urlfile
[*]hash_lib=/tmp/test/hashfile
[*]tmp_dir=/tmp/test
[*]log_file=/tmp/test/hashcheck.log
[*]need_update=/tmp/test/needupHASH.list
[*]cd $tmp_dir
[*]
[*]
[*]flag_a=0
[*]flag_c=0
[*]
[*]while readURL
[*]do
[*]
[*]curl -s-A topsec&quot;$URL&quot; > webtmpfile
[*]current_hash=`sha1sum webtmpfile | awk '{print$1}'`
[*]
[*]#####################check url hash
[*] if`grep$URL $hash_lib>greptmpfile`   #测试URL是否已经HASH处理过   
[*] then
[*]            if    grep -q $current_hashgreptmpfile    #比对HASH值         
[*]            then
[*]                flag_a=0                              #未变动
[*]            else
[*]                flag_a=1                              #变动
[*]                echo`date +%Y%m%d_%R` &quot;$URL web changed&quot; >> $log_file
[*]                echo &quot;$URL&quot; >>$need_update                  
[*]                #保存到需更新url文件中,或者直接从l_file文件中提提取
[*]            fi
[*]else
[*]       flag_c=3                           #HASH值未被保存过
[*]       echo`date +%Y%m%d_%R` &quot;$URL hash should be create&quot; >>$log_file
[*]       echo&quot;$URL&quot; >>$need_update
[*]fi
[*]
[*]done < $url_list
[*]rm -f greptmpfile
[*]rm -f webtmpfile
[*]######################nagios checkstat
[*]if [ $flag_c -eq 3 ]
[*]then
[*]    if [ $flag_a -eq 1]
[*]    then
[*]      echo &quot;网页改动,且检测到新URL&quot;   #检测到网页改动,且含有新URL
[*]      exit 3
[*]    else
[*]      echo &quot;检测到新URL&quot;      #正常,但有新URL未做比对。 后续手动/自动添加
[*]      exit 1
[*]    fi
[*]else
[*]    if[ $flag_a -eq 0]
[*]    then
[*]      echo &quot;一切正常&quot;               #页面未被篡改
[*]      exit 0
[*]    else
[*]      echo &quot;网页内容改动&quot;         #改动
[*]      exit 2
[*]    fi
[*]
[*]fi



附件:http://down.运维网.com/data/2357530

页: [1]
查看完整版本: url防篡改脚本(nagios 插件)