Chinaunix首页 | 论坛 | 博客
  • 博客访问: 215486
  • 博文数量: 87
  • 博客积分: 192
  • 博客等级: 入伍新兵
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-14 07:44
文章分类

全部博文(87)

文章存档

2013年(1)

2012年(86)

分类: LINUX

2012-04-14 17:08:59


  1. #!/bin/sh
  2. ### FileName: ddos_drop.sh
  3. ### Auth: Sunshine GU
  4. ###程序文件路径
  5. nginx_log_file=/home/wwwlogs/access.log
  6. apache_log_file=/var/log/httpd/access.log
  7. ###IP列表存储路径
  8. grep_list=drop_ip.dat
  9. ###IP列表排除
  10. else_list='192.168.14|127.0.0.1|0.0.0.0'
  11. ###监控端口
  12. grep_port='80|8080|443'
  13. ###执行间隔时间(s)
  14. exec_time=60
  15. ###清空旧的非法IP
  16. if [ -e $grep_list ];then
  17. rm -f $grep_list
  18. fi
  19. ###服务器为nginx,则启动此过程
  20. nginx_moudle() {
  21. tail $nginx_log_file -n 1000|grep -E 'GET|POST'|awk {'print $1'}|sort|uniq -c|sort -nr|awk '{if ($2!="-" && $1>100) {print $2}}' > $grep_list
  22. for i in `cat $grep_list`
  23. do
  24. if [ $i!=`iptables --list|grep $i|awk {'print $4'}` ];
  25. then
  26. /sbin/iptables -I INPUT -s $i -j DROP;
  27. fi
  28. done
  29. }
  30. ###服务器为apache,则启动此过程
  31. apache_moudle() {
  32. tail $apache_log_file -n 1000|grep -E 'GET|POST'|awk {'print $1'}|sort|uniq -c|sort -nr|awk '{if ($2!="-" && $1>100) {print $2}}' > $grep_list
  33. for i in `cat $grep_list`
  34. do
  35. if [ $i!=`iptables --list|grep $i|awk {'print $4'}` ];
  36. then
  37. /sbin/iptables -I INPUT -s $i -j DROP;
  38. fi
  39. done
  40. }
  41. ###根据连接状态进行IP屏蔽
  42. netstat_moudle() {
  43. /bin/netstat -ant |grep -E $grep_port|awk '{print $5}'|awk -F : '{print $1}'|sort|uniq -c|sort -rn|grep -v -E $else_list|awk '{if ($2!=null && $1>50) {print $2}}' > $grep_list
  44. for i in `cat $grep_list`
  45. do
  46. if [ $i!=`iptables --list|grep $i|awk {'print $4'}` ];
  47. then
  48. /sbin/iptables -I INPUT -s $i -j DROP;
  49. fi
  50. done
  51. }
  52. ###启动命令控制
  53. case "$1" in
  54. nginx)
  55. while true
  56. do
  57. nginx_moudle
  58. sleep $exec_time
  59. done
  60. ;;
  61. apache)
  62. while true
  63. do
  64. apache_moudle
  65. sleep $exec_time
  66. done
  67. ;;
  68. netstat)
  69. while true
  70. do
  71. netstat_moudle
  72. sleep $exec_time
  73. done
  74. ;;
  75. *)
  76. echo $"Usage: $prog {nginx|apache|netstat}"
  77. exit 1
  78. esac

阅读(2115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~