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_hash  nagios的检测插件

PS:插件内使用的是中文,注意编码格式utf-8,可先手工调试是否显示中文。若nagios主程序本身无中文支持可能显示为乱码。 

 代码如下,需要可下载附件。

一、插件1  inithash.sh

  1. #!/bin/bash 
  2. # version 1.0 beta,2011.01.17 
  3. # used for add/update  webpage hash 
  4. hash_lib=/tmp/test/hashfile 
  5. url_list=/tmp/test/urlfile         #模式1 直接修改url文件地址 
  6. log_file=/tmp/test/updatehash.log 
  7.  
  8. #######@@ #注释掉上面url_list,开启此处@@之间内容,变为交互模式。另一check脚本会生成update.list  方便update 
  9. #if  [ $# -eq 1  -a  -f "$1" ]  
  10. #then 
  11. #   url_list="$1" 
  12. #   echo $url_list   
  13. #else 
  14. #   echo "ERROR: plz input 1 urlfile" 
  15. #   exit 
  16. #fi 
  17. ########@@ 
  18. ###以下注释内容暂无意义。 
  19. #[ ! -e $url_list ] && echo "not exist urlfile" && exit 
  20. ###tmp_dir=/tmp/test 
  21. ###web_tmp=/tmp/test/tmpfile 
  22. ###cd $tmp_dir || echo "no tmp_dir,plz create first" && exit  
  23.  
  24. while read LINE 
  25. do 
  26. curl -s  -A topsec $LINE > tmpfileabc   
  27.  #URL名可能含/,无法直接作为文件名,hash表需针对URL作修改  
  28. #if [ !  $? -eq 0 ]                     #URL页面无法下载,测试中 
  29. #then 
  30. #echo "this page cant download" 
  31. #fi 
  32. hashtmp=`sha1sum tmpfileabc`            #生成当前页面HASH 
  33. greptmp=`grep $LINE $hash_lib`          #检测该URL是否已hash 
  34. if [ $? -eq 0  ] 
  35.     then 
  36.         echo "The site $LINE has checked before, update the hash value." 
  37.         sed -i "s#$greptmp#$hashtmp#"  $hash_lib      #用#做分隔,确保页面url中无#号           
  38.             sed -i s#tmpfileabc#"$LINE"#   $hash_lib   #将tmpfileabc替换为正确url 
  39.         echo `date +%Y%m%d_%R` "$LINE hash has updated" >> $log_file  
  40.     else 
  41.         echo "The site $LINE is a new check, add the hash value." 
  42.         echo $hashtmp>> $hash_lib 
  43.         sed -i "s#tmpfileabc#$LINE#"   $hash_lib      
  44.  
  45. fi 
  46. rm -f tmpfileabc 
  47.  
  48. done < $url_list 

 

 二、 插件2.  check_url 
  1. #!/bin/bash  
  2. #version 1.0 ,2011.01.18 
  3. #nagios check http plug.  check whether webpage has modified . url list is from file  
  4. #后续不同参数不同站点等 
  5.  
  6. url_list=/tmp/test/urlfile 
  7. hash_lib=/tmp/test/hashfile 
  8. tmp_dir=/tmp/test 
  9. log_file=/tmp/test/hashcheck.log 
  10. need_update=/tmp/test/needupHASH.list 
  11. cd $tmp_dir  
  12.  
  13.  
  14. flag_a=0 
  15. flag_c=0 
  16.  
  17. while read  URL 
  18. do 
  19.  
  20. curl -s  -A topsec  "$URL" > webtmpfile 
  21. current_hash=`sha1sum webtmpfile | awk '{print$1}'`  
  22.  
  23. #####################check url hash 
  24.  if  `grep  $URL $hash_lib>greptmpfile`     #测试URL是否已经HASH处理过   
  25.  then 
  26.  if    grep -q $current_hash  greptmpfile    #比对HASH值         
  27.             then 
  28.                 flag_a=0                                #未变动 
  29.             else 
  30.                 flag_a=1                                #变动 
  31.                 echo  `date +%Y%m%d_%R` "$URL web changed" >> $log_file 
  32.                 echo "$URL" >>$need_update                   
  33. #保存到需更新url文件中,或者直接从l_file文件中提提取 
  34.             fi 
  35. else 
  36.        flag_c=3                           #HASH值未被保存过  
  37.        echo  `date +%Y%m%d_%R` "$URL hash should be create" >>$log_file  
  38.        echo  "$URL" >>$need_update 
  39. fi 
  40.  
  41. done < $url_list  
  42. rm -f greptmpfile 
  43. rm -f webtmpfile 
  44. ######################nagios checkstat  
  45. if [ $flag_c -eq 3 ] 
  46. then 
  47.     if [ $flag_a -eq 1  ] 
  48.     then 
  49.         echo "网页改动,且检测到新URL"   #检测到网页改动,且含有新URL 
  50.         exit 3 
  51.     else 
  52.         echo "检测到新URL"        #正常,但有新URL未做比对。 后续手动/自动添加
  53.         exit 1 
  54.     fi 
  55. else  
  56.     if  [ $flag_a -eq 0  ] 
  57.     then 
  58.         echo "一切正常"               #页面未被篡改 
  59.         exit 0 
  60.     else 
  61.         echo "网页内容改动"           #改动 
  62.         exit 2 
  63.     fi 
  64.  
  65. fi 

 

 

本文出自 “tqhlyzzzzzzzzz” 博客,请务必保留此出处http://tqhlyz.blog.51cto.com/1093844/487870

posted on 2012-04-06 17:38  草原和大树  阅读(1746)  评论(0编辑  收藏  举报