网站受到DDoS的症状
1.服务器CPU被大量占用
如果服务器某段时期能突然出现CPU占用率过高,那么就可能是网站受到CC攻击影响。
服务器无响应了:
2.带宽被大量占用
,占用带宽资源通常是DDoS攻击的一个主要手段,毕竟对很多小型企业或者个人网站来说,带宽的资源可以说非常有限,网络的带宽被大量无效数据给占据时,正常流量数据请求很很难被服务器进行处理。如果服务器上行带宽占用率达到90%以上时,那么你的网站通常出现被DDoS攻击的可能。
3服务器连接不到,网站也打不开
如果网站服务器被大量DDoS攻击时,有可能会造成服务器蓝屏或者死机,这时就意味着服务器已经连接不上了,网站出现连接错误的情况。当然出现这种请求时我们最好是确认一下服务器是否是硬件故障等所导致出现的问题,否者在进行服务器连接时就要做好相关的防御首段。
4.域名ping不出IP
可能这种情况站长们可能会比较少考虑到,这其实也是DDoS攻击的一种表现,只是攻击着所针对的攻击目标是网站的DNS域名服务器。在出现这种攻击时,ping服务器的IP是正常联通的,但是网站就是不能正常打开,并且在ping域名时会出现无法正常ping通的情况。
判断是否被攻击
查看网络带宽占用
安装工具nethogs
查看网络连接
netstat -na命令观察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽攻击。
如果输出了多个结果,那么可能表示有人在企图进行DDOS攻击,想用TCP连接来拖死你的服务器,输出的ip就是发出请求的服务器地址,并且保存在了/tmp/evilip里面。如果没有结果,可以调整一下阈值,把50改成40试一试。
如果SYN_RECV非常高,那么表示受到了SYN洪水攻击。
TCP连接攻击
TCP连接攻击算是比较古老的了,防御起来也相对比较简单,主要是利用大量的TCP连接来消耗系统的网络资源,通常同一个IP会建立数量比较大的TCP连接,并且一直保持。应对方法也比较简单,可以将以下命令保存为脚本,定时ban掉那些傀儡机ip
限制每个ip的连接数为10。如果是大些业务系统的话,需要注意,上面的做法可能导致一些共用IP的用户访问中断。需要谨慎。
SYN洪水攻击
SYN洪水是利用TCP/IP协议的设计缺陷来进行攻击的,采用一些策略以及配置可以适当的降低攻击的影响,但并不能完全消除。
tcp_syncookies设置为1表示启用syncookie,可以大大降低SYN攻击的影响,但是会带来新的安全缺陷。
tcp_syn_retries 表示syn重试次数,重传次数设置为0,只要收不到客户端的响应,立即丢弃该连接,默认设置为5次。
tcp_max_syn_backlog表示syn等待队列,改小这个值,使得SYN等待队列变短,减少对系统以及网络资源的占用。
当攻击者的资源非常的多,上面这些方法限制可能就没有什么防护效果了,面对大流量DDoS攻击还是要考虑采用多机负载或者选择墨者安全高防来应对了,一般来说多机负载的成本可能更高,所以大部分人还是选择高防硬防产品来防御。
防御措施
目前没有一招制敌的办法。只能多措并举,多管齐下。
网站静态化
备份网站,方便切换。有点靠谱。
隐藏真实IP,采用CDN。源服务器前面有 CDN。如果攻击域名,CDN 可以挡住;如果直接攻击源服务器,可以考虑采用弹性 IP。
加大带宽,说了白说,小公司哪买得起那么大的带宽?
安装专业抗DDoS防火墙。装不起。
尽量避免NAT的使用。不明白。
买阿里或华为的DDoS高防服务。太贵,买不起。
当然,针对Linux服务器,还是能做一些基本防护的。
TCP/IP内核参数优化
iptables 防火墙预防
先查看服务器上连接web端口(比如80端口)的哪个ip是最多的,如果发现可疑ip,就果断将其断开与服务器连接
防止同步包洪水(Sync Flood)
防止同步包洪水(Sync Flood),可以缩短SYN-Timeout时间
–limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改防止各种端口扫描
控制单个IP的最大并发连接数
如下设置表示:允许单个IP的最大连接数为 30
禁止外部ping
相关应用工具:
DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限制时,该程序会通过APF或IPTABLES禁止或阻挡这些IP.
DDoS deflate其实是一个Shell脚本,使用netstat和iptables工具,对那些链接数过多的IP进行封锁,能有效防止通用的恶意扫描器,但它并不是真正有效的DDoS防御工具。
DDoS deflate工作过程描述:
同一个IP链接到服务器的连接数到达设置的伐值后,所有超过伐值的IP将被屏蔽,同时把屏蔽的IP写入ignore.ip.list文件中,与此同时会在tmp中生成一个脚本文件,这个脚本文件马上被执行,但是一
运行就遇到sleep预设的秒,当睡眠了这么多的时间后,解除被屏蔽的IP,同时把之前写入ignore.ip.list文件中的这个被封锁的IP删除,然后删除临时生成的文件。
一个事实:如果被屏蔽的IP手工解屏蔽,那么如果这个IP继续产生攻击,那么脚本将不会再次屏蔽它(因为加入到了ignore.ip.list),直到在预设的时间之后才能起作用,加入到了ignore.ip.list中的
IP是检测的时候忽略的IP。可以把IP写入到这个文件以避免这些IP被堵塞,已经堵塞了的IP也会加入到ignore.ip.list中,但堵塞了预定时间后会从它之中删除。
nginx版安全狗