记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。
网站被ddos攻击,遂写了个脚本来抵抗一下,实现方式:
1. 攻击特征,不同ip不断POST网站首页,造成资源消耗过度

2. 分析nginx访问日志,判断POST特征取得客户端访问ip

3. 将连接数大于50的攻击ip封杀
4. 记录攻击ip到文档

5. 每次取得的攻击ip与已有攻击ip比较

查看源代码:

  1. #!/bin/bash
  2.  
  3. WEBSITES=(
  4. example.com
  5. )
  6.  
  7. minute_now=`date +%M`
  8. max_connections=50
  9. banips="/wwwdata/jobs/banips.txt"
  10.  
  11. for site in ${WEBSITES[*]}
  12. do
  13. access_log_file="/wwwdata/logs/${site}.access.log"
  14. if [ -f "${access_log_file}" ]
  15. then
  16. cat ${access_log_file} | grep POST | awk '{print $1}' | sort |uniq -c| sort -nr > /wwwdata/jobs/ip_records.txt
  17. lines=`wc -l /wwwdata/jobs/ip_records.txt | awk '{print $1}'`
  18. echo "Lines: $lines"
  19. i=1
  20. while [ ${i} -le ${lines} ]
  21. do
  22. ip_record=`head -${i} /wwwdata/jobs/ip_records.txt | tail -1 | sed 's/^[ \t]*//g'`
  23. ip_count=`echo ${ip_record} | awk '{print $1}'`
  24. ip_address=`echo ${ip_record} | awk '{print $2}'`
  25. echo "${ip_count} ${ip_address}"
  26. if [ ${ip_count} -gt ${max_connections} ]
  27. then
  28. banned=`cat ${banips} | grep ${ip_address} | wc -l`
  29. if [ ${banned} -lt 1 ]
  30. then
  31. iptables -A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 80 -j DROP
  32. echo ${ip_address} >> ${banips}
  33. fi
  34. fi
  35. i=`expr ${i} + 1`
  36. done
  37. service iptables save
  38. service iptables restart
  39. if [ ${minute_now} -eq 30 ]
  40. then
  41. cat ${access_log_file} >> /wwwdata/logs/olds/${site}.access.log
  42. cat /dev/null > ${access_log_file}
  43. fi
  44. fi
  45. done
  46.  
  47. if [ ${minute_now} -eq 30 ]
  48. then
  49. service nginx restart
  50. fi
标签:shellnginxddos
本文声明:该文章是作者 飞辰 的原创文章,允许转载,但请注明出处,违者必究。
本文网址:http://www.wudiweb.com/code/35534791


转载请标明出处【Shell脚本分析Nginx日志抗小量ddos攻击 】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论