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"$URL" > 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` "$URL web changed" >> $log_file
[*] echo "$URL" >>$need_update
[*] #保存到需更新url文件中,或者直接从l_file文件中提提取
[*] fi
[*]else
[*] flag_c=3 #HASH值未被保存过
[*] echo`date +%Y%m%d_%R` "$URL hash should be create" >>$log_file
[*] echo"$URL" >>$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 "网页改动,且检测到新URL" #检测到网页改动,且含有新URL
[*] exit 3
[*] else
[*] echo "检测到新URL" #正常,但有新URL未做比对。 后续手动/自动添加
[*] exit 1
[*] fi
[*]else
[*] if[ $flag_a -eq 0]
[*] then
[*] echo "一切正常" #页面未被篡改
[*] exit 0
[*] else
[*] echo "网页内容改动" #改动
[*] exit 2
[*] fi
[*]
[*]fi
附件:http://down.运维网.com/data/2357530
页:
[1]