DDoS 공격 생산 사례 해결

8661 단어
웹 로그 나 네트워크 연결 수 에 따라 특정한 IP 의 동시 접속 수 나 짧 은 시간 내 에 PV 가 100 에 달 하 는 것 을 감시 합 니 다. 즉, 방화벽 명령 으로 해당 하 는 IP 를 차단 합 니 다.
물론 각 회사 의 IP 병발 수 는 각각 다 르 지만 위 에 서 는 예 를 들 어 설명 할 뿐이다.
내 Nginx 의 WEB 로 그 는 매일 절단 처 리 를 하기 때문에, 그렇지 않 으 면 모든 웹 로그 가 한데 쌓 여 번 거 로 움 을 볼 수 있 습 니 다.
시스템 상태:
1 [root@nginx shell]# cat /etc/redhat-release 
2 CentOS release 6.7 (Final)
3 [root@nginx shell]# uname -r
4 2.6.32-573.el6.x86_64
5 [root@nginx shell]# /application/nginx/sbin/nginx -v
6 nginx version: nginx/1.10.3

1. 웹 로그 절단 스 크 립 트
스 크 립 트 는 다음 과 같 습 니 다. 네티즌 들 은 자신의 수요 에 따라 변경 할 수 있 습 니 다.
이 스 크 립 트 는 정 해진 시간 에 작업 을 수행 하고 일수 에 따라 절단 할 수 있 습 니 다.
#!/bin/bash

#-------------CopyRight-------------  
#   Name:Cut Ningx logs
#   Version Number:1.1  
#   Type:sh  
#   Language:bash shell  
#   Date:2018-05-16  
#   Author:xubing
#   QQ:442656067
#   Email:eeexu123@163.com  
#   Blog:https://www.cnblogs.com/eeexu123/


#Nginx        
IP=$(ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}')

#cut every day nginx log
cut(){
  [ -d "/application/nginx/logs" ]||{
     echo "Nginx logs is not exist."
     exit 1 
  }

  cd /application/nginx/logs
  /bin/mv www_access.log www_access_$(date +%F).log
  /application/nginx/sbin/nginx -s reload
}

#tar nginx log file to /backup
backup(){
  [ -d "/backup/$IP" ]||{
     mkdir -p /backup/$IP
  }

  tar -zcf /backup/$IP/www_access_$(date +%F).log.tar.gz www_access_$(date +%F).log

  #rysnc /backup file to backup server
  rsync -avz /backup/$IP rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password  //         
}

#del before 7 day nginx log
del(){
  find /application/nginx/logs -type f -name "*$(date +%F).log" -mtime +7 | xargs rm -f
  find /backup/$IP -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
}

main(){
  cut
  sleep 2
  backup
  sleep 2
  del
}
main

2, 도스 공격 보호 스 크 립 트
위 웹 로그 에 따라 PV 통 계 를 진행 합 니 다.이 스 크 립 트 는 정시 작업 에 넣 을 수 있 습 니 다.main 함수 에서 while 순환 도 할 수 있 습 니 다.
 
#!/bin/bash

#-------------CopyRight-------------  
#   Name:defined DoS
#   Version Number:1.1 
#   Type:sh  
#   Language:bash shell  
#   Date:2018-05-16 
#   Author:xubing
#   QQ:442656067
#   Email:eeexu123@163.com  
#   Blog:https://www.cnblogs.com/eeexu123/

ch_web_log(){
  awk '{print $1}' /application/nginx/logs/www_access_$(date +%F).log|sort|uniq -c|sort -rn -k1>/tmp/ip.log  //    IP      ip.log   

  while read line
  do
    PV=`echo $line|awk '{print $1}'`    //IP    
    IP=`echo $line|awk '{print $2}'`
    if [ $PV -ge 100 -a `iptables -nL|grep "$IP"|wc -l` -lt 1 ];then   // PV  100 IP,            IP。          IP
       iptables -I INPUT -s $IP -j DROP     //     
       echo "$IP" >>/tmp/`date +%F`_ip.log  //    IP      
       echo "The DROP ip is $IP"
    fi
  doneip.log
}

# IP del(){ exec '1day ago')_ip.log while read line do iptables -D INPUT -s $line -j DROP done } main(){ ch_web_log sleep 2 del } main

좋은 웹페이지 즐겨찾기