用shell实现简单的IDS检测系统

 

  
  
  
  
  1. #!/bin/bash 
  2. #intruder_detect 
  3. #author:shanker 
  4. #date:2012/4/23 
  5. #detect the invlaid users 
  6. AUTHLOG=/var/log/secure 
  7. if [ -n "$1" ] 
  8. then 
  9.   AUTHLOG=$1 
  10.   echo "Using log file:$AUTHLOG" 
  11. fi 
  12. LOG=/tmp/valid.$$.log 
  13. grep -vi "invalid" "$AUTHLOG" > $LOG 
  14. users=$(grep "Failed password" $LOG | awk '{print $(NF - 5)}'|sort -u) 
  15. printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n"  "Sr#" "User" "Attempts" "IP address" "Host_mapping" "Time Range" 
  16. ucount=0 
  17. ip_list="$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" $LOG |sort -u)" 
  18. for ip in $ip_list 
  19. do 
  20.   grep $ip $LOG > /tmp/temp.$$.log 
  21.   for user in $users 
  22.   do 
  23.     grep $user /tmp/temp.$$.log > /tmp/$$.log 
  24.     cut -c-16 /tmp/$$.log > /tmp/$$.time 
  25.     tstart=$(head -1 /tmp/$$.time) 
  26.     start=$(date -d "$tstart" "+%s") 
  27.     tend=$(tail -1 /tmp/$$.time) 
  28.     end=$(date -d "$tend" "+%s") 
  29.     limit=$(($end - $start)) 
  30.     if [ $limit -gt 20 ] 
  31.     then 
  32.       let ucount++ 
  33.       IP=$(egrep -o  "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/$$.log|head -1) 
  34.       TIME_RANGE="$tstart--->$tend" 
  35.       ATTEMPTS=$(cat /tmp/$$.log|wc -l) 
  36.       HOST=$(host $IP |awk '{print $NF}') 
  37.       printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE" 
  38.     fi 
  39.     done 
  40. done 
  41. rm /tmp/valid.$$.log /tmp/$$.log /tmp/$$.time /tmp/temp.$$.log 2>/dev/null 

脚本很简单,就是检测20天以内尝试登录系统的用户,尝试次数,ip地址,host名字和日期。

你可能感兴趣的:(shell,ids)