多语言展示
当前在线:103今日阅读:91今日分享:37

如何防止ddos攻击

dos攻击,让你的计算机或网络无法提供正常访问
方法/步骤
1

先检查了web服务器日志,没有异常。查看防火墙日志和路由器日志,发现部分可疑流量,进而发现攻击时,路由器日志里有大量64字节的数据包,还有大量的“UDP-other”数据包,而web服务器日志还是正常。

2

SYN洪泛式攻击,利用tcp三次握手,由伪造的IP地址向目标端发送请求报文,而目标端的响应报文永远无法发送,如果有成千上万的这种连接,目标端等待关闭连接的过程会消耗大量的主机资源

3

禁止所有发给目标IP的UDP包,这种做法会让服务器丧失部分功能,如:DNS.好处:减轻了web服务器的压力,web可以正常工作弊端:攻击仍然可以到达web,影响网络性能

4

联系上游带宽提供商,暂时限制网站端口的UDP进入流量,降低网络到服务器的流量

5

统计SYN_RECV的状态,发现有大量的tcp同步数据包,但是连接上的却没有几个[root@xiaoya ~]# netstat -an|grep SYN_RECV|wc -l1522或者查看当前最大连接数[root@xiaoya ~]# netstat -na|grep EST|awk '{print $5}'|cut -d':' -f1,3|sort|uniq -c|sort -n1 192.168.150.102 192.168.150.20… …1987 192.168.150.200明显是收到了dos攻击

解决策略
1

分析web日志把单IP PV数高的封掉(可按天定义PV=1000即封掉)[root@xiaoya ~]# cat test#!/bin/bash  while true  do  ####access.log为web日志文件  awk '{print $1}' access.log | grep -v '^$' | sort | uniq -c > tmp.log          exec < tmp.log             #输入重定向    while read line            #读取文件    do      ip=`echo $line | awk '{print $2}'`      count=`echo $line | awk '{print $1}'`        if [ $count -gt 100 ] && [ `iptables -n -L | grep '$ip' | wc -l` -lt 1 ]        then          iptables -I INPUT -s $ip -j DROP          echo '$line is dropped' >> droplist.log        fi      done  sleep 3  done

2

分析网络连接数netstat -an | grep EST查看网络状态如下:tcp        0      0 192.168.40.125:46476        112.95.242.171:80           ESTABLISHEDtcp        0     74 192.168.40.125:57948        173.194.127.177:443         ESTABLISHEDtcp        0      0 192.168.40.125:52290        118.144.78.52:80            ESTABLISHEDtcp        0      0 192.168.40.125:42593        163.177.65.182:80           ESTABLISHEDtcp        0      0 192.168.40.125:49259        121.18.230.110:80           ESTABLISHEDtcp        0      0 192.168.40.125:52965        117.79.157.251:80           ESTABLISHED脚本如下[root@xiaoya ~]# cat test#!/bin/bash  while true  do grep EST est.log | awk -F '[ :]+' '{print $6}' | sort | uniq -c > tmp.log  ####netstat -an | grep EST | awk -F '[ :]+' '{print $6}' | sort | uniq -c  exec < tmp.log    while read line    do      ip=`echo $line | awk '{print $2}'`      count=`echo $line | awk '{print $1}'`        if [ $count -gt 100 ] && [ `iptables -n -L | grep '$ip' | wc -l` -lt 1 ]        then          iptables -I INPUT -s $ip -j DROP          echo '$line is dropped' >> droplist.log        fi      done  sleep 3  done

推荐信息