免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Qlin
打印 上一主题 下一主题

大家帮我看看这个脚本有没有什么地方可以优化的? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-02-01 17:27 |只看该作者
哦,等等我看看,好像 $ (CONTENT_CMD) 不能执行

论坛徽章:
0
12 [报告]
发表于 2007-02-01 17:30 |只看该作者
不能执行. 提示:
-bash: CONTENT_CMD: command not found

论坛徽章:
0
13 [报告]
发表于 2007-02-01 17:32 |只看该作者
明白了,竟然是多了个空格:
  1. MAX_TRYS_PERMINUTE=1
  2. SAVE_FILE=log
  3. TAIL_LINES=500
  4. [ -f $SAVE_FILE ] && CONTENT_CMD="tail -${TAIL_LINES} /var/log/secure" || CONTENT_CMD="cat /var/log/secure"

  5. ${CONTENT_CMD} |grep 'Authentication failure' |awk '

  6. function banIP(pIP){
  7.         
  8.         print "iptables -A INPUT -s " pIP " -j DROP";
  9. }

  10. {
  11. # $10 为 ip,$3 为时间 hh:mm:ss 格式,根据实际情况修改
  12.         key = $10 "," substr($3, 1, 5);
  13.         fails[key]++;
  14. }
  15. END {
  16.         for (key in fails) if (fails[key] > maxTrys){
  17.                
  18.                 split(key, arr, ",");
  19.                 banIP(arr[1]);
  20.         }
  21. }
  22. ' maxTrys=$MAX_TRYS_PERMINUTE |tee -a $SAVE_FILE
复制代码

[ 本帖最后由 awk就是awp加ak 于 2007-2-1 18:27 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2007-02-01 17:40 |只看该作者
可以通过,  key = $10 要改成 key = $11

论坛徽章:
0
15 [报告]
发表于 2007-02-01 17:56 |只看该作者
那就是,没问题了?

论坛徽章:
0
16 [报告]
发表于 2007-02-09 14:42 |只看该作者
新改了一个版本,每次读入日志后会记录最后行的行号,下次再执行时会从最后行号开始读取数据, 谢谢楼上名位兄弟.




  1. #!/bin/bash
  2. LOG_FILE='/var/log/secure'; #日志路径
  3. REPEAT=3;                   #允许重试登入次数
  4. SLEEP_TIME='30m';           #脚本执行间隔时间(分钟)
  5. BELIAL_IP='';
  6. BEGIN_ROW=0;

  7. while(true)
  8. do
  9.     backIFS=$IFS;
  10.     IFS="\n";

  11.     re=`tail +$BEGIN_ROW $LOG_FILE | nl`;

  12.     numRow=`echo $re | awk 'END{ print $1; }'`;
  13.     let "BEGIN_ROW=$numRow+$BEGIN_ROW";

  14.     re=`echo $re | awk '{ if($0 ~ /Failed password/) print $12; }'`;
  15.     ip=`echo $re | sort | uniq -c | awk -v num=$REPEAT '{if($1 > num) print $2;}' | tr "\n" ' ' | tr -s ' '`;

  16.     IFS=$backIFS;
  17.     for dip in $ip
  18.     do
  19.         if ! echo $BELIAL_IP | grep -q $dip
  20.         then
  21.             iptables -A INPUT -s $dip -j DROP
  22.             BELIAL_IP="$BELIAL_IP $dip";
  23.         fi
  24.     done;

  25.     date >> debug;
  26.     echo -e $BELIAL_IP"\n"$numRow"\n"  >> debug;

  27.     sleep $SLEEP_TIME;
  28. done;

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP