LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1513|回复: 0

防SSH密码暴力破解脚本

[复制链接]
发表于 2007-1-31 23:36:04 | 显示全部楼层 |阅读模式
本人第一次写脚本,下面这个是边写边查手册写的...(汗.. 看谁敢用). 如有好的建议或改进方法请不蔽指教. 谢谢.

测试环境 RH AS3 U4



  1. #!/bin/bash
  2. # 防SSH密码暴力破解脚本
  3. # 通过分析secure日志文件使用iptables拒绝恶意登入IP
  4. # by Qlin 2007.01.31

  5. LOG_FILE='/var/log/secure';         #日志路路径
  6. SAVE_FILE='belialIP';               #保存iptables拒绝IP文件名
  7. SAVE_TEMP_FILE=$SAVE_FILE'.temp';   #临时保存拒绝IP文件名,比较用
  8. IP_REPEAT=6;                        #允许尝试登入次数

  9. #二次正则是考虑日志文件过大导致sort排序过慢的问题(这只是我个人猜想并不排除正则比排序更慢的情况... -_-!)
  10. ip=`sed -n -e '/.*Failed password.*/p' $LOG_FILE | sort | uniq -c | awk -v nnm=$IP_REPEAT '{if($1 > num) print $0;}' | sed -n -e 's/.*Failed password.*from[ ]\(.*\)[ ]port.*/\1/p'`;

  11. backIFS=$IFS;
  12. IFS="\n";

  13. if [ -e $SAVE_FILE ]
  14. then
  15.     echo $ip > $SAVE_TEMP_FILE;
  16.     differ=`comm -13 $SAVE_FILE $SAVE_TEMP_FILE`;
  17.     tmp=`cat $SAVE_FILE`;
  18.     echo -e $differ"\n"$tmp | uniq | sort > $SAVE_FILE;
  19. else
  20.     differ=$ip;
  21.     echo $ip > $SAVE_FILE;
  22. fi

  23. if [ ${differ} ]
  24. then
  25.     IFS=$backIFS;
  26.     ips=`echo $differ | tr "\n" ' ' | tr -s ' '`;

  27.     for dip in $ips;
  28.     do
  29.         iptables -A INPUT -s $dip -j DROP
  30.     done;
  31. fi

复制代码


ps:  写完才发现已有类似这样的脚本了.. 惨念.


新版..


  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;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表