容器技术交流

 找回密码
 立即注册
查看: 5634|回复: 2

分析日志自动封IP脚本,并带邮件通知!

[复制链接]
发表于 2013-10-23 17:04:25 | 显示全部楼层 |阅读模式
本帖最后由 guan6 于 2013-10-23 17:07 编辑

最近总有无聊的人尝试用户的账户密码,日志里留下一大堆的穷举记录。都是访问一个文件。因为是软件,所以速度很快,会导致网站访问速度下降!
所以写了下面的shell,分析日志找住这些ip,自动封掉,一小时后再解封;

注:日志为LUM默认格式,各位的日志格式可能会不同,根据自己的格式修改代码;

需求:
通过计划任务,每隔1分钟读取日志的最后1000条记录,符合以下条件的ip会被封掉。默认封锁一小时;
1、IP不在白名单中;
2、此ip的记录中不包含指定的关键字;
3、1000条记录中,此ip的记录数大于 100;

注:条件可以根据自己的需求修改;

脚本内容:

  1. #!/bin/sh
  2. #name:虫子
  3. #qq:405171253
  4. #mail:405171253@qq.com

  5. ip_add_time=`date +%s`        #当前时间(秒)
  6. ip_return_time=3600        #IP被封锁时间(秒)
  7. ip_last_time=$[$ip_add_time+$ip_return_time]        #解封时间
  8. log_file='/var/log/feng_ip.log'        #日志文件位置
  9. ip_blank='127.0.0.1,192.168.1.1' #白名单 多个用","隔开
  10. web_log_array=('/home/hosts_log/1_access.log' '/home/hosts_log/2_access.log')        #日志数组 多个地址用空格隔开
  11. web_log_len=${#web_log_array[@]}        #数组长度
  12. php_cli='/usr/local/php_fcgi/bin/php'        #设置php执行文件路径
  13. send_mail='/home/feng_ip/send_mail.php'        #设置邮件发送文件路径

  14. if [ ! -f "$log_file" ];then
  15.     touch $log_file
  16. fi

  17. #分析日志 封锁IP
  18. #读取每个日志最后的1000条 如果单ip记录大于100 封锁ip 并记录到日志
  19. #排除包含 jpg|gif|png 的行 多个用 | 隔开

  20. for (( x=0;x<$web_log_len;x++ ))
  21. do
  22.   for i in `tail ${web_log_array[$x]} -n 1000 | awk '$10 !~ /jpg|gif|png/ {print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>100){print $2}}'`
  23.   do
  24.     if [ `echo $ip_blank|grep -c $i` == 0 -a `cat $log_file|grep -c $i` == 0 ];then
  25.         /sbin/iptables -I INPUT -s $i -j DROP
  26.         echo $i,$ip_add_time,$ip_last_time >> $log_file
  27.         $php_cli $send_mail 0 $i
  28.     fi
  29.   done
  30. done

  31. #读取日志文件,解封过期的IP,并在日志中删除记录

  32. for i in `cat $log_file | awk -F "," '{if ($3<'$ip_add_time'){print $1}}'`
  33. do
  34.         /sbin/iptables -D INPUT -s $i -j DROP
  35.         sed -i '/'$i'/d' $log_file
  36.         $php_cli $send_mail 1 $i
  37. done
复制代码



使用:
解压feng_ip.tar,到任意目录;编辑 feng_ip.sh、send_mail.php,根据注释修改配置文件;
包含文件:email.class.php (php邮件类)、feng_ip.sh(shell脚本)、send_mail.php(发送邮件php)
加入计划任务:
  1. crontab -e
  2. #加入如下代码(记得修改文件位置)
  3. */1 * * * * /home/feng_ip/feng_ip.sh
复制代码



下载:
feng_ip.tar (13.5 KB, 下载次数: 3598)

发表于 2013-11-3 15:17:39 | 显示全部楼层
记号 备用
发表于 2013-11-9 13:18:44 | 显示全部楼层
请问白名单里可不可以写ip段呢,把常用的蜘蛛段ip写进去,防止拦截了蜘蛛
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|URLOS ( 粤ICP备18087780号 )

GMT+8, 2024-4-26 01:52 , Processed in 0.040702 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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